Administrator
2024-03-22 0f1cc55f65930d92ef6891e0729fced4b8256e3e
L后撤成交太快撤单注释/修复板上盯BUG
8个文件已修改
55 ■■■■ 已修改文件
l2/cancel_buy_strategy.py 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/huaxin/huaxin_delegate_postion_manager.py 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_data_manager_new.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_transaction_data_processor.py 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin/huaxin_trade_server.py 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/sell/sell_rule_manager.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_huaxin.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_manager.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/cancel_buy_strategy.py
@@ -127,6 +127,8 @@
    def __need_cancel_for_up(self, code, big_sell_order_info, total_datas):
        # 查询是否是真的真实下单位置
        trade_index, is_default = TradeBuyQueue().get_traded_index(code)
        if trade_index is None:
            trade_index = 0
        real_order_index_info = self.__get_real_place_order_index_info_cache(code)
        if real_order_index_info is None or real_order_index_info[1]:
            return False, "没找到真实下单位"
l2/huaxin/huaxin_delegate_postion_manager.py
@@ -18,10 +18,10 @@
# 下单
def place_order(code, price, volume, data, order_ref, shadow_price):
def place_order(code, price, volume, exec_index, latest_data, order_ref, shadow_price):
    async_log_util.info(logger_real_place_order_position,
                        f"下单:code-{code} price-{price} shadow_price-{shadow_price} volume-{volume} exec-index-{data['index']} order_ref-{order_ref}")
    _place_order_info_dict[code] = (price, volume, data, time.time(), order_ref, shadow_price)
                        f"下单:code-{code} price-{price} shadow_price-{shadow_price} volume-{volume} exec-index-{exec_index} order_ref-{order_ref}")
    _place_order_info_dict[code] = (price, volume, latest_data, time.time(), order_ref, shadow_price, exec_index)
# 获取下单信息
@@ -231,7 +231,8 @@
                            # 已经撤单
                            need_update = True
                    if need_update:
                        async_log_util.info(logger_debug, f"下单位矫正# {code}需要更新真实下单位置: 当前真实下单位-{real_place_index} order_info-{order_info}")
                        async_log_util.info(logger_debug,
                                            f"下单位矫正# {code}需要更新真实下单位置: 当前真实下单位-{real_place_index} order_info-{order_info}")
                        # 需要更新真实下单位置
                        # 在时间内找引子单
                        shadow_order_indexes = []
l2/l2_data_manager_new.py
@@ -340,12 +340,12 @@
                                                                                   pre_real_order_index)
        if real_order_index:
            try:
                exec_data = order_info[2]
                exec_index = order_info[6]
                order_begin_pos = cls.__get_order_begin_pos(
                    code)
                async_log_util.info(logger_debug,
                                    f"下单位矫正:真实下单位-{real_order_index} 订单信息-{order_info}  下单信息-{order_begin_pos}")
                if order_begin_pos and order_begin_pos.buy_exec_index == exec_data["index"]:
                                    f"下单位矫正:真实下单位-{real_order_index} 订单信息-{order_info}  下单信息-{order_begin_pos.to_dict()}")
                if order_begin_pos and order_begin_pos.buy_exec_index == exec_index:
                    cls.set_real_place_order_index(code, real_order_index, order_begin_pos)
                    async_log_util.info(logger_real_place_order_position,
                                        f"真实下单位矫正:{code}-{real_order_index}  下单数据:{order_info}")
@@ -643,7 +643,7 @@
            try:
                l2_log.debug(code, "开始执行买入")
                trade_manager.start_buy(code, capture_timestamp, last_data,
                                        last_data_index, order_begin_pos.mode)
                                        last_data_index, order_begin_pos.mode, order_begin_pos.buy_exec_index)
                l2_log.debug(code, "执行买入成功")
                ################下单成功处理################
                trade_result_manager.real_buy_success(code, cls.__TradePointManager)
l2/l2_transaction_data_processor.py
@@ -59,14 +59,15 @@
                            break
                except Exception as e:
                    async_log_util.error(hx_logger_l2_debug, str(e))
                try:
                    # 下单2s后才开始生效
                    cresult = LCancelBigNumComputer().add_transaction_datas(code, datas)
                    if cresult[0] and not DCancelBigNumComputer().has_auto_cancel_rules(code):
                        L2TradeDataProcessor.cancel_buy(code, f"L后成交太快撤单:{cresult[1]}")
                        order_begin_pos = None
                except Exception as e:
                    async_log_util.error(hx_logger_l2_debug, str(e))
                # 暂时注释掉
                # try:
                #     # 下单2s后才开始生效
                #     cresult = LCancelBigNumComputer().add_transaction_datas(code, datas)
                #     if cresult[0] and not DCancelBigNumComputer().has_auto_cancel_rules(code):
                #         L2TradeDataProcessor.cancel_buy(code, f"L后成交太快撤单:{cresult[1]}")
                #         order_begin_pos = None
                # except Exception as e:
                #     async_log_util.error(hx_logger_l2_debug, str(e))
            big_sell_order_info = None
            try:
                # 统计卖单
trade/huaxin/huaxin_trade_server.py
@@ -295,7 +295,7 @@
    __updating_jx_blocks_codes = set()
    @classmethod
    def __sell(cls, datas):
    def sell(cls, datas):
        rules = TradeRuleManager().list_can_excut_rules_cache(types=[TradeRuleManager.TYPE_SELL])
        excuted_rule_ids = set()
        if rules:
@@ -378,7 +378,7 @@
        request_id = data_json["request_id"]
        datas = data["data"]
        cls.__save_l1_current_price(datas)
        cls.__sell(datas)
        cls.sell(datas)
    @classmethod
    def l2_order(cls, code, _datas, timestamp):
@@ -515,7 +515,7 @@
        # (代码, 现价, 涨幅, 量, 更新时间, 买1价格, 买1量)
        datas = [("600571", 12.14, 9.96, 100000000, tool.get_now_time_str(), 12.14, 10210),
                 ("600571", 12.04, 9.96, 100000000, tool.get_now_time_str(), 12.04, 10210)]
        cls.__sell(datas)
        cls.sell(datas)
def clear_invalid_client():
trade/sell/sell_rule_manager.py
@@ -114,6 +114,7 @@
                rule.code, rule.buy1_volume, rule.buy1_price, rule.sell_volume, rule.sell_price_type, rule.end_time,
                rule.id_))
        rule.excuted = old_rule.excuted
        rule.type = old_rule.type
        rule.create_time = old_rule.create_time
        self.__sell_rules_dict_cache[rule.id_] = rule
trade/trade_huaxin.py
@@ -33,7 +33,7 @@
# 通过量下单,返回(代码,账号ID,订单号)
def order_volume(code, price, count, last_data, order_ref=None):
def order_volume(code, price, count, last_data, order_ref=None, exec_index=None):
    async_log_util.info(logger_trade, f"{code} trade_huaxin.order_volume 开始")
    try:
        price = round(float(price), 2)
@@ -41,7 +41,7 @@
            raise Exception("只支持00开头与60开头的代码下单")
        # 保存下单信息
        shadow_price = tool.get_shadow_price(price)
        huaxin.huaxin_delegate_postion_manager.place_order(code, price, count, last_data, order_ref,
        huaxin.huaxin_delegate_postion_manager.place_order(code, price, count, exec_index, last_data, order_ref,
                                                           shadow_price=shadow_price)
        if not constant.TRADE_ENABLE:
            return
trade/trade_manager.py
@@ -484,7 +484,7 @@
# 开始交易
def start_buy(code, capture_timestamp, last_data, last_data_index, mode=0):
def start_buy(code, capture_timestamp, last_data, last_data_index, mode=0, exec_index=None):
    def is_forbidden(code):
        if l2_trade_util.is_in_forbidden_trade_codes(code):
            return Exception("禁止交易")
@@ -524,7 +524,7 @@
            async_log_util.info(logger_trade, "{} trade.manager.start_buy 判断是否可买".format(code))
        __CodesTradeStateManager.set_trade_state(code, TRADE_STATE_BUY_PLACE_ORDER)
        # 状态改变过后必须要有本地下单编号
        __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index, mode)
        __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index, mode, exec_index=exec_index)
    finally:
        async_log_util.info(logger_trade, "{} trade.manager.start_buy 结束".format(code))
@@ -536,7 +536,7 @@
# 购买
# @tool.async_call
def __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index, mode=0):
def __buy(code, price, trade_state, capture_timestamp, last_data, last_data_index, mode=0, exec_index=None):
    async_log_util.info(logger_trade, "{} trade_manager.__buy 开始".format(code))
    try:
        if constant.API_TRADE_ENABLE:
@@ -546,7 +546,7 @@
            elif constant.TRADE_WAY == constant.TRADE_WAY_HUAXIN:
                order_ref = huaxin_util.create_order_ref()
                TradeOrderIdManager().add_order_ref(code, order_ref)
                trade_huaxin.order_volume(code, price, count, last_data, order_ref=order_ref)
                trade_huaxin.order_volume(code, price, count, last_data, order_ref=order_ref, exec_index=exec_index)
        else:
            guiTrade.buy(code, price)
        __place_order_success(code, capture_timestamp, last_data, last_data_index)