VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 57
声望: 1

由于调试过程中多次重启软件、重新启动策略,发现会多次开仓
觉得应该是由于pos值不对造成的,但具体是怎么回事呢?
另外就是怎样解决呢?难道要新增一个变量自己控制吗?

Member
avatar
加入于:
帖子: 716
声望: 55

应该是你策略里开仓逻辑的关系,可以自行打印一下开仓判断条件是否符合预期

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

看不出来有什么问题啊,对于开仓平仓仓位的逻辑,差不多都是这种写法吧,
在前后几个bar上可能都满足开仓条件,但是应由pos控制不会出现多次开仓才对啊
def on_bar(self, bar: BarData):
if self.pos == 0:
if condition1:
self.buy(bar.close_price, self.lots)
elif condition2:
self.short(bar.close_price, self.lots)
elif self.pos > 0:
if condition3:
self.sell(bar.close_price, abs(self.pos), stop=True)
elif self.pos < 0:
if condition4:
self.cover(bar.close_price, abs(self.pos), stop=True)
self.put_event()

Member
avatar
加入于:
帖子: 716
声望: 55

可以在on_bar里打印一下self.pos在启动和关闭策略的时候看一下self.pos是否正确。

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

打印了,看起来是对的,
在策略初始化的时候pos一直都是0,
新来一个BAR后,pos就变成1了,这个逻辑上也没问题。

上次在另一个贴子中问过pos在哪里更新的,得到的答案是在vnpy_ctastrategy中engine.py的process_trade_event中
on_trade的更新我理解是发生了交易才会更新,而实际上,加载策略后还没有发生交易,只是过去发生了交易,
策略初始化后应该就更新这个值或者查询账户后就更新这个值,这个是在哪里实现的呢?

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

还有一个问题顺便请教:在非交易时间没有交易所数据推送的时候有什么方法或环境可以仿真数据推送时候的调试呢?

Member
avatar
加入于:
帖子: 716
声望: 55

策略在成交和停止时会将当前策略的状态存进用户名目录下.vntrader下的cta_strategy_setting.json,在启动的时候会读取策略停止时的状态。

非交易时段可以使用simnow的7*24小时环境进行调试。

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

谢谢指教,看到了load_strategy_data和sync_strategy_data,但是strategy_data中pos是怎么传给策略中的pos的呢?
策略在成交和停止时会将当前策略的状态存入,那么直接关闭APP是不合理的?需要先停止策略再关闭vnstation吗?
我看它是在发生交易时也会存入,其实应该没问题的,对吧?

Member
avatar
加入于:
帖子: 3469
声望: 228

是需要停止策略以后再关闭系统的

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

沪公网安备 31011502017034号

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