请教一下各位大佬
目前我有一个想法 是在on trade函数中获取对应的开仓成交价格,但现在send_order 中加入了 lock 锁仓模式,那么on trade收到的回报 用开平仓判断是否是开仓的成交价格就不准确了,请问有没有什么好的办法在 ontrade 中获取开仓成交价格?在lock下也可以区分呢?
请教一下各位大佬
目前我有一个想法 是在on trade函数中获取对应的开仓成交价格,但现在send_order 中加入了 lock 锁仓模式,那么on trade收到的回报 用开平仓判断是否是开仓的成交价格就不准确了,请问有没有什么好的办法在 ontrade 中获取开仓成交价格?在lock下也可以区分呢?
在锁仓模式下,on_trade
中通过trade.offset
判断开仓或平仓会失效,因为平仓操作会被转换为反向开仓。以下是两种简洁的方法来准确获取开仓成交价格:
on_trade
中,通过策略的持仓状态来判断是否为开仓操作。def on_trade(self, trade: TradeData) -> None:
if trade.direction == Direction.LONG: # 多头方向
if self.pos == 0: # 开仓前无持仓
self.long_entry = trade.price
print(f"多头开仓价格: {self.long_entry}")
else: # 空头方向
if self.pos == 0: # 开仓前无持仓
self.short_entry = trade.price
print(f"空头开仓价格: {self.short_entry}")
OrderData
和TradeData
关联on_order
中记录委托的开平仓信息,然后在on_trade
中通过vt_orderid
关联OrderData
和TradeData
,从而判断是否为开仓操作。示例代码:
def on_order(self, order: OrderData) -> None:
if order.offset == Offset.OPEN: # 记录开仓委托
self.open_orders[order.vt_orderid] = order
def on_trade(self, trade: TradeData) -> None:
if trade.vt_orderid in self.open_orders: # 判断是否为开仓成交
if trade.direction == Direction.LONG: # 多头开仓
self.long_entry = trade.price
print(f"多头开仓价格: {self.long_entry}")
else: # 空头开仓
self.short_entry = trade.price
print(f"空头开仓价格: {self.short_entry}")
OrderData
和TradeData
关联判断开仓操作,适用于更复杂的场景。希望这些方法能帮助你解决问题!如果还有其他疑问,欢迎继续提问。
谢谢,有一点不是很理解? on order 是收到委托回报,按理说我发到交易所的时候,我的order里面的offset不是已经修改了吗? 那我收到的order不是应该也会变化?