本地单委托怎么撤销?cancel_all有用?我怎么感觉没有用
本地单委托怎么撤销?cancel_all有用?我怎么感觉没有用
您好!关于您提到的 cancel_all
方法无效的问题,我们可以通过以下步骤进行排查和解决。请您按照以下方法逐步检查,并提供相关信息以便我们更好地协助您。
为了更好地定位问题,请您提供以下信息:
cancel_all
方法的调用部分。cancel_all
的(例如,通过按钮、策略逻辑等)。cancel_all
调用请确保 cancel_all
方法被正确调用。例如:
def on_tick(self, tick):
"""Tick 更新回调"""
if self.should_cancel_all: # 某个条件触发
self.cancel_all()
在 cancel_all
方法中添加打印语句,确认方法是否被调用:
def cancel_all(self):
"""撤销所有未成交委托"""
print("调用 cancel_all 方法")
self.cancel_all()
在 cancel_all
方法中,打印当前活动委托,确认是否有未成交的委托:
def cancel_all(self):
"""撤销所有未成交委托"""
active_orders = self.cta_engine.main_engine.get_all_active_orders()
print(f"当前活动委托: {active_orders}")
for order in active_orders:
if order.status == Status.SUBMITTING or order.status == Status.NOTTRADED:
self.cancel_order(order.vt_orderid)
print(f"撤销委托: {order.vt_orderid}")
确保委托状态为 SUBMITTING
或 NOTTRADED
,只有这些状态的委托才能被撤销。
cancel_all
未被调用cancel_all
在正确的位置被调用。cancel_all
中打印活动委托,确认是否有未成交的委托。SUBMITTING
或 NOTTRADED
。以下是一个完整的策略示例,包含 cancel_all
方法的调试信息:
from vnpy.trader.constant import Status
from vnpy.trader.object import OrderData
from vnpy_ctastrategy import CtaTemplate
class MyStrategy(CtaTemplate):
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
self.should_cancel_all = False
def on_tick(self, tick):
"""Tick 更新回调"""
if self.should_cancel_all: # 某个条件触发
self.cancel_all()
def cancel_all(self):
"""撤销所有未成交委托"""
print("调用 cancel_all 方法")
active_orders = self.cta_engine.main_engine.get_all_active_orders()
print(f"当前活动委托: {active_orders}")
for order in active_orders:
if order.status == Status.SUBMITTING or order.status == Status.NOTTRADED:
self.cancel_order(order.vt_orderid)
print(f"撤销委托: {order.vt_orderid}")
cancel_all
方法是否被调用。通过以上方法,可以有效地排查和解决 cancel_all
无效的问题。如果有其他问题,欢迎继续讨论!