Administrator
2025-05-09 0033f43c150e7b226455d207a3e148de21c7a938
bug修复
2个文件已修改
61 ■■■■ 已修改文件
huaxin_client/l2_client_test.py 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_radical/radical_buy_strategy.py 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
huaxin_client/l2_client_test.py
@@ -4,6 +4,7 @@
import queue
import time
import lev2mdapi
from l2.huaxin import l2_huaxin_util
from log_module import log
from log_module.log import logger_local_huaxin_l2_subscript, logger_system
from utils import tool
@@ -66,7 +67,7 @@
    def get_big_sell_orders(self):
        return self.__big_sell_orders
    def add_transaction_data_for_accurate(self, data):
    def add_transaction_data_for_accurate(self, item):
        """
        获取精确的买单信息
        @param data:
@@ -76,18 +77,10 @@
        def format_timestamp(timestamp):
            time_str = str(timestamp)
            return int(time_str[:5] if time_str[0] == '9' else time_str[:6])
        item = (data["BuyNo"], data["SellNo"], data["TradePrice"], data["TradeVolume"])
        # item = {"SecurityID": pTransaction['SecurityID'], "TradePrice": pTransaction['TradePrice'],
        #         "TradeVolume": pTransaction['TradeVolume'],
        #         "OrderTime": pTransaction['TradeTime'], "MainSeq": pTransaction['MainSeq'],
        #         "SubSeq": pTransaction['SubSeq'], "BuyNo": pTransaction['BuyNo'],
        #         "SellNo": pTransaction['SellNo'],
        #         "ExecType": pTransaction['ExecType'].decode()}
        money = round(item[2] * item[3])
        volume = item[3]
        price = item[2]
        order_time = data["OrderTime"]
        order_time = item[4]
        if item[0] not in self.__big_accurate_buy_order_dict:
            # (买单号, 量, 金额, 时间, 最新成交价格)
            self.__big_accurate_buy_order_dict[item[0]] = [item[0], 0, 0, order_time, price]
@@ -100,22 +93,20 @@
        if self.__latest_buy_order and self.__latest_buy_order[0] != item[0]:
            # 有可能是大单成交完成, 判断上个订单是否是大单
            last_buy_order = self.__big_accurate_buy_order_dict.get(self.__latest_buy_order[0])
            try:
                if last_buy_order[2] > 299e4:
                    self.big_accurate_buy_order_queue.put_nowait(last_buy_order)
            except Exception as e:
                print("数据:", last_buy_order, self.__latest_buy_order, item)
                raise e
            if last_buy_order[2] > 299e4:
                self.big_accurate_buy_order_queue.put_nowait(last_buy_order)
            # 如果数据过多需要移除过长时间的小金额数据
            accurate_buy_count = len(self.__big_accurate_buy_order_dict.keys())
            if accurate_buy_count > 10000 and accurate_buy_count - self.__last_accurate_buy_count > 2000:
                # 超过1w条数据且新增2000条数据
                # 超过1w条数据就要移除30分钟之前的数据
                now_time_int = int(tool.trade_time_add_second(tool.get_now_time_str(), -3600).replace(":", ""))
                now_time_int = int(
                    tool.trade_time_add_second(l2_huaxin_util.convert_time(order_time), -3600).replace(":", ""))
                try:
                    remove_order_nos = [x for x in self.__big_accurate_buy_order_dict if
                                        now_time_int - format_timestamp(
                                            self.__big_accurate_buy_order_dict[x][3]) > 0]
                                        format_timestamp(self.__big_accurate_buy_order_dict[x][3]) < now_time_int]
                    if remove_order_nos:
                        for order_no in remove_order_nos:
                            self.__big_accurate_buy_order_dict.pop(order_no)
@@ -141,11 +132,11 @@
            if accurate_sell_count > 10000 and accurate_sell_count - self.__last_accurate_sell_count > 2000:
                # 超过1w条数据且新增2000条数据
                # 超过1w条数据就要移除30分钟之前的数据
                now_time_int = int(tool.trade_time_add_second(tool.get_now_time_str(), -3600).replace(":", ""))
                now_time_int = int(tool.trade_time_add_second(l2_huaxin_util.convert_time(order_time), -3600).replace(":", ""))
                try:
                    remove_order_nos = [x for x in self.__big_accurate_sell_order_dict if
                                        now_time_int - format_timestamp(
                                            self.__big_accurate_sell_order_dict[x][3]) > 0]
                                        now_time_int > format_timestamp(
                                            self.__big_accurate_sell_order_dict[x][3])]
                    if remove_order_nos:
                        for order_no in remove_order_nos:
                            self.__big_accurate_sell_order_dict.pop(order_no)
@@ -153,7 +144,7 @@
                    self.__last_accurate_sell_count = len(self.__big_accurate_sell_order_dict.keys())
    def add_transaction_data(self, data):
        item = (data["BuyNo"], data["SellNo"], data["TradePrice"], data["TradeVolume"])
        item = (data["BuyNo"], data["SellNo"], data["TradePrice"], data["TradeVolume"], data["OrderTime"])
        # item = {"SecurityID": pTransaction['SecurityID'], "TradePrice": pTransaction['TradePrice'],
        #         "TradeVolume": pTransaction['TradeVolume'],
        #         "OrderTime": pTransaction['TradeTime'], "MainSeq": pTransaction['MainSeq'],
@@ -163,10 +154,10 @@
        money = round(item[2] * item[3])
        volume = item[3]
        price = item[2]
        order_time = data["OrderTime"]
        order_time = item[4]
        if self.accurate_buy:
            self.add_transaction_data_for_accurate(data)
            self.add_transaction_data_for_accurate(item)
        if not self.__latest_buy_order:
            # (买单号, 量, 金额, 时间, 最新成交价格)
trade/buy_radical/radical_buy_strategy.py
@@ -15,9 +15,10 @@
from third_data import kpl_data_manager
from third_data.kpl_data_constant import LimitUpDataConstant, LimitUpCodesBlockRecordManager
from trade.buy_radical import radical_buy_data_manager, block_special_codes_manager
from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager
from trade.buy_radical.radical_buy_data_manager import RadicalBuyBlockManager
from trade.trade_data_manager import RadicalBuyDealCodesManager
from utils import tool
from utils import tool, global_util
# 不买入
BUY_MODE_NONE = 0
@@ -132,7 +133,8 @@
            #     return BUY_MODE_NONE, f"距离上个大单成交超过{THRESHOLD_TIME}ms"
    # 初次上板需要计算临时大单
    if radical_buy_data_manager.is_first_limit_up_buy(code):
    is_first = radical_buy_data_manager.is_first_limit_up_buy(code)
    if is_first:
        # 首封下单
        money_info_list = BigOrderDealManager().get_total_buy_data_list(code)
        radical_buy_data_manager.BeforeSubDealBigOrderManager().set_temp_deal_big_orders(code, money_info_list)
@@ -178,8 +180,18 @@
        #         code):
        #     threshold_left_sell_money = average_big_order_money * 2
        # TODO 判断是否可直接下单,不需要等到封单消耗
        if refer_sell_money >= 5e7 and is_first:
            # 大抛压,是首封
            zyltgb = global_util.zyltgb_map.get(code)
            if zyltgb and zyltgb > 50e8 and BlockSpecialCodesManager().get_code_blocks(code):
                # 自由市值>50亿,具有辨识度
                total_lack_money_info = radical_buy_data_manager.get_total_deal_big_order_info(code,
                                                                                               gpcode_manager.get_limit_up_price_as_num(
                                                                                                   code),
                                                                                               is_for_buy=True)
                if total_lack_money_info[0] <= 0 and total_lack_money_info[1] > total_lack_money_info[2] * 1.2:
                    # 大单足够,总成交金额是大单的1.2倍以上
                    return BUY_MODE_DIRECT, f"首封下单抛压大、市值大、成交多、直接扫  卖1-{refer_sell_money} 大单-{total_lack_money_info}"
        if threshold_left_sell_money > left_limit_up_sell_money:
            # 剩余总卖小于均大单才能下单