vn.py量化社区
By Traders, For Traders.
Member
avatar
加入于:
帖子: 25
声望: 1

在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')

Member
avatar
加入于:
帖子: 25
声望: 1

主要的输出结果:

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

Member
avatar
加入于:
帖子: 25
声望: 1

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')的内容?

搞了一个晚上,盼指点迷津~

Administrator
avatar
加入于:
帖子: 4191
声望: 236
  1. load_bar就是加载数据后推送给策略的on_bar函数,来实现状态初始化,此时trading状态为False,因此无法真实交易
  2. 因为前面的数据用来给策略初始化了
  3. 回测中的write_log输出的日志信息,都会缓存到回测引擎的engine.logs列表中,并不会直接打印(否则内容太多了)
Member
avatar
加入于:
帖子: 25
声望: 1

终于明白了,谢谢,看到全实战课程14、15课,也讲到了相关内容

© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3