vnpy/examples/CtaBacktesting/backtesting_IF.ipynb
2018-02-16 22:17:58 +08:00

242 lines
7.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"from vnpy.trader.app.ctaStrategy.ctaBacktesting import BacktestingEngine, OptimizationSetting, MINUTE_DB_NAME\n",
"from vnpy.trader.app.ctaStrategy.strategy.strategyAtrRsi import AtrRsiStrategy\n",
"#from vnpy.trader.app.ctaStrategy.strategy.strategyMultiTimeframe import MultiTimeframeStrategy\n",
"from vnpy.trader.app.ctaStrategy.strategy.strategyMultiSignal import MultiSignalStrategy"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# 创建回测引擎对象\n",
"engine = BacktestingEngine()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 设置回测使用的数据\n",
"engine.setBacktestingMode(engine.BAR_MODE) # 设置引擎的回测模式为K线\n",
"engine.setDatabase(MINUTE_DB_NAME, 'IF0000') # 设置使用的历史数据库\n",
"engine.setStartDate('20130101') # 设置回测用的数据起始日期"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 配置回测引擎参数\n",
"engine.setSlippage(0.2) # 设置滑点为股指1跳\n",
"engine.setRate(0.3/10000) # 设置手续费万0.3\n",
"engine.setSize(300) # 设置股指合约大小 \n",
"engine.setPriceTick(0.2) # 设置股指最小价格变动 \n",
"engine.setCapital(1000000) # 设置回测本金"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 在引擎中创建策略对象\n",
"d = {'atrLength': 11} # 策略参数配置\n",
"engine.initStrategy(AtrRsiStrategy, d) # 创建策略对象\n",
"#ngine.initStrategy(MultiTimeframeStrategy, d) \n",
"#engine.initStrategy(MultiSignalStrategy, {}) "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 运行回测\n",
"engine.runBacktesting() # 运行回测"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [],
"source": [
"# 显示逐日回测结果\n",
"engine.showDailyResult()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 显示逐笔回测结果\n",
"engine.showBacktestingResult()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 显示前10条成交记录\n",
"for i in range(10):\n",
" d = engine.tradeDict[str(i+1)].__dict__\n",
" print 'TradeID: %s, Time: %s, Direction: %s, Price: %s, Volume: %s' %(d['tradeID'], d['dt'], d['direction'], d['price'], d['volume'])"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"2018-02-16 22:15:18.251000\t------------------------------\n",
"2018-02-16 22:15:18.251000\tsetting: {'atrLength': 12}\n",
"2018-02-16 22:15:18.256000\t开始载入数据\n",
"2018-02-16 22:15:18.319000\t载入完成数据量91381\n",
"2018-02-16 22:15:18.319000\t开始回测\n",
"2018-02-16 22:15:18.361000\t策略初始化完成\n",
"2018-02-16 22:15:18.361000\t策略启动完成\n",
"2018-02-16 22:15:18.361000\t开始回放数据\n",
"2018-02-16 22:15:25.992000\t数据回放结束\n",
"2018-02-16 22:15:25.992000\t计算按日统计结果\n",
"2018-02-16 22:15:26.085000\t------------------------------\n",
"2018-02-16 22:15:26.085000\tsetting: {'atrLength': 14}\n",
"2018-02-16 22:15:26.087000\t开始载入数据\n",
"2018-02-16 22:15:26.142000\t载入完成数据量91381\n",
"2018-02-16 22:15:26.142000\t开始回测\n",
"2018-02-16 22:15:26.183000\t策略初始化完成\n",
"2018-02-16 22:15:26.183000\t策略启动完成\n",
"2018-02-16 22:15:26.183000\t开始回放数据\n",
"2018-02-16 22:15:34.799000\t数据回放结束\n",
"2018-02-16 22:15:34.799000\t计算按日统计结果\n",
"2018-02-16 22:15:34.881000\t------------------------------\n",
"2018-02-16 22:15:34.881000\tsetting: {'atrLength': 16}\n",
"2018-02-16 22:15:34.883000\t开始载入数据\n",
"2018-02-16 22:15:34.935000\t载入完成数据量91381\n",
"2018-02-16 22:15:34.935000\t开始回测\n",
"2018-02-16 22:15:34.981000\t策略初始化完成\n",
"2018-02-16 22:15:34.981000\t策略启动完成\n",
"2018-02-16 22:15:34.981000\t开始回放数据\n",
"2018-02-16 22:15:43.120000\t数据回放结束\n",
"2018-02-16 22:15:43.120000\t计算按日统计结果\n",
"2018-02-16 22:15:43.151000\t------------------------------\n",
"2018-02-16 22:15:43.151000\t优化结果\n",
"2018-02-16 22:15:43.151000\t参数[\"{'atrLength': 16}\"]目标819765.66\n",
"2018-02-16 22:15:43.151000\t参数[\"{'atrLength': 14}\"]目标534310.005\n",
"2018-02-16 22:15:43.151000\t参数[\"{'atrLength': 12}\"]目标278612.3988\n",
"耗时24.9000000954\n"
]
}
],
"source": [
"# 优化配置\n",
"setting = OptimizationSetting() # 新建一个优化任务设置对象\n",
"setting.setOptimizeTarget('totalNetPnl') # 设置优化排序的目标是策略净盈利\n",
"setting.addParameter('atrLength', 12, 16, 2) # 增加第一个优化参数atrLength起始12结束20步进2\n",
"#setting.addParameter('atrMa', 20, 30, 5) # 增加第二个优化参数atrMa起始20结束30步进5\n",
"#setting.addParameter('rsiLength', 5) # 增加一个固定数值的参数\n",
"\n",
"# 执行多进程优化\n",
"import time\n",
"start = time.time()\n",
"#resultList = engine.runParallelOptimization(AtrRsiStrategy, setting)\n",
"resultList = engine.runOptimization(AtrRsiStrategy, setting)\n",
"print u'耗时:%s' %(time.time()-start)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 显示优化的所有统计数据\n",
"for result in resultList:\n",
" print '-' * 30\n",
" print u'参数:%s目标%s' %(result[0], result[1])\n",
" print u'统计数据:'\n",
" for k, v in result[2].items():\n",
" print u'%s%s' %(k, v)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 0
}