情况是这样的,我进行股指交易,由于账户上资金是有限的,常年满仓操作,所以要开新仓,只有等平仓资金回流后,再开新仓位。
目前我在策略的self.on_bar()里面进行了微调,先检查平仓指令,再检查开仓指令(并且在开仓指令前面加入了time.sleep(0.3))。开仓前的代码如下。平仓指令在on_bar内一样也会触发self.write_log(),以便我检查这两单的下单时间。
time.sleep(0.3)
self.buy(vt_symbol, price, volume)
self.write_log("对{}进行加仓,加仓数量为:{},加仓下单价格为:{}".format(vt_symbol, pos_diff, price))
为了验证的我猜想,我又在self.send_order()函数下面,多写了一个self.write_log()
def send_order(
self,
vt_symbol: str,
direction: Direction,
offset: Offset,
price: float,
volume: float,
lock: bool = False,
net: bool = False,
) -> List[str]:
if self.trading:
self.write_log("下单参数vt_symbol:{},direction:{},offset:{},price:{},volume:{},lock:{},net:{}".
format(vt_symbol, direction, offset, price, volume, lock, net))
vt_orderids = self.strategy_engine.send_order(
self, vt_symbol, direction, offset, price, volume, lock, net
)
for vt_orderid in vt_orderids:
self.active_orderids.add(vt_orderid)
return vt_orderids
else:
return []
但是实际写出的log如下图
3,从这里的log看出,平仓和开仓指令只差了0.004s。。。如果稍有不慎,就不一定能下单成功(因为资金没有回流,不够钱下单)
请教一下,官方有什么好处理方案吗?我着实没办法了。谢谢