量化交易Python回测系统
Project description
QuantDigger 0.4.0
==================
QuantDigger目前是一个基于python的量化回测框架。作者最初是因为对数据处理和机器学习感兴趣而选择了这个行业,
接触了一些主流的期货交易软件,比如TB, 金字塔。他们的特点是语法比较简单,缺点是编程语言太封闭,有很多表达限制。
所以选择自己开发一个交易系统,做为交易和研究的工具,甚至尝试过商业化。最初选择c++做为实现语言,但是后面
发现开发效率太低,重要的是做为研究工具来说,其易用性和和扩展性都比不上基于python的回测框架。相比其它流行的
回测框架比如 zipline_ , pyalgotrade_ ,QuantDigger的策略语法更简单,类似MC,TB这些商业软件,但并不牺牲灵活性,保留了python这门通用语言的
所有功能。QuantDigger目前还是定位于研究工具,但是设计上还是会从实盘交易的角度考虑,将来也会接入交易接口。虽然有很多细节还有待完善,
但是核心的设计和功能已经实现了。代码也比较简单,大家有兴趣的可以自己拓展。 如果大家有什么问题和建议,欢迎加入我们的QQ交流群--334555399,或者
联系发起者(yellowblue QQ:33830957) 。 在项目的推进过程中得到很多朋友的帮助, 在这表示感谢!
除了开发人员,还要特别感谢北京的 vodkabuaa_ 和国元证券的王林峰给出的意见, ongbe_ 帮忙修复代码bug, tushare_ 库的作者 Jimmy_ 和深大的邓志浩帮忙推荐
这个库,以及所有朋友的支持。
文档
---
http://www.quantfans.com/doc/quantdigger/
安装
---
或者克隆github代码后本地安装
::
git clone https://github.com/QuantFans/quantdigger.git
python install.py (会根据情况安装pip, 及依赖包)
依赖库
-----
* matplotlib
* numpy
* logbook
* pandas
* progressbar
* python-dateutil
* pyqt (可选)
* Python (2.7.8+, **暂不支持3.x**)
* tushare_ (可选, 一个非常强大的股票信息抓取工具)
* TA-Lib
* 如果要安装tushare必须先安装`lxml`库, `pip install lxml --upgrade`.
如果出现pypi源超时情况,可以通过命令方式进行安装依赖库:
pip2 -r requirements/requirements.txt --upgrade -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
策略组合DEMO
-----------
源码
~~~~
.. code:: py
#from quantdigger.engine.series import NumberSeries
#from quantdigger.indicators.common import MA
#from quantdigger.util import pcontract
from quantdigger import *
class DemoStrategy(Strategy):
""" 策略A1 """
def on_init(self, ctx):
"""初始化数据"""
ctx.ma10 = MA(ctx.close, 10, 'ma10', 'y', 2)
ctx.ma20 = MA(ctx.close, 20, 'ma20', 'b', 2)
def on_symbol(self, ctx):
""" 选股 """
return
def on_bar(self, ctx):
if ctx.curbar > 20:
if ctx.ma10[2] < ctx.ma20[2] and ctx.ma10[1] > ctx.ma20[1]:
ctx.buy(ctx.close, 1)
elif ctx.position() > 0 and ctx.ma10[2] > ctx.ma20[2] and \
ctx.ma10[1] < ctx.ma20[1]:
ctx.sell(ctx.close, ctx.position())
def on_exit(self, ctx):
return
class DemoStrategy2(Strategy):
""" 策略A2 """
def on_init(self, ctx):
"""初始化数据"""
ctx.ma5 = MA(ctx.close, 5, 'ma5', 'y', 2)
ctx.ma10 = MA(ctx.close, 10, 'ma10', 'black', 2)
def on_symbol(self, ctx):
""" 选股 """
return
def on_bar(self, ctx):
if ctx.curbar > 10:
if ctx.ma5[2] < ctx.ma10[2] and ctx.ma5[1] > ctx.ma10[1]:
ctx.buy(ctx.close, 1)
elif ctx.position() > 0 and ctx.ma5[2] > ctx.ma10[2] and \
ctx.ma5[1] < ctx.ma10[1]:
ctx.sell(ctx.close, ctx.position())
def on_exit(self, ctx):
return
if __name__ == '__main__':
set_symbols(['BB.SHFE-1.Minute'], 0)
# 创建组合策略
# 初始资金5000, 两个策略的资金配比为0.2:0.8
profile = add_strategy([DemoStrategy('A1'), DemoStrategy2('A2')], { 'captial': 5000,
'ratio': [0.2, 0.8] })
run()
# 绘制k线,交易信号线
from quantdigger.digger import finance, plotting
plotting.plot_strategy(profile.data(0), profile.indicators(1), profile.deals(1))
# 绘制策略A1, 策略A2, 组合的资金曲线
curve0 = finance.create_equity_curve(profile.all_holdings(0))
curve1 = finance.create_equity_curve(profile.all_holdings(1))
curve = finance.create_equity_curve(profile.all_holdings())
plotting.plot_curves([curve0.equity, curve1.equity, curve.equity],
colors=['r', 'g', 'b'],
names=[profile.name(0), profile.name(1), 'A0'])
# 绘制净值曲线
plotting.plot_curves([curve.networth])
# 打印统计信息
print finance.summary_stats(curve, 252*4*60)
策略结果
~~~~~~~
* k线和信号线
.. image:: images/figure_signal.png
:width: 500px
* 2个策略和组合的资金曲线。
.. image:: images/figure_money.png
:width: 500px
* 组合的历史净值
.. image:: images/figure_networth.png
:width: 500px
* 统计结果
::
>>> [('Total Return', '-0.99%'), ('Sharpe Ratio', '-5.10'), ('Max Drawdown', '1.72%'), ('Drawdown Duration', '3568')]
界面控制
~~~~~~~
k线显示使用了系统自带的一个联动窗口控件,由蓝色的滑块控制显示区域,可以通过鼠标拖拽改变显示区域。
`上下方向键` 来进行缩放。
其它
~~~
**mplot_demo.py matplotlib画k线,指标线的demo。**
.. image:: images/plot.png
:width: 500px
**pyquant.py 基于pyqt, 集成了ipython和matplotlib的demo。**
.. image:: images/pyquant.png
:width: 500px
.. _TeaEra: https://github.com/TeaEra
.. _deepfish: https://github.com/deepfish
.. _wondereamer: https://github.com/wondereamer
.. _HonePhy: https://github.com/HonePhy
.. _tushare: https://github.com/waditu/tushare
.. _Jimmy: https://github.com/jimmysoa
.. _vodkabuaa: https://github.com/vodkabuaa
.. _ongbe: https://github.com/ongbe
.. _pyalgotrade: https://github.com/gbeced/pyalgotrade
.. _zipline: https://github.com/quantopian/zipline
版本
~~~
**TODO**
* 清理旧代码和数据文件
* 改善UI, 补充UI文档
**0.3.0 版本 2015-12-09**
* 重新设计回测引擎, 支持组合回测,选股
* 重构数据模块
**0.2.0 版本 2015-08-18**
* 修复股票回测的破产bug
* 修复回测权益计算bug
* 交易信号对的计算从回测代码中分离
* 把回测金融指标移到digger/finace
* 添加部分数据结构,添加部分数据结构字段
* 添加几个mongodb相关的函数
**0.15版本 2015-06-16**
* 夸品种的策略回测功能
* 简单的交互
* 指标,k线绘制
==================
QuantDigger目前是一个基于python的量化回测框架。作者最初是因为对数据处理和机器学习感兴趣而选择了这个行业,
接触了一些主流的期货交易软件,比如TB, 金字塔。他们的特点是语法比较简单,缺点是编程语言太封闭,有很多表达限制。
所以选择自己开发一个交易系统,做为交易和研究的工具,甚至尝试过商业化。最初选择c++做为实现语言,但是后面
发现开发效率太低,重要的是做为研究工具来说,其易用性和和扩展性都比不上基于python的回测框架。相比其它流行的
回测框架比如 zipline_ , pyalgotrade_ ,QuantDigger的策略语法更简单,类似MC,TB这些商业软件,但并不牺牲灵活性,保留了python这门通用语言的
所有功能。QuantDigger目前还是定位于研究工具,但是设计上还是会从实盘交易的角度考虑,将来也会接入交易接口。虽然有很多细节还有待完善,
但是核心的设计和功能已经实现了。代码也比较简单,大家有兴趣的可以自己拓展。 如果大家有什么问题和建议,欢迎加入我们的QQ交流群--334555399,或者
联系发起者(yellowblue QQ:33830957) 。 在项目的推进过程中得到很多朋友的帮助, 在这表示感谢!
除了开发人员,还要特别感谢北京的 vodkabuaa_ 和国元证券的王林峰给出的意见, ongbe_ 帮忙修复代码bug, tushare_ 库的作者 Jimmy_ 和深大的邓志浩帮忙推荐
这个库,以及所有朋友的支持。
文档
---
http://www.quantfans.com/doc/quantdigger/
安装
---
或者克隆github代码后本地安装
::
git clone https://github.com/QuantFans/quantdigger.git
python install.py (会根据情况安装pip, 及依赖包)
依赖库
-----
* matplotlib
* numpy
* logbook
* pandas
* progressbar
* python-dateutil
* pyqt (可选)
* Python (2.7.8+, **暂不支持3.x**)
* tushare_ (可选, 一个非常强大的股票信息抓取工具)
* TA-Lib
* 如果要安装tushare必须先安装`lxml`库, `pip install lxml --upgrade`.
如果出现pypi源超时情况,可以通过命令方式进行安装依赖库:
pip2 -r requirements/requirements.txt --upgrade -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
策略组合DEMO
-----------
源码
~~~~
.. code:: py
#from quantdigger.engine.series import NumberSeries
#from quantdigger.indicators.common import MA
#from quantdigger.util import pcontract
from quantdigger import *
class DemoStrategy(Strategy):
""" 策略A1 """
def on_init(self, ctx):
"""初始化数据"""
ctx.ma10 = MA(ctx.close, 10, 'ma10', 'y', 2)
ctx.ma20 = MA(ctx.close, 20, 'ma20', 'b', 2)
def on_symbol(self, ctx):
""" 选股 """
return
def on_bar(self, ctx):
if ctx.curbar > 20:
if ctx.ma10[2] < ctx.ma20[2] and ctx.ma10[1] > ctx.ma20[1]:
ctx.buy(ctx.close, 1)
elif ctx.position() > 0 and ctx.ma10[2] > ctx.ma20[2] and \
ctx.ma10[1] < ctx.ma20[1]:
ctx.sell(ctx.close, ctx.position())
def on_exit(self, ctx):
return
class DemoStrategy2(Strategy):
""" 策略A2 """
def on_init(self, ctx):
"""初始化数据"""
ctx.ma5 = MA(ctx.close, 5, 'ma5', 'y', 2)
ctx.ma10 = MA(ctx.close, 10, 'ma10', 'black', 2)
def on_symbol(self, ctx):
""" 选股 """
return
def on_bar(self, ctx):
if ctx.curbar > 10:
if ctx.ma5[2] < ctx.ma10[2] and ctx.ma5[1] > ctx.ma10[1]:
ctx.buy(ctx.close, 1)
elif ctx.position() > 0 and ctx.ma5[2] > ctx.ma10[2] and \
ctx.ma5[1] < ctx.ma10[1]:
ctx.sell(ctx.close, ctx.position())
def on_exit(self, ctx):
return
if __name__ == '__main__':
set_symbols(['BB.SHFE-1.Minute'], 0)
# 创建组合策略
# 初始资金5000, 两个策略的资金配比为0.2:0.8
profile = add_strategy([DemoStrategy('A1'), DemoStrategy2('A2')], { 'captial': 5000,
'ratio': [0.2, 0.8] })
run()
# 绘制k线,交易信号线
from quantdigger.digger import finance, plotting
plotting.plot_strategy(profile.data(0), profile.indicators(1), profile.deals(1))
# 绘制策略A1, 策略A2, 组合的资金曲线
curve0 = finance.create_equity_curve(profile.all_holdings(0))
curve1 = finance.create_equity_curve(profile.all_holdings(1))
curve = finance.create_equity_curve(profile.all_holdings())
plotting.plot_curves([curve0.equity, curve1.equity, curve.equity],
colors=['r', 'g', 'b'],
names=[profile.name(0), profile.name(1), 'A0'])
# 绘制净值曲线
plotting.plot_curves([curve.networth])
# 打印统计信息
print finance.summary_stats(curve, 252*4*60)
策略结果
~~~~~~~
* k线和信号线
.. image:: images/figure_signal.png
:width: 500px
* 2个策略和组合的资金曲线。
.. image:: images/figure_money.png
:width: 500px
* 组合的历史净值
.. image:: images/figure_networth.png
:width: 500px
* 统计结果
::
>>> [('Total Return', '-0.99%'), ('Sharpe Ratio', '-5.10'), ('Max Drawdown', '1.72%'), ('Drawdown Duration', '3568')]
界面控制
~~~~~~~
k线显示使用了系统自带的一个联动窗口控件,由蓝色的滑块控制显示区域,可以通过鼠标拖拽改变显示区域。
`上下方向键` 来进行缩放。
其它
~~~
**mplot_demo.py matplotlib画k线,指标线的demo。**
.. image:: images/plot.png
:width: 500px
**pyquant.py 基于pyqt, 集成了ipython和matplotlib的demo。**
.. image:: images/pyquant.png
:width: 500px
.. _TeaEra: https://github.com/TeaEra
.. _deepfish: https://github.com/deepfish
.. _wondereamer: https://github.com/wondereamer
.. _HonePhy: https://github.com/HonePhy
.. _tushare: https://github.com/waditu/tushare
.. _Jimmy: https://github.com/jimmysoa
.. _vodkabuaa: https://github.com/vodkabuaa
.. _ongbe: https://github.com/ongbe
.. _pyalgotrade: https://github.com/gbeced/pyalgotrade
.. _zipline: https://github.com/quantopian/zipline
版本
~~~
**TODO**
* 清理旧代码和数据文件
* 改善UI, 补充UI文档
**0.3.0 版本 2015-12-09**
* 重新设计回测引擎, 支持组合回测,选股
* 重构数据模块
**0.2.0 版本 2015-08-18**
* 修复股票回测的破产bug
* 修复回测权益计算bug
* 交易信号对的计算从回测代码中分离
* 把回测金融指标移到digger/finace
* 添加部分数据结构,添加部分数据结构字段
* 添加几个mongodb相关的函数
**0.15版本 2015-06-16**
* 夸品种的策略回测功能
* 简单的交互
* 指标,k线绘制
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
QuantDigger-0.400.tar.gz
(167.1 kB
view details)
File details
Details for the file QuantDigger-0.400.tar.gz
.
File metadata
- Download URL: QuantDigger-0.400.tar.gz
- Upload date:
- Size: 167.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2e186532f178c51e740663ca5cdf30c010158fe9e480b073fc08fb7d0cf02193 |
|
MD5 | b5bb9773eb3e0777114c19192f69c3c6 |
|
BLAKE2b-256 | 41831ab18fc565dd3c3fa1051955ac25fa0462baf7f6a2b386348caa26f64ba8 |