| | |
| | | insertDate=insertDate, direction=direction, |
| | | is_shadow_order=is_shadow_order) |
| | | try: |
| | | TradeResultProcessor.process_order(order) |
| | | TradeResultProcessor.process_buy_order(order) |
| | | TradeResultProcessor.process_sell_order(order) |
| | | finally: |
| | | try: |
| | | # 加入2次,增大加入成功率 |
| | |
| | | insertTime=insertTime, acceptTime=acceptTime, |
| | | insertDate=insertDate, direction=direction, |
| | | is_shadow_order=is_shadow_order) |
| | | TradeResultProcessor.process_order(order) |
| | | TradeResultProcessor.process_buy_order(order) |
| | | if huaxin_util.is_can_cancel(orderStatus): |
| | | codes.append(code) |
| | | if codes: |
| | |
| | | __TradeOrderIdManager = TradeOrderIdManager() |
| | | __processed_keys = set() |
| | | __thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=50) |
| | | # 订单索引号字典 |
| | | order_ref_dict = {} |
| | | |
| | | # 处理买单 |
| | | @classmethod |
| | | def process_order(cls, order: HuaxinOrderEntity): |
| | | def process_buy_order(cls, order: HuaxinOrderEntity): |
| | | # 处理下单成功 |
| | | def process_order_success(order_: HuaxinOrderEntity, delay_s=0.0): |
| | | if delay_s > 0: |
| | |
| | | async_log_util.exception(hx_logger_trade_debug, e) |
| | | |
| | | @classmethod |
| | | def process_sell_order(cls, order: HuaxinOrderEntity): |
| | | # 处理卖单 |
| | | if order.direction != str(huaxin_util.TORA_TSTP_D_Sell): |
| | | return |
| | | cls.order_ref_dict[order.orderRef] = order |
| | | |
| | | @classmethod |
| | | def get_huaxin_order_by_order_ref(cls, order_ref) -> HuaxinOrderEntity: |
| | | return cls.order_ref_dict.get(order_ref) |
| | | |
| | | @classmethod |
| | | def order_success(cls, order: HuaxinOrderEntity): |
| | | async_log_util.info(hx_logger_trade_debug, f"处理华鑫订单下单成功:{order.code}, {order.orderRef}, {order.orderSysID}") |
| | | # 加入系统订单号 |
| | |
| | | # 4s内才会校验 |
| | | volume = total_datas[place_index]["val"]["num"] |
| | | for i in range(place_index + 1, len(total_datas)): |
| | | if total_datas[i]["val"]["num"] == volume and order.acceptTime == total_datas[i]["val"]["time"]: |
| | | if total_datas[i]["val"]["num"] == volume and order.acceptTime == total_datas[i]["val"][ |
| | | "time"]: |
| | | huaxin_delegate_postion_manager.set_place_order_position(order.code, i) |
| | | async_log_util.info(hx_logger_trade_debug, "{}校验真实下单成功,{}->{}", order.code, place_index, |
| | | i) |
| | |
| | | from trade.deal_big_money_manager import DealOrderNoManager |
| | | |
| | | from trade.huaxin import huaxin_trade_api as trade_api, huaxin_trade_api, huaxin_trade_data_update, \ |
| | | huaxin_trade_record_manager |
| | | huaxin_trade_record_manager, huaxin_trade_order_processor |
| | | from trade.huaxin.huaxin_trade_record_manager import PositionManager |
| | | from trade.l2_trade_factor import L2PlaceOrderParamsManager |
| | | from trade.sell_rule_manager import SellRuleManager, SellRule |
| | |
| | | |
| | | |
| | | class OutsideApiCommandCallback(outside_api_command_manager.ActionCallback): |
| | | __cancel_sell_thread_pool = concurrent.futures.ThreadPoolExecutor(max_workers=8) |
| | | |
| | | @classmethod |
| | | def __send_response(cls, data_bytes): |
| | | sk = SendResponseSkManager.create_send_response_sk(addr=huaxin_client.constant.SERVER_IP, |
| | |
| | | except Exception as e1: |
| | | logging.exception(e1) |
| | | |
| | | # 撤卖单 |
| | | def __cancel_sell_order(self, code, order_ref): |
| | | for i in range(0,10): |
| | | time.sleep(0.2) |
| | | order_entity = huaxin_trade_order_processor.TradeResultProcessor.get_huaxin_order_by_order_ref(order_ref) |
| | | if order_entity: |
| | | if order_entity.orderStatus == huaxin_util.TORA_TSTP_OST_AllTraded: |
| | | # 成交的就不需要撤单了 |
| | | return |
| | | try: |
| | | result = huaxin_trade_api.cancel_order(2, code, None, orderRef=order_ref) |
| | | except Exception as e: |
| | | logger_trade.exception(e) |
| | | |
| | | # 交易 |
| | | def OnTrade(self, client_id, request_id, data): |
| | | try: |
| | |
| | | price_type = data["price_type"] |
| | | price = data["price"] |
| | | sinfo = data["sinfo"] |
| | | if direction == huaxin_util.TORA_TSTP_D_Sell: |
| | | pass |
| | | if direction == 2: |
| | | # price_type: 0-价格笼子 1-跌停价 2-涨停价 3-现价 |
| | | async_log_util.info(logger_trade, f"API卖: 接收数据-{data}") |
| | | # 获取现价 |
| | | if price_type == 0: |
| | | current_price = TradeServerProcessor.get_l1_current_price(code) |
| | |
| | | if not current_price: |
| | | raise Exception("没有获取到L1现价") |
| | | price = current_price |
| | | async_log_util.info(logger_trade, f"API卖: 单价-{price}") |
| | | result = huaxin_trade_api.order(direction, code, volume, price, sinfo=sinfo, |
| | | blocking=True, request_id=request_id) |
| | | blocking=False, request_id=request_id) |
| | | order_ref = result["order_ref"] |
| | | # 如果是在正常交易时间提交的2s之内还未成交的需要撤单 |
| | | if int("092958") <= int(tool.get_now_time_str().replace(":", "")) <= int("150000"): |
| | | self.__cancel_sell_thread_pool.submit(lambda: self.__cancel_sell_order(code, order_ref)) |
| | | |
| | | self.send_response({"code": 0, "data": result}, client_id, request_id) |
| | | else: |
| | | result = huaxin_trade_api.order(direction, code, volume, price, price_type=price_type, sinfo=sinfo, |