{ "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('20100101') # 设置回测用的数据起始日期" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "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": 8, "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": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2017-12-15 23:01:54.728000\t开始载入数据\n", "2017-12-15 23:01:54.765000\t载入完成,数据量:0\n", "2017-12-15 23:01:54.765000\t开始回测\n", "2017-12-15 23:01:54.765000\t策略初始化完成\n", "2017-12-15 23:01:54.765000\t策略启动完成\n", "2017-12-15 23:01:54.765000\t开始回放数据\n", "2017-12-15 23:01:54.766000\t数据回放结束\n" ] } ], "source": [ "# 运行回测\n", "engine.runBacktesting() # 运行回测" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": 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": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# 优化配置\n", "setting = OptimizationSetting() # 新建一个优化任务设置对象\n", "setting.setOptimizeTarget('capital') # 设置优化排序的目标是策略净盈利\n", "setting.addParameter('atrLength', 12, 20, 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", "engine.runParallelOptimization(AtrRsiStrategy, setting)\n", "print u'耗时:%s' %(time.time()-start)" ] }, { "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 }