def on_order(self, order: OrderData): """""" if order.vt_symbol == self.active_vt_symbol: if not order.is_active(): self.active_vt_orderid = "" elif order.vt_symbol == self.passive_vt_symbol: if not order.is_active(): self.passive_vt_orderid = "" self.put_variables_event()
def on_order(self, order: OrderData): """收到订单之后的处理""" if order.vt_symbol == self.active_vt_symbol: # 如果订单仍有效 submitting if not order.is_active(): self.active_vt_orderid = "" elif order.vt_symbol == self.passive_vt_symbol: # 如果订单仍有效 if not order.is_active(): self.passive_vt_orderid = "" self.put_variables_event()
def on_order(self, order: OrderData) -> None: """""" if not order.is_active(): if order.vt_orderid in self.long_active_orderids: self.long_active_orderids.remove(order.vt_orderid) elif order.vt_orderid in self.short_active_orderids: self.short_active_orderids.remove(order.vt_orderid)
def on_order(self, order: OrderData): """""" if order.is_active(): return for buf_orderids in [self.sell_lvt_orderids, self.cover_lvt_orderids]: if order.orderid in buf_orderids: buf_orderids.remove(order.orderid) # not ACTIVE_STATUSES = set([Status.ALLTRADED, Status.CANCELLED, Status.REJECTED]) if order.status in [Status.CANCELLED, Status.REJECTED]: if self.day_clearance: # pos = copy.deepcopy(self.pos) if not self.buy_svt_orderids and not self.short_svt_orderids\ and not self.sell_svt_orderids and not self.cover_svt_orderids\ and not self.sell_lvt_orderids and not self.cover_lvt_orderids: if self.pos > 0: self.sell_lvt_orderids = self.sell( self.liq_price - 5, abs(self.pos)) # print(f"clearance time, on_order, sell volume:{pos}, on_bar_time:{self.on_bar_time}") elif self.pos < 0: self.cover_lvt_orderids = self.cover( self.liq_price + 5, abs(self.pos))
def on_order(self, order: OrderData): """""" self.traded = order.traded self.order_status = order.status if not order.is_active(): self.stop() self.put_variables_event()
def update_order(self, order: OrderData) -> None: """ Callback of new order data update. """ self.orders[order.vt_orderid] = order if not order.is_active() and order.vt_orderid in self.active_orderids: self.active_orderids.remove(order.vt_orderid)
def update_order(self, order: OrderData): """""" if not order.is_active(): vt_orderids = self.leg_orders[order.vt_symbol] if order.vt_orderid in vt_orderids: vt_orderids.remove(order.vt_orderid) self.on_order(order)
def on_order(self, order: OrderData): """""" msg = f"委托号:{order.vt_orderid},委托状态:{order.status.value}" self.write_log(msg) if not order.is_active(): self.vt_orderid = "" self.put_variables_event()
def update_order(self, order: OrderData): """ Callback when order status is updated. """ if not order.is_active() and order.vt_orderid in self.vt_orderids: self.vt_orderids.remove(order.vt_orderid) self.on_order(order)
def on_order(self, order: OrderData): """ Callback of new order data update. """ vt_orderid = order.vt_orderid if not order.is_active() and vt_orderid in self.vt_orderids: self.vt_orderids.remove(vt_orderid)
def update_order(self, order: OrderData): """""" if order.is_active(): self.active_orders[order.vt_orderid] = order elif order.vt_orderid in self.active_orders: self.active_orders.pop(order.vt_orderid) self.on_order(order)
def update_order(self, order: OrderData): """""" if order.is_active(): self.active_orders[order.vt_orderid] = order else: if order.vt_orderid in self.active_orders: self.active_orders.pop(order.vt_orderid) self.calculate_frozen()
def on_order(self, order: OrderData): super().on_order(order) vt_orderid = order.vt_orderid if not order.is_active(): if vt_orderid in self.active_orderids: self.active_orderids.remove(vt_orderid) if vt_orderid in self.cancel_orderids: self.cancel_orderids.remove(vt_orderid)
def on_order(self, order: OrderData): """""" on_order_time = datetime.now().time() self.write_log(f"on_order, {order.orderid} {order.status} {order.offset} {order.direction}, on_order_time:{on_order_time}") # ACTIVE_STATUSES = set([Status.SUBMITTING, Status.NOTTRADED, Status.PARTTRADED]) if order.is_active(): return # not ACTIVE_STATUSES = set([Status.ALLTRADED, Status.CANCELLED, Status.REJECTED]) if order.status in [Status.CANCELLED, Status.REJECTED]: if not self.day_clearance and not self.night_clearance: if self.pos == 0: if self.ultosc > self.buy_dis: if not self.cta_engine.strategy_orderid_map[self.strategy_name]: self.buy(self.boll_up, self.trading_size, True) self.write_log(f"on_order, buy_svt:{list(self.cta_engine.strategy_orderid_map[self.strategy_name])}, volume:{self.trading_size}") elif self.ultosc < self.short_dis: if not self.cta_engine.strategy_orderid_map[self.strategy_name]: self.short(self.boll_down, self.trading_size, True) self.write_log(f"on_order, short_svt:{list(self.cta_engine.strategy_orderid_map[self.strategy_name])}, volume:{self.trading_size}") elif self.pos > 0: pos = copy.deepcopy(self.pos) if not self.cta_engine.strategy_orderid_map[self.strategy_name]: self.sell(self.long_stop, abs(self.pos), True) self.write_log(f"on_order, sell_svt:{list(self.cta_engine.strategy_orderid_map[self.strategy_name])}, volume:{pos}") else: pos = copy.deepcopy(self.pos) if not self.cta_engine.strategy_orderid_map[self.strategy_name]: self.cover(self.short_stop, abs(self.pos), True) self.write_log(f"on_order, cover_svt:{list(self.cta_engine.strategy_orderid_map[self.strategy_name])}, volume:{pos}") else: pos = copy.deepcopy(self.pos) if self.pos > 0: if not self.cta_engine.strategy_orderid_map[self.strategy_name]: self.sell(self.liq_price - 5, abs(self.pos)) self.write_log(f"clearance time, on_order, sell volume:{pos}, on_bar_time:{self.on_bar_time}") elif self.pos < 0: if not self.cta_engine.strategy_orderid_map[self.strategy_name]: self.cover(self.liq_price + 5, abs(self.pos)) self.write_log(f"clearance time, on_order, cover volume:{pos}, on_bar_time:{self.on_bar_time}") self.put_event()
def on_order(self, order: OrderData): """""" on_order_time = datetime.now().time() self.write_log( f"on_order, {order.orderid} {order.status} {order.offset} {order.direction}, on_order_time:{on_order_time}" ) if order.is_active(): return if self.day_clearance: for buf_orderids in [ self.sell_lvt_orderids, self.cover_lvt_orderids ]: if order.orderid in buf_orderids: buf_orderids.remove(order.orderid) # not ACTIVE_STATUSES = set([Status.ALLTRADED, Status.CANCELLED, Status.REJECTED]) if order.status in [Status.CANCELLED, Status.REJECTED]: if self.day_clearance: pos = copy.deepcopy(self.pos) if not self.buy_svt_orderids and not self.short_svt_orderids\ and not self.sell_svt_orderids and not self.cover_svt_orderids\ and not self.sell_lvt_orderids and not self.cover_lvt_orderids: if self.pos > 0: self.sell_lvt_orderids = self.sell( self.liq_price - 5, abs(self.pos)) self.write_log( f"clearance time, on_order, sell volume:{pos}, on_bar_time:{self.on_bar_time}" ) elif self.pos < 0: self.cover_lvt_orderids = self.cover( self.liq_price + 5, abs(self.pos)) self.write_log( f"clearance time, on_order, cover volume:{pos}, on_bar_time:{self.on_bar_time}" ) self.put_event()
def on_order(self, data: dict): """""" if data["order_type"] not in ORDERTYPE_DERIBIT2VT: self.gateway.write_log(f"收到不支持的类型委托推送{data}") return if data["label"]: local_id = data["label"] else: local_id = data["order_id"] sys_id = data["order_id"] self.local_sys_map[local_id] = sys_id self.sys_local_map[sys_id] = local_id if data["price"].isdigit(): price = float(data["price"]) else: price = 0 order = OrderData( symbol=data["instrument_name"], exchange=Exchange.DERIBIT, type=ORDERTYPE_DERIBIT2VT[data["order_type"]], orderid=local_id, direction=DIRECTION_DERIBIT2VT[data["direction"]], price=price, volume=float(data["amount"]), traded=float(data["filled_amount"]), datetime=generate_datetime(data["last_update_timestamp"]), status=STATUS_DERIBIT2VT[data["order_state"]], gateway_name=self.gateway_name, ) if data["reduce_only"]: order.offset = Offset.CLOSE self.gateway.on_order(order) # Send cancel requests if necessary if order.orderid in self.cancel_requests: req = self.cancel_requests.pop(order.orderid) if order.is_active(): self.cancel_order(req)
def on_order(self, order: OrderData): """""" # on_order_time = order.datetime.time() # print(f"\ # on_order\n\ # orderid:{order.orderid}\n\ # status:{order.status}\n\ # offset:{order.offset}\n\ # direction:{order.direction}\n\ # on_order_time:{on_order_time}\ # ") # ACTIVE_STATUSES = set([Status.SUBMITTING, Status.NOTTRADED, Status.PARTTRADED]) if order.is_active(): return for buf_orderids in [ self.sell_lvt_orderids, self.cover_lvt_orderids ]: if order.orderid in buf_orderids: buf_orderids.remove(order.orderid) # not ACTIVE_STATUSES = set([Status.ALLTRADED, Status.CANCELLED, Status.REJECTED]) if (self.clearance_time <= self.on_bar_time <= self.liq_time): if order.status in [Status.CANCELLED, Status.REJECTED]: # pos = copy.deepcopy(self.pos) if self.pos > 0: if not self.buy_svt_orderids and not self.short_svt_orderids\ and not self.sell_svt_orderids and not self.cover_svt_orderids and not self.sell_lvt_orderids: self.sell_lvt_orderids = self.sell(self.liq_price - 5, abs(self.pos)) # print(f"clearance time, on_order, sell volume:{pos}, on_bar_time:{self.on_bar_time}") elif self.pos < 0: if not self.buy_svt_orderids and not self.short_svt_orderids\ and not self.sell_svt_orderids and not self.cover_svt_orderids and not self.cover_lvt_orderids: self.cover_lvt_orderids = self.cover(self.liq_price + 5, abs(self.pos))
def on_order(self, order: OrderData): """""" # 遭遇拒单则停止策略 事前风控引擎超量,交易所拒,账户上资金不足等 if order.status == Status.REJECTED: self.stop() return # Only care active leg order update if order.vt_symbol != self.spread.active_leg.vt_symbol: return # Clear quote price record if not order.is_active(): self.active_quote_price = 0 # 下一轮 在 on_tick # Do nothing if still any existing orders if not self.check_order_finished(): return # Hedge passive legs if necessary if not self.check_hedge_finished(): self.hedge_passive_legs()
def on_order(self, order: OrderData): """""" if not order.is_active(): self.vt_orderid = "" self.order_price = 0 self.put_variables_event()
from vnpy.app.cta_strategy.base import StopOrder, StopOrderStatus # 委托订单类型 order1 = OrderData() order1.vt_orderid order1.vt_symbol order1.status order1.gateway_name order1.orderid order1.datetime order1.status = Status.ALLTRADED order1.status = Status.CANCELLED order1.status = Status.PARTTRADED order1.status = Status.REJECTED order1.status = Status.SUBMITTING order1.is_active = ACTIVE_STATUSES stop_order1 = StopOrder() stop_order1.stop_orderid stop_order1.vt_orderids stop_order1.vt_symbol stop_order1.status = StopOrderStatus.WAITING stop_order1.status = StopOrderStatus.TRIGGERED stop_order1.status = StopOrderStatus.CANCELLED trade_data1 = TradeData() trade_data1.orderid trade_data1.vt_orderid trade_data1.tradeid trade_data1.offset trade_data1.direction
def on_order(self, order: OrderData): """""" on_order_time = order.datetime.time() print(f"\ on_order\n\ orderid:{order.orderid}\n\ status:{order.status}\n\ offset:{order.offset}\n\ direction:{order.direction}\n\ on_order_time:{on_order_time}\ ") # ACTIVE_STATUSES = set([Status.SUBMITTING, Status.NOTTRADED, Status.PARTTRADED]) if order.is_active(): return for buf_orderids in [ self.sell_lvt_orderids, self.cover_lvt_orderids ]: if order.orderid in buf_orderids: buf_orderids.remove(order.orderid) # not ACTIVE_STATUSES = set([Status.ALLTRADED, Status.CANCELLED, Status.REJECTED]) if not (self.clearance_time <= self.on_bar_time <= self.liq_time): if order.status in [Status.CANCELLED, Status.REJECTED]: if self.pos == 0: if self.ultosc > self.buy_dis: if not self.buy_svt_orderids and self.short_svt_orderids: self.buy_svt_orderids = self.buy(self.boll_up, self.trading_size, True) print(f"on_order, buy_svt:{self.buy_svt_orderids}, volume:{self.trading_size}") elif self.ultosc < self.short_dis: if not self.buy_svt_orderids and self.short_svt_orderids: self.short_svt_orderids = self.short(self.boll_down, self.trading_size, True) print(f"on_order, short_svt:{self.short_svt_orderids}, volume:{self.trading_size}") elif self.pos > 0: pos = copy.deepcopy(self.pos) if not self.sell_svt_orderids: self.sell_svt_orderids = self.sell(self.long_stop, abs(self.pos), True) print(f"on_order, sell_svt:{self.sell_svt_orderids}, volume:{pos}") else: pos = copy.deepcopy(self.pos) if not self.cover_svt_orderids: self.cover_svt_orderids = self.cover(self.short_stop, abs(self.pos), True) print(f"on_order, cover_svt:{self.cover_svt_orderids}, volume:{pos}") else: if order.status in [Status.CANCELLED, Status.REJECTED]: pos = copy.deepcopy(self.pos) if self.pos > 0: if not self.buy_svt_orderids and not self.short_svt_orderids\ and not self.sell_svt_orderids and not self.cover_svt_orderids\ and not self.sell_lvt_orderids and not self.cover_lvt_orderids: self.sell_lvt_orderids = self.sell(self.liq_price - 5, abs(self.pos)) print(f"clearance time, on_order, sell volume:{pos}, on_bar_time:{self.on_bar_time}") elif self.pos < 0: if not self.buy_svt_orderids and not self.short_svt_orderids\ and not self.sell_svt_orderids and not self.cover_svt_orderids\ and not self.sell_lvt_orderids and not self.cover_lvt_orderids: self.cover_lvt_orderids = self.cover(self.liq_price + 5, abs(self.pos)) print(f"clearance time, on_order, cover volume:{pos}, on_bar_time:{self.on_bar_time}")