顶起,我刚想发个这样的帖子,合理的顺序应该是先 engine.load_data(),然后再engine.add_strategy(),否则调试策略的效率非常低。因为我是用tick来回测的,加载三年的数据要30分钟左右,根本没法玩~,虽然前期我也是只用一两个星期的时间来回测调试。
因为好多包在多个项目公用,包括个人平时积累的。各个包对3.8的支持感觉还不是特别充分,支持3.7就很好了,望采纳。
终于明白了,谢谢,看到全实战课程14、15课,也讲到了相关内容
3个疑问:
1、为什么在运行engine.load_data()时也会调用on_bar函数?
2、为什么交易是从1月16日的9.32分开始而不是在1.1开始?在哪里控制从哪一天开始交易?
3、为什么 self.write_log(f'{bar.datetime}:buy one -w')的内容没有输出,只输出了print(f'{bar.datetime}:buy one -p')的内容?
搞了一个晚上,盼指点迷津~
主要的输出结果:
2018-01-15 14:52:00:buy one -p
2018-01-15 14:53:00:buy one -p
2018-01-15 14:54:00:buy one -p
2018-01-15 14:55:00:buy one -p
2018-01-15 14:56:00:buy one -p
2018-01-15 14:57:00:buy one -p
2018-01-15 14:58:00:buy one -p
2018-01-15 14:59:00:buy one -p
2018-01-15 15:00:00:buy one -p
2019-11-28 22:59:16.162251 策略初始化完成
2019-11-28 22:59:16.162251 on_start
2019-11-28 22:59:16.162251 开始回放历史数据
2018-01-16 09:31:00:buy one -p
2019-11-28 22:59:16.170232 历史数据回放结束
2019-11-28 22:59:16.170232 开始计算逐日盯市盈亏
2019-11-28 22:59:16.172226 逐日盯市盈亏计算完成
2019-11-28 22:59:16.175217 开始计算策略统计指标
2019-11-28 22:59:16.204143 ------------------------------
2019-11-28 22:59:16.204143 首个交易日: 2018-01-16
2019-11-28 22:59:16.204143 最后交易日: 2018-01-30
在jupyter里面的回测代码如下:
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol="IF88.CFFEX",
interval="1m",
start=datetime(2018, 1, 1),
end=datetime(2018, 1, 31),
rate=3.0/10000,
slippage=0.2,
size=300,
pricetick=0.2,
capital=1_000_000,
)
engine.add_strategy(CBDemo, {})
engine.load_data()
engine.run_backtesting()
策略文件里面的on_bar函数如下:
def on_bar(self, bar: BarData):
if self.pos==0:
self.buy(bar.close_price,1)
print(f'{bar.datetime}:buy one -p')
self.write_log(f'{bar.datetime}:buy one -w')
找了两天,都没找到。
在vn trader的界面上找不到,在用户目录的.vntrader/log也找不到。
另外self.write_log("XX策略启动")算是什么级别的日志?debug?info?
望指点!
嗯嗯,看示例都是mongo,就用它了!谢谢
vnpy支持的四个数据库里,把股指期货tick数据保存在哪个数据库回测比较快些?有近4年的数据,大概7,8G这样子。谢谢了!
比如开盘前要初始化当天的一些信息,比如今天的主力合约,参数设置等,收盘后统计一下当天的交易。但回调函数里面好像没有类似 on_market_open 和on_market_close 之类的回调函数。
请大家指点一下,感谢!
感谢分享!
明白了,谢谢!
那是不是意味着只要开户的期货公司有CTP的柜台,就可以直接用vnpy连到期货公司CTP柜台进行实盘?
rt,谢谢!