Beispiel #1
0
 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()
Beispiel #3
0
 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)
Beispiel #4
0
    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))
Beispiel #5
0
    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()
Beispiel #6
0
    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)
Beispiel #7
0
    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)
Beispiel #8
0
    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()
Beispiel #9
0
    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)
Beispiel #11
0
    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)
Beispiel #12
0
    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()
Beispiel #13
0
    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()
Beispiel #14
0
    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)
Beispiel #15
0
    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()
Beispiel #16
0
    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()
Beispiel #17
0
    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)
Beispiel #18
0
    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))
Beispiel #19
0
    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()
Beispiel #20
0
 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
Beispiel #22
0
    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}")