Administrator
2024-07-02 8138f3e5c6a2f05ed58adb12569ede34ffccf167
上证成交进度信息排除主动买成交数据
3个文件已修改
84 ■■■■ 已修改文件
l2/l2_transaction_data_manager.py 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
output/l2_output_util.py 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/data_server.py 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_transaction_data_manager.py
@@ -123,6 +123,9 @@
    # 正在成交的订单
    __dealing_order_info_dict = {}
    # 正在成交的主动买的订单
    __dealing_active_buy_order_info_dict = {}
    # 最近成交的订单{"code":(订单号,是否成交完成)}
    __latest_deal_order_info_dict = {}
@@ -165,6 +168,15 @@
        return cls.__dealing_order_info_dict.get(code)
    @classmethod
    def get_dealing_active_order_info(cls, code):
        """
        获取正在主动成交的数据
        @param code:
        @return:[订单号,总股数,成交金额,成交开始时间,成交结束时间]
        """
        return cls.__dealing_active_buy_order_info_dict.get(code)
    @classmethod
    def statistic_big_buy_data(cls, code, datas, limit_up_price):
        """
        统计大单买
@@ -184,25 +196,46 @@
            if code not in cls.__dealing_order_info_dict:
                # 数据格式[订单号,总股数,成交金额,成交开始时间,成交结束时间]
                cls.__dealing_order_info_dict[code] = [data[6], data[2], data[2] * data[1], data[3], data[3]]
            if cls.__dealing_order_info_dict[code][0] == data[6]:
                # 成交同一个订单号
                cls.__dealing_order_info_dict[code][1] += data[2]
                cls.__dealing_order_info_dict[code][2] += data[2] * data[1]
                cls.__dealing_order_info_dict[code][4] = data[3]
            else:
                # 保存上一条数据
                async_log_util.info(hx_logger_l2_transaction_desc, f"{code}#{cls.__dealing_order_info_dict[code]}")
                # 设置最近成交完成的一条数据
                deal_info = cls.__dealing_order_info_dict[code]
                cls.__latest_deal_order_info_dict[code] = deal_info
                # 是否为大买单
                if deal_info[2] >= threshold_big_money:
                    big_buy_datas.append(deal_info)
                if deal_info[2] >= 500000:
                    normal_buy_datas.append(deal_info)
                if cls.__dealing_order_info_dict[code][0] == data[6]:
                    # 成交同一个订单号
                    cls.__dealing_order_info_dict[code][1] += data[2]
                    cls.__dealing_order_info_dict[code][2] += data[2] * data[1]
                    cls.__dealing_order_info_dict[code][4] = data[3]
                else:
                    # 保存上一条数据
                    async_log_util.info(hx_logger_l2_transaction_desc, f"{code}#{cls.__dealing_order_info_dict[code]}")
                    # 设置最近成交完成的一条数据
                    deal_info = cls.__dealing_order_info_dict[code]
                    cls.__latest_deal_order_info_dict[code] = deal_info
                    # 是否为大买单
                    if deal_info[2] >= threshold_big_money:
                        big_buy_datas.append(deal_info)
                    if deal_info[2] >= 500000:
                        normal_buy_datas.append(deal_info)
                # 初始化本条数据
                cls.__dealing_order_info_dict[code] = [data[6], data[2], data[2] * data[1], data[3], data[3]]
                    # 初始化本条数据
                    cls.__dealing_order_info_dict[code] = [data[6], data[2], data[2] * data[1], data[3], data[3]]
            # 统计主动买(买单号大于卖单号)
            try:
                if data[6] > data[7]:
                    if code not in cls.__dealing_active_buy_order_info_dict:
                        # 数据格式[订单号,总股数,成交金额,成交开始时间,成交结束时间]
                        cls.__dealing_active_buy_order_info_dict[code] = [data[6], data[2], data[2] * data[1], data[3],
                                                                          data[3]]
                    else:
                        if cls.__dealing_active_buy_order_info_dict[code][0] == data[6]:
                            # 成交同一个订单号
                            cls.__dealing_active_buy_order_info_dict[code][1] += data[2]
                            cls.__dealing_active_buy_order_info_dict[code][2] += data[2] * data[1]
                            cls.__dealing_active_buy_order_info_dict[code][4] = data[3]
                        else:
                            # 初始化本条数据
                            cls.__dealing_active_buy_order_info_dict[code] = [data[6], data[2], data[2] * data[1],
                                                                              data[3], data[3]]
            except:
                pass
        return big_buy_datas, normal_buy_datas
output/l2_output_util.py
@@ -5,12 +5,15 @@
from l2.l2_data_util import L2DataUtil, local_today_canceled_buyno_map
from l2.l2_transaction_data_manager import HuaXinBuyOrderManager
from l2.transaction_progress import TradeBuyQueue
from utils import tool
def __get_trade_queue(code, start_index, end_index, real_place_order_index, max_count, step=1):
    fresults = []
    # 正在成交的数据
    dealing_info = HuaXinBuyOrderManager.get_dealing_order_info(code)
    dealing_active_info = HuaXinBuyOrderManager.get_dealing_active_order_info(code)
    total_datas = l2_data_util.local_today_datas.get(code)
    for i in range(start_index, end_index, step):
        # 真实下单位置不管是否撤单都需要加入队列
@@ -34,6 +37,13 @@
                    dealing_info[0]):
                # 减去当前正在成交的数据中已经成交了的数据
                num -= dealing_info[1] // 100
                # 判断当前单的主动买的数量
                if dealing_active_info and str(total_datas[i]["val"]["orderNo"]) == str(
                        dealing_active_info[0]):
                    if tool.is_sh_code(code):
                        # 上证的票需要加上主动买的数据
                        num += dealing_active_info[1] // 100
            if i == real_place_order_index:
                type_ = 1
                has_real_order_index = True
third_data/data_server.py
@@ -380,11 +380,16 @@
            trade_progress, is_default = transaction_progress.TradeBuyQueue().get_traded_index(code)
            # 获取正在成交, 计算成交进度
            dealing_info = HuaXinBuyOrderManager.get_dealing_order_info(code)
            dealing_active_info = HuaXinBuyOrderManager.get_dealing_active_order_info(code)
            percent = 100
            if dealing_info:
                total_datas = l2_data_util.local_today_datas.get(code)
                if str(total_datas[trade_progress]['val']["orderNo"]) == str(dealing_info[0]):
                    percent = int(dealing_info[1] / total_datas[trade_progress]['val']['num'])
                    num = total_datas[trade_progress]['val']['num']
                    if dealing_active_info and dealing_info[0] == dealing_active_info[0]:
                        if tool.is_sh_code(code):
                            num += dealing_active_info[1]//100
                    percent = int(dealing_info[1] / num)
            response_data = json.dumps(
                {"code": 0, "data": {"trade_progress": trade_progress, "is_default": is_default, "percent": percent}})
        elif url.path == "/get_l_cancel_datas":