Esempio n. 1
0
 def _generate_order_data_from_req(self, req: OrderRequest):
     """ 将发单请求转换为发单数据 """
     self.order_ref += 1
     order_id = f"{self.frontid}-{self.sessionid}-{self.order_ref}"
     return req._create_order_data(gateway_name="looper",
                                   order_id=order_id,
                                   time=self.datetime)
Esempio n. 2
0
    def send_server_order(self, contract: ContractData, direction: Direction,
                          offset: Offset, price: float, volume: float,
                          type: OrderType, lock: bool):
        """
        发送新的单子给服务器
        """
        # 创建新的order_req.
        original_req = OrderRequest(
            symbol=contract.symbol,
            exchange=contract.exchange,
            direction=direction,
            offset=offset,
            type=type,
            price=price,
            volume=volume,
        )

        # 通过本地持仓携带的转换请求功能 --> 详情见ctpbee下面的data_handle/local_position.py
        req_list = self.cta.app.recorder.position_manager.get(
            contract.local_symbol).convert_order_request(original_req, lock)
        # 发单
        local_orderids = []
        for req in req_list:
            local_orderid = self.cta.app.send_order(req, contract.gateway_name)
            local_orderids.append(local_orderid)
            self.cta.app.recorder.position_manager.get(
                contract.local_symbol).update_order_request(
                    req, local_orderid)

            # Save relationship between orderid and strategy.
            self.orderid_strategy_map[local_orderid] = self.cta
            self.strategy_orderid_map[self.cta.cta_name].add(local_orderid)
        return local_orderids
Esempio n. 3
0
 def short(self, price, volume, origin, **kwargs):
     req = OrderRequest(price=price,
                        volume=volume,
                        exchange=origin.exchange,
                        offset=Offset.OPEN,
                        direction=Direction.SHORT,
                        type=OrderType.LIMIT)
     return self.looper.send_order(req)
Esempio n. 4
0
    def generate_order_req_by_str(cls, symbol: str, exchange: str, direction: str, offset: str, type: str, volume,
                                  price):
        """ 手动构造发单请求"""
        if "." in symbol:
            symbol = symbol.split(".")[1]

        return OrderRequest(exchange=cls.exchange_map.get(exchange.upper()), symbol=symbol,
                            direction=cls.direction_map.get(direction.upper()),
                            offset=cls.offset_map.get(offset.upper()), type=cls.price_type_map.get(type.upper()),
                            volume=volume, price=price)
Esempio n. 5
0
    def _convert_req_to_data(self, order: OrderRequest):
        # 随机生成一个order_ref
        while True:
            ref = random.randint(1, 100000)
            if ref not in self.order_ref_set:
                self.order_ref_set.add(ref)
                break
        order_id = f"{self.frontid}_{self.sessionid}_{ref}"

        return order._create_order_data(order_id=order_id, gateway_name="looper")
Esempio n. 6
0
 def generate_order_req_by_var(cls, symbol: str, exchange: Exchange,
                               direction: Direction, offset: Offset,
                               type: OrderType, volume, price: float):
     if "." in symbol:
         symbol = symbol.split(".")[0]
     return OrderRequest(symbol=symbol,
                         exchange=exchange,
                         direction=direction,
                         offset=offset,
                         type=type,
                         volume=volume,
                         price=price)
Esempio n. 7
0
 def buy(self,
         price,
         volume,
         origin,
         price_type: OrderType = OrderType.LIMIT,
         **kwargs):
     req = OrderRequest(price=price,
                        volume=volume,
                        exchange=origin.exchange,
                        offset=Offset.OPEN,
                        direction=Direction.LONG,
                        type=price_type)
     return self.looper.send_order(req)
Esempio n. 8
0
 def short(self,
           price,
           volume,
           origin,
           price_type: OrderType = OrderType.LIMIT,
           **kwargs):
     if not isinstance(self.looper.params['slippage_short'],
                       float) and not isinstance(
                           self.looper.params['slippage_short'], int):
         raise ConfigError(message="滑点配置应为浮点小数")
     req = OrderRequest(price=price,
                        volume=volume,
                        exchange=origin.exchange,
                        offset=Offset.OPEN,
                        direction=Direction.SHORT,
                        type=price_type,
                        symbol=origin.symbol)
     return self.looper.send_order(req)
Esempio n. 9
0
    def send_order(self, req: OrderRequest):
        """
        Send new order.
        """
        self.order_ref += 1

        ctp_req = {
            "InstrumentID": req.symbol,
            "LimitPrice": req.price,
            "VolumeTotalOriginal": int(req.volume),
            "OrderPriceType": ORDERTYPE_VT2CTP.get(req.type, ""),
            "Direction": DIRECTION_VT2CTP.get(req.direction, ""),
            "CombOffsetFlag": OFFSET_VT2CTP.get(req.offset, ""),
            "OrderRef": str(self.order_ref),
            "InvestorID": self.userid,
            "UserID": self.userid,
            "BrokerID": self.brokerid,
            "CombHedgeFlag": THOST_FTDC_HF_Speculation,
            "ContingentCondition": THOST_FTDC_CC_Immediately,
            "ForceCloseReason": THOST_FTDC_FCC_NotForceClose,
            "IsAutoSuspend": 0,
            "TimeCondition": THOST_FTDC_TC_GFD,
            "VolumeCondition": THOST_FTDC_VC_AV,
            "MinVolume": 1,
            "ExchangeID": req.exchange.value
        }

        if req.type == OrderType.FAK:
            ctp_req["OrderPriceType"] = THOST_FTDC_OPT_LimitPrice
            ctp_req["TimeCondition"] = THOST_FTDC_TC_IOC
            ctp_req["VolumeCondition"] = THOST_FTDC_VC_AV
        elif req.type == OrderType.FOK:
            ctp_req["OrderPriceType"] = THOST_FTDC_OPT_LimitPrice
            ctp_req["TimeCondition"] = THOST_FTDC_TC_IOC
            ctp_req["VolumeCondition"] = THOST_FTDC_VC_CV

        self.reqid += 1
        self.reqOrderInsert(ctp_req, self.reqid)
        order_id = f"{self.frontid}_{self.sessionid}_{self.order_ref}"
        order = req._create_order_data(order_id, self.gateway_name)
        self.on_event(type=EVENT_ORDER, data=order)

        return order.local_order_id
Esempio n. 10
0
    def update_order_request(self, req: OrderRequest, local_order_id: str):
        """"""
        gateway_name, orderid = local_order_id.split(".")

        order = req.create_order_data(orderid, gateway_name)
        self.update_order(order)