vn.py官网
Veighna量化社区 | 你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 18
声望: 0
    cross_over = self.fast_ma0 > self.slow_ma0 and self.fast_ma1 < self.slow_ma1
    cross_below = self.fast_ma0 < self.slow_ma0 and self.fast_ma1 > self.slow_ma1

在一次交易中,策略在运行时会出现多次cross_over的发生,回测时只会在第一次发生时才会入场,并且由pos控制其后不再入场,
而实盘时由于换合约,可能会在第二次发生时或者之后的几次中任意一次发生时入场,这个是和回测有出入的,取决于策略针对合约是何时开始运行的

那么第一个问题是想知道pos这个变量是在什么地方更新的
第二个问题是想引入一个变量inpos来指示第一次发生之后再发生时不产生入场信号,想在template里面加上这2句
self.inpos = 0
self.variables.insert(3, "inpos")
再在策略中通过控制这个变量来控制入场是否可行?
如果可行,那么在on_init中需要怎样运行策略来有加载历史数据时把这个变量置上呢?有以教我

Member
avatar
加入于:
帖子: 234
声望: 24

第一个问题,pos是在交易成交之后更新。如果是实盘的话,系统收到来在交易所的成交回报后更新pos。如果是回测的话,系统在成功撮合委托单后更新pos。并且在更新pos之后就会去调用on_trade函数,所以你可以认为收到on_trade回调之后的pos就是最新的。源码的话实盘更新在vnpy_ctastrategy中engine.py的process_trade_event中,回测在vnpy_ctastrategy中backtesting.py的cross_limit_order或cross_stop_order中。

第二个问题,可以直接在on_init里加入self.inpos=True,在on_trade回调之后修改为self.inpos=False,在入场时查看一下self.inpos的值即可。

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

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】