Administrator
2025-03-11 7dc4ca8b88b92f51abb49fde1b2fb82a40edaa66
修改自动撤逻辑
3个文件已修改
52 ■■■■ 已修改文件
trade/huaxin_trade_order_processor.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/sell_rule_manager.py 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_strategy.py 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin_trade_order_processor.py
@@ -116,14 +116,14 @@
    @classmethod
    def process_sell_order(cls, order: HuaxinOrderEntity):
        # 处理卖单
        if order.direction != str(huaxin_util.TORA_TSTP_D_Sell):
            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()
            sell_mode = AutoCancelSellModeManager().get_mode_cache(order.code)
            if sell_mode == AutoCancelSellModeManager.MODE_CANCEL_MECHINE and order.orderRef < 90000:
                # 只撤机器的单
                return False
trade/sell_rule_manager.py
@@ -20,39 +20,22 @@
    MODE_CANCEL_MECHINE = 1
    __instance = None
    __auto_cancel_sell_mode = MODE_CANCEL_ALL
    redisManager = redis_manager.RedisManager(2)
    __code_auto_cancel_mode_dict = {}
    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance = super(AutoCancelSellModeManager, cls).__new__(cls, *args, **kwargs)
            # 初始化设置
            # 获取交易窗口的锁
            cls.__auto_cancel_sell_mode = cls.get_mode()
        return cls.__instance
    @classmethod
    def __get_redis(cls):
        return cls.redisManager.getRedis()
    def set_mode(self, mode):
    def set_mode(self, code, mode):
        if mode != self.MODE_CANCEL_ALL and mode != self.MODE_CANCEL_MECHINE:
            raise Exception("mode参数值错误")
        self.__auto_cancel_sell_mode = mode
        RedisUtils.setex(self.__get_redis(), "auto_cancel_sell_mode", tool.get_expire(), mode)
        self.__code_auto_cancel_mode_dict[code] = mode
    # 是否可以下单
    @classmethod
    def get_mode(cls):
        # 默认设置为可交易
        val = RedisUtils.get(cls.__get_redis(), "auto_cancel_sell_mode")
        if val is None:
            return cls.MODE_CANCEL_ALL
        return int(val)
    def get_mode_cache(self):
        return self.__auto_cancel_sell_mode
    def get_mode_cache(self, code):
        if code in self.__code_auto_cancel_mode_dict:
            return self.__code_auto_cancel_mode_dict[code]
        return self.MODE_CANCEL_ALL
class SellRule:
trade/trade_strategy.py
@@ -24,7 +24,7 @@
from trade import huaxin_trade_data_update, huaxin_sell_util, huaxin_trade_api
from trade.huaxin_trade_record_manager import PositionManager, DelegateSellOrderManager
from trade.l2_data_manager import L2TransactionDataManager
from trade.sell_rule_manager import TradeRuleManager, SellRule
from trade.sell_rule_manager import TradeRuleManager, SellRule, AutoCancelSellModeManager
from utils import outside_api_command_manager, middle_api_protocol, tool, huaxin_util, socket_util, cb_data_util, \
    kpl_data_manager
from utils.outside_api_command_manager import ActionCallback
@@ -428,6 +428,19 @@
            except Exception as e:
                logger_debug.exception(e)
                raise e
        elif ctype == "auto_cancel_sell_mode":
            try:
                operate = data["operate"]
                code = data.get("code")
                if operate == outside_api_command_manager.OPERRATE_SET:
                    mode = data["mode"]
                    AutoCancelSellModeManager().set_mode(code, mode)
                    self.send_response({"code": 0, "data": {"mode": mode}}, client_id, request_id)
                elif operate == outside_api_command_manager.OPERRATE_GET:
                    sell_mode = AutoCancelSellModeManager().get_mode_cache(code)
                    self.send_response({"code": 0, "data": {"mode": sell_mode}}, client_id, request_id)
            except Exception as e:
                self.send_response({"code": 1, "msg": str(e)}, client_id, request_id)
class L1DataProcessor: