在on_bar里,记录了order_id = self.buy(long_price, self.trade_amount1)
请问如何在on_trade的回调函数里,确定这个指定的order_id是否有完全成交?
在on_bar里,记录了order_id = self.buy(long_price, self.trade_amount1)
请问如何在on_trade的回调函数里,确定这个指定的order_id是否有完全成交?
on_order会收到委托回报,有status(委托状态)
如果非要在on_trade下判断,可以在on_order缓存order,在on_trade通过TradeData上的orderid去get_order查看委托状态
xiaohe wrote:
on_order会收到委托回报,有status(委托状态)
如果非要在on_trade下判断,可以在on_order缓存order,在on_trade通过TradeData上的orderid去get_order查看委托状
哦对,是on_order下判断order_id是否成交才对
请问在on_order下,要怎么写status是否完全成交?我在论坛上没有找到案例
我在on_order里这样写
if order.status == Status.ALLTRADED:
报错:
File "C:\Users\Administrator\strategies\Strategy_Short_term_delta.py", line 357, in on_order
if order.status == Status.ALLTRADED:
NameError: name 'status' is not defined
正确的写法应该是怎样?
没在策略头部加载Status类
from vnpy.trader.object import Status
跑通了,谢谢老师
请问老师怎么使用on_order来查看order.status啊,没有找到调取on_order关于这个写法的案例,谢谢老师!
在VeighNa量化交易平台中,on_order
是一个回调函数,用于处理委托订单状态更新事件。你可以通过order.status
来查看订单的当前状态。以下是一个简单的示例代码,展示如何在on_order
函数中查看订单状态:
def on_order(self, order: OrderData) -> None:
"""
委托状态更新回调函数
参数:
order (OrderData): 委托订单对象
"""
# 打印订单状态
print(f"订单状态更新: {order.status}")
# 根据订单状态执行不同的逻辑
if order.status == Status.SUBMITTING:
print("订单正在提交中...")
elif order.status == Status.NOTTRADED:
print("订单未成交")
elif order.status == Status.PARTTRADED:
print("订单部分成交")
elif order.status == Status.ALLTRADED:
print("订单全部成交")
elif order.status == Status.CANCELLED:
print("订单已撤销")
elif order.status == Status.REJECTED:
print("订单被拒绝")
order.status
:这是OrderData
对象的一个属性,用于获取订单的当前状态。Status
枚举类:Status
是一个枚举类,包含了订单的所有可能状态,如SUBMITTING
(提交中)、NOTTRADED
(未成交)、PARTTRADED
(部分成交)等。on_order
函数中根据订单状态执行不同的逻辑,例如记录日志、更新策略状态或触发其他操作。on_order
函数会在每次订单状态更新时被调用,因此你可以实时监控订单的状态变化。pass
,将具体逻辑交给回测/实盘引擎处理。希望这个示例能帮助你理解如何使用on_order
来查看订单状态!
strategytemplate里好像没有on_order,请问可以将ctatemplate的on-order复制过去直接用吗?谢谢!
在StrategyTemplate
(组合策略模板)中,确实没有on_order
回调函数,因为组合策略的回测机制与CTA策略不同。不能直接将CtaTemplate
的on_order
复制到StrategyTemplate
中使用。以下是原因和替代方案:
StrategyTemplate
没有on_order
?on_order
和on_trade
回调。get_order
和get_pos
方法查询订单和持仓状态,而不是通过回调函数。on_order
的功能?在组合策略中,可以通过以下方式实现类似on_order
的功能:
使用self.get_order(vt_orderid)
方法查询订单状态。
def on_bars(self, bars: Dict[str, BarData]) -> None:
for vt_orderid in self.active_orderids: # 遍历活动订单
order = self.get_order(vt_orderid)
if order:
print(f"订单状态: {order.status}, 数量: {order.volume}, 价格: {order.price}")
在策略逻辑中,根据订单状态变化执行相应操作。
def on_bars(self, bars: Dict[str, BarData]) -> None:
for vt_orderid in self.active_orderids:
order = self.get_order(vt_orderid)
if order and order.status == Status.ALLTRADED: # 订单全部成交
print(f"订单 {vt_orderid} 已全部成交")
elif order and order.status == Status.CANCELLED: # 订单已撤销
print(f"订单 {vt_orderid} 已撤销")
get_order
方法在实盘和回测中均可使用,但回测时无法精确模拟多合约订单的成交顺序。以下是一个完整的示例,展示如何在组合策略中替代on_order
的功能:
def on_bars(self, bars: Dict[str, BarData]) -> None:
# 查询活动订单状态
for vt_orderid in self.active_orderids:
order = self.get_order(vt_orderid)
if order:
print(f"订单 {vt_orderid} 状态: {order.status}, 数量: {order.volume}, 价格: {order.price}")
if order.status == Status.ALLTRADED: # 订单全部成交
self.handle_order_traded(order)
elif order.status == Status.CANCELLED: # 订单已撤销
self.handle_order_cancelled(order)
def handle_order_traded(self, order: OrderData) -> None:
"""处理订单全部成交"""
print(f"订单 {order.vt_orderid} 已全部成交")
def handle_order_cancelled(self, order: OrderData) -> None:
"""处理订单撤销"""
print(f"订单 {order.vt_orderid} 已撤销")
on_order
:StrategyTemplate
没有on_order
回调,因其回测机制与CTA策略不同。get_order
方法查询订单状态,并在策略逻辑中处理状态变化。通过以上方法,可以在组合策略中实现类似on_order
的功能。