Administrator
2024-04-16 58c7388c1979c13bdf84db0f53ff7ab5c34e15ca
被动卖成交数据处理优化
2个文件已修改
68 ■■■■ 已修改文件
l2/l2_transaction_data_manager.py 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/place_order_single_data_manager.py 62 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_transaction_data_manager.py
@@ -141,14 +141,12 @@
        # 保存最近的成交价格:(价格,成交时间)
        cls.__latest_trade_price_dict[code] = (datas[-1][1], datas[-1][3])
        L2TradeSingleDataProcessor.process_passive_limit_up_sell_data(code, datas, limit_up_price)
        for d in datas:
            # 获取当前是否为主动买
            try:
                _is_active_sell = is_active_sell(d[7], d[6])
                if not _is_active_sell and d[1] == limit_up_price:
                    # 被动涨停卖,这个卖的订单是否在最近的涨停卖列表中
                    L2TradeSingleDataProcessor.process_passive_limit_up_sell_data(d)
                if not _is_active_sell:
                    continue
l2/place_order_single_data_manager.py
@@ -1,6 +1,8 @@
"""
下单信号管理
"""
import time
from l2 import l2_log
from l2.huaxin import l2_huaxin_util
from log_module.log import logger_l2_trade_buy, logger_debug
@@ -62,7 +64,7 @@
                break
    @classmethod
    def process_passive_limit_up_sell_data(cls, data):
    def process_passive_limit_up_sell_data(cls, code, datas, limit_up_price):
        """
        添加涨停被动卖成交数据
        @param data: 数据格式:(data['SecurityID'], data['TradePrice'], data['TradeVolume'],
@@ -71,41 +73,37 @@
        @return:
        """
        try:
            # 需要判断当前单是否已经成交完成
            code = data[0]
            sell_no = data[7]
            if code not in cls.__latest_sell_data:
                cls.__latest_sell_data[code] = [sell_no, data[2]]
            else:
                if cls.__latest_sell_data[code][0] == sell_no:
                    cls.__latest_sell_data[code][1] += data[2]
                else:
                    cls.__latest_sell_data[code] = [sell_no, data[2]]
            # 判断是否是最后一笔卖单
            # l2_log.info(code, logger_l2_trade_buy, f"被动卖数据:{data}")
            # 判断这个订单号是否成交完
            start_time = time.time()
            sell_list = cls.__latest_limit_up_sell_list_dict.get(code)
            if not sell_list:
                return
            sell_info = sell_list[-1]
            # 主动卖订单集合
            # active_sell_order_no_set = cls.__active_sell_order_no_set_dict.get(code)
            # if active_sell_order_no_set and sell_info['val']['orderNo'] in active_sell_order_no_set:
            #     l2_log.info(code, logger_l2_trade_buy,f"最近的卖是主动卖:{sell_info['val']['orderNo']}")
            #     return
            sell_info_num = sell_info['val']['num']
            deal_num = cls.__latest_sell_data[code][1] // 100
            # l2_log.info(code, logger_l2_trade_buy,
            #             f"最近涨停卖:{sell_info['val']['orderNo']} 卖量:{sell_info_num} 成交量:{deal_num}")
            if sell_no == sell_info['val']['orderNo'] and sell_info_num == deal_num:
                # 成交完成
                L2TradeSingleDataManager.set_latest_sell_data(code, data)
                l2_log.info(code, logger_l2_trade_buy, f"找到最近的被动涨停卖单数据:{sell_info['val']['orderNo']}, 可以触发下单")
                # l2_log.info(code, logger_l2_trade_buy, f"找到最近的被动涨停卖单数据:{data['val']['orderNo']}, 可以触发下单")
            for data in datas:
                if data[6] < data[7] or data[1] != limit_up_price:
                    # 排除主动卖/非涨停卖
                    continue
                sell_no = data[7]
                if sell_no != sell_info['val']['orderNo']:
                    continue
                # 需要判断当前单是否已经成交完成
                if code not in cls.__latest_sell_data:
                    cls.__latest_sell_data[code] = [sell_no, data[2]]
                else:
                    if cls.__latest_sell_data[code][0] == sell_no:
                        cls.__latest_sell_data[code][1] += data[2]
                    else:
                        cls.__latest_sell_data[code] = [sell_no, data[2]]
                sell_info_num = sell_info['val']['num']
                deal_num = cls.__latest_sell_data[code][1] // 100
                if sell_info_num == deal_num:
                    use_time = round((time.time() - start_time) * 1000, 3)
                    l2_log.info(code, logger_l2_trade_buy,
                                f"找到最近的被动涨停卖单数据:{sell_info['val']['orderNo']}, 计算耗时:{use_time}ms, 可以触发下单")
                    # 成交完成
                    L2TradeSingleDataManager.set_latest_sell_data(code, data)
                    l2_log.info(code, logger_l2_trade_buy, "被动卖数据处理完毕")
                    break
                    # l2_log.info(code, logger_l2_trade_buy, f"找到最近的被动涨停卖单数据:{data['val']['orderNo']}, 可以触发下单")
        except Exception as e:
            logger_debug.exception(e)