已解决3.59K 浏览
1

向前辈请教:策略的调仓函数在模拟盘中运行错误,使用的是调仓助手

target_pos.set_target_volume(),策略运行了调仓函数但是模拟盘却没有生产相应的仓位,这个问题会在实盘中出现吗?我是不是可以认为set_target_volume函数没有问题,是模拟盘对这个函数支持不太好。

cjqshwb 选择最佳答案 2020年7月29日
1

建议先考虑一下是不是自己用的有问题,无论是target_pos_target有代码问题还是模拟盘有问题,最好要找出原因,不然上了实盘你也悬着颗心不知道啥时候就崩了……

所以有啥错误可以贴出来看看,我这边无论回测还是模拟盘暂时都没遇到问题

levia 发表新评论 2022年10月17日

if(判断条件):
target_pos.set_target_volume(-2)
print(“1手边两手”)
代码逻辑很简单,判断条件成立,就1手仓位变成两手。但是价格条件成立的条件下,set_target_volume函数没有让模拟盘仓位出现调整,我还以为没有执行进这个if条件专门添加了这个print语句,看到了print语句输出结果却没有调仓。代码逻辑很简单清晰,就是不知道set_target_volume函数或者模拟盘有没有问题

那后来有没有再调用 wait_update 呢?因为是异步的所以打印出来并不代表发送了请求,需要wait_update才会真正发送下单请求

肯定调用了update,我是按照官方给出的模板写的策略
while True:
api.wait_update()
开仓
平仓
现在问题是,if开仓条件满足也进入if对应的语句了,都打印出了print(“调用set_target_volume两手变三手”),print打印语句和set_target_volume都在这个if之下,然后调用了 api.wait_update(),模拟盘仓位就是不调仓。这个模拟盘仓位问题一会儿有一会儿又没有,昨晚可以白天又不行了。

我把策略暂停,重启策略,模拟盘又自己把仓位调整过来了,就是在策略连续运行过程中,条件都满足了,调用set_target_volume就是不调仓,你重启之后它又调整对了。

你这样描述我差不多明白了,因为之前我也遇到了相同问题,最后通过打印日志看到是如果策略长时间跑(连续几天)的话,position可能会无法更新。我估计是长连接断掉之后可能无法恢复本地状态。所以后来我是按照官方建议定时重启:https://doc.shinnytech.com/tqsdk/latest/advanced/unanttended.html
我设定的是每天早晚8点50都会重启一次……然后就没问题了