Administrator
2025-05-21 b77b1d2de85ccbb2de9e6e0cb173a31f76315b60
修改实时L1触发
6个文件已修改
44 ■■■■■ 已修改文件
huaxin_client/l2_data_manager.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/trade_client.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin_trade_api.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin_trade_order_processor.py 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/sell_rule_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_strategy.py 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/l2_data_manager.py
@@ -73,6 +73,7 @@
            if self.__real_time_buy1_data[code][1] == data["TradePrice"]:
                # 与买的价格一致
                self.__real_time_buy1_data[code][3] -= data["TradeVolume"]
        q: collections.deque = self.temp_transaction_queue_dict.get(code)
        q.append((data['SecurityID'], data['TradePrice'], data['TradeVolume'],
                  data['OrderTime'], data['MainSeq'], data['SubSeq'], data['BuyNo'],
huaxin_client/trade_client.py
@@ -791,7 +791,7 @@
                     "acceptTime": pOrderField.AcceptTime, "cancelTime": pOrderField.CancelTime,
                     "limitPrice": pOrderField.LimitPrice, "accountID": pOrderField.AccountID,
                     "turnover": pOrderField.Turnover, "orderRef": pOrderField.OrderRef,
                     "volume": pOrderField.VolumeTotalOriginal,
                     "volume": pOrderField.VolumeTotalOriginal, "sinfo":pOrderField.SInfo,
                     "volumeTraded": pOrderField.VolumeTraded, "orderStatus": pOrderField.OrderStatus,
                     "orderSubmitStatus": pOrderField.OrderSubmitStatus, "statusMsg": pOrderField.StatusMsg})
            else:
trade/huaxin_trade_api.py
@@ -73,7 +73,7 @@
        orderEntity = HuaxinOrderEntity(code, orderStatus, orderRef, accountID, orderSysID,
                                        insertTime=insertTime, acceptTime=acceptTime,
                                        insertDate=insertDate, direction=direction)
                                        insertDate=insertDate, direction=direction, sinfo=sinfo)
        try:
            if str(orderEntity.direction) == str(huaxin_util.TORA_TSTP_D_Sell):
                try:
@@ -114,7 +114,7 @@
                # 买入需要刷新持仓列表
                huaxin_trade_data_update.add_position_list()
            # TradeResultProcessor.process_buy_order(order)
            need_watch_cancel = TradeResultProcessor.process_sell_order(orderEntity)
            need_watch_cancel = TradeResultProcessor.is_need_watch_cancel(orderEntity)
            if need_watch_cancel:
                threading.Thread(target=lambda: __cancel_order(orderEntity.code, orderEntity.orderRef),
                                 daemon=True).start()
trade/huaxin_trade_order_processor.py
@@ -17,7 +17,7 @@
class HuaxinOrderEntity:
    def __init__(self, code, orderStatus, orderRef, accountID, orderSysID, direction=None, insertDate=None,
                 insertTime=None,
                 acceptTime=None, is_shadow_order=False):
                 acceptTime=None, is_shadow_order=False, sinfo=None):
        self.code = code
        self.orderStatus = orderStatus
        self.orderRef = orderRef
@@ -28,6 +28,7 @@
        self.acceptTime = acceptTime
        self.direction = direction
        self.is_shadow_order = is_shadow_order
        self.sinfo = sinfo
class CancelOrderManager:
@@ -114,18 +115,24 @@
    # 返回是否要监控撤单
    @classmethod
    def process_sell_order(cls, order: HuaxinOrderEntity):
        # 处理卖单
        if order.direction != str(huaxin_util.TORA_TSTP_D_Sell):
    def is_need_watch_cancel(cls, order: HuaxinOrderEntity):
        # 机器买入的不能撤单
        if order.sinfo.find("ba_") == 0:
            return False
        # if order.direction != str(huaxin_util.TORA_TSTP_D_Sell):
        #     return False
        cls.order_ref_dict[order.orderRef] = order
        # 下单时间在9:30以后的如果2s没成交就撤单
        if tool.trade_time_sub(order.insertTime, "09:30:00") >= 0 and str(
                order.orderStatus) == huaxin_util.TORA_TSTP_OST_Accepted:
            sell_mode = AutoCancelSellModeManager().get_mode_cache(order.code)
            if sell_mode == AutoCancelSellModeManager.MODE_CANCEL_MECHINE and order.orderRef < 90000:
                # 只撤机器的单
            if sell_mode == AutoCancelSellModeManager.MODE_CANCEL_MECHINE:
                # 不撤手动买入/卖出的单
                if order.orderRef < 90000:
                    # 非系统单
                    return False
                return False
            return True
        return False
trade/sell_rule_manager.py
@@ -14,9 +14,9 @@
# 自动撤卖模式管理
class AutoCancelSellModeManager:
    # 撤所有
    # 撤所有,包括撤手动下的单
    MODE_CANCEL_ALL = 0
    # 撤机器下单
    # 撤机器下单,不撤手动下的单
    MODE_CANCEL_MECHINE = 1
    __instance = None
trade/trade_strategy.py
@@ -466,7 +466,15 @@
        cls.process_for_sell(datas)
    @classmethod
    def excute_sell_rule(cls, code, buy1_volume, buy1_price, source="l1"):
    def excute_sell_rule(cls, code, buy1_volume, buy1_price, source="L1"):
        """
        执行卖出规则
        :param code:
        :param buy1_volume:
        :param buy1_price:
        :param source:
        :return:
        """
        rules = TradeRuleManager().list_can_excut_rules_cache(types=[TradeRuleManager.TYPE_SELL])
        if not rules:
            return
@@ -614,7 +622,7 @@
        for d in datas:
            code = d["securityID"]
            buy1 = d["buy"][0]
            L1DataProcessor.excute_sell_rule(code, buy1[1], buy1[0], "l2")
            L1DataProcessor.excute_sell_rule(code, buy1[1], buy1[0], "L2")
    def OnRealTimeBuy1Info(self, code, buy1_info):
        # buy1_info: [买1时间,买1价格, 原始买1量, 实时买1量]
@@ -624,7 +632,7 @@
        codes = [rule.code for rule in rules]
        if code in codes:
            async_log_util.info(logger_debug, f"OnRealTimeBuy1Info:{code}-{buy1_info}")
            # L1DataProcessor.excute_sell_rule(code, buy1_info[3], buy1_info[1], "l2-real")
            L1DataProcessor.excute_sell_rule(code, buy1_info[3], buy1_info[1], "L2-real")
def __sell_for_last_day_break_limit_up():