Administrator
2024-04-25 331a177ada569d85107b6e294f904b37f386d33a
下单优化
7个文件已修改
94 ■■■■ 已修改文件
l2/l2_data_manager.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_data_manager_new.py 52 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/place_order_single_data_manager.py 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
output/code_info_output.py 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/kpl_data_manager.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/huaxin/huaxin_trade_server.py 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_record_log_util.py 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
l2/l2_data_manager.py
@@ -20,7 +20,7 @@
    # mode: 0-普通交易  1-快速交易
    def __init__(self, buy_single_index=None, buy_exec_index=-1, buy_compute_index=None, num=0, count=0,
                 max_num_set=None, buy_volume_rate=None, sell_info=None, threshold_money=None, mode=0,
                 max_num_set=None, buy_volume_rate=None, sell_info=None, threshold_money=None, mode=0, mode_desc=None,
                 at_limit_up=False):
        self.buy_single_index = buy_single_index
        self.buy_exec_index = buy_exec_index
@@ -35,6 +35,7 @@
        self.buy_volume_rate = buy_volume_rate
        self.sell_info = sell_info
        self.mode = mode
        self.mode_desc = mode_desc
        # 是否是板上买
        self.at_limit_up = at_limit_up
l2/l2_data_manager_new.py
@@ -640,6 +640,18 @@
        cls.__buy(code, 0, last_data, last_data_index, is_first_code)
    @classmethod
    def get_active_buy_blocks(cls, code):
        """
        获取激进买入的板块
        @param code:
        @return:
        """
        can_buy_result = CodePlateKeyBuyManager.can_buy(code)
        if can_buy_result:
            return can_buy_result[5]
        return None
    @classmethod
    def __buy(cls, code, capture_timestamp, last_data, last_data_index, is_first_code):
        # 添加买入锁
        if code not in cls.__buy_lock_dict:
@@ -699,6 +711,7 @@
                        info = cls.__trade_log_placr_order_info_dict[code]
                        info.mode = order_begin_pos.mode
                        info.mode_desc = order_begin_pos.mode_desc
                        info.set_buy_index(order_begin_pos.buy_single_index, order_begin_pos.buy_exec_index)
                        info.set_sell_info(order_begin_pos.sell_info)
                        if jx_blocks:
@@ -1343,6 +1356,7 @@
            fast_msg = None
            if has_single:
                order_begin_pos.mode = mode
                order_begin_pos.mode_desc = f"委托触发: {single_msg}"
                order_begin_pos.sell_info = sell_info
                fast_msg = sell_info
                # 用了信号就必须清除掉原有信号
@@ -1423,6 +1437,7 @@
                                                                max_num_set=max_num_set_new,
                                                                buy_volume_rate=cls.volume_rate_info[code][0],
                                                                mode=order_begin_pos.mode,
                                                                mode_desc=order_begin_pos.mode_desc,
                                                                sell_info=order_begin_pos.sell_info,
                                                                threshold_money=threshold_money))
            cls.__LimitUpTimeManager.save_limit_up_time(code, total_datas[new_buy_exec_index]["val"]["time"])
@@ -1445,6 +1460,7 @@
            cls.__save_order_begin_data(code, OrderBeginPosInfo(buy_single_index=buy_single_index, buy_exec_index=-1,
                                                                buy_compute_index=compute_end_index, num=buy_nums,
                                                                count=buy_count,
                                                                mode_desc=order_begin_pos.mode_desc,
                                                                max_num_set=max_num_set_new, mode=order_begin_pos.mode,
                                                                sell_info=order_begin_pos.sell_info,
                                                                threshold_money=threshold_money))
@@ -1639,6 +1655,7 @@
        # 获取最近的总卖信息
        # (time_str, round(money), volume, sell_1_info)
        refer_sell_data = cls.__L2MarketSellManager.get_refer_sell_data(code, start_time_str)
        active_buy_blocks = cls.get_active_buy_blocks(code)
        if code.find("60") == 0:
            if refer_sell_data is None:
                # 设置默认卖信息
@@ -1654,7 +1671,8 @@
                # 金额要大于50万
                if _val["num"] * float(_val["price"]) < 5000:
                    continue
                return True, i, [refer_sell_data[0], 0], '上证买入', OrderBeginPosInfo.MODE_FAST
                return True, i, [refer_sell_data[0], 0], '上证买入',  OrderBeginPosInfo.MODE_ACTIVE if active_buy_blocks else  OrderBeginPosInfo.MODE_FAST
            return False, -1, "未获取到激进买的起始信号", '', OrderBeginPosInfo.MODE_NORMAL
        else:
            # 深证
@@ -1696,20 +1714,20 @@
                                                                           valid_single=False)
                    if buy_single_index is not None:
                        return True, buy_single_index, [refer_sell_data[0],
                                                        threshold_money], "上板无涨停卖", OrderBeginPosInfo.MODE_NORMAL
                                                        threshold_money], "上板无涨停卖", OrderBeginPosInfo.MODE_ACTIVE if active_buy_blocks else OrderBeginPosInfo.MODE_NORMAL
                else:
                    # 按照成交买入信号计算
                    buy_single_index = cls.__get_active_single_start_index(code, start_index, end_index, continue_count,
                                                                           valid_single=True)
                    if buy_single_index is not None:
                        return True, buy_single_index, [refer_sell_data[0], 0], "上板有成交买入信号", OrderBeginPosInfo.MODE_FAST
                        return True, buy_single_index, [refer_sell_data[0], 0], "上板有成交买入信号", OrderBeginPosInfo.MODE_ACTIVE if active_buy_blocks else  OrderBeginPosInfo.MODE_FAST
            else:
                # 板上放量:只需要一笔涨停买可作为信号
                buy_single_index = cls.__get_active_single_start_index(code, start_index, end_index, continue_count,
                                                                       valid_single=False)
                if buy_single_index is not None:
                    return True, buy_single_index, [refer_sell_data[0], 0], "板上放量", OrderBeginPosInfo.MODE_NORMAL
                    return True, buy_single_index, [refer_sell_data[0], 0], "板上放量", OrderBeginPosInfo.MODE_ACTIVE if active_buy_blocks else OrderBeginPosInfo.MODE_NORMAL
        return False, -1, "未获取到激进买的起始信号", '', OrderBeginPosInfo.MODE_NORMAL
@@ -2101,6 +2119,7 @@
        # 不下单的信息
        not_buy_msg = ""
        max_buy_num_set = set(max_num_set)
        active_buy_blocks = cls.get_active_buy_blocks(code)
        for i in range(compute_start_index, compute_end_index + 1):
            data = total_datas[i]
            _val = total_datas[i]["val"]
@@ -2180,15 +2199,22 @@
                continue
            safe_count = 1
            if total_sell_money <= 0:
                # 板上下单需要安全笔数3笔
                safe_count = 3
            elif code.find("00") == 0:
                # 深证非板上放量
                safe_count = 2
            if code.find("60") == 0:
                # 上证安全笔数为3
                safe_count = 3
            if active_buy_blocks:
                # 有激进板块
                safe_count = 1
            else:
                # 无激进下单板块
                if total_sell_money <= 0:
                    # 所有的板上放量都需要3笔
                    # 板上下单需要安全笔数3笔
                    safe_count = 3
                else:
                    if code.find("00") == 0:
                        # 深证上板
                        safe_count = 2
                    elif code.find("60") == 0:
                        # 上证安全笔数为3
                        safe_count = 3
            if buy_count < safe_count:
                not_buy_msg = f"【{i}】安全笔数不足,{buy_count}/{safe_count}"
                continue
l2/place_order_single_data_manager.py
@@ -257,13 +257,14 @@
        @param active_data: 主动卖成交逐笔
        @return:
        """
        # 暂时不需要生效
        l2_log.info(code, logger_l2_trade_buy, f"被动卖变主动卖:{passive_data} => {active_data}")
        deal_time = l2_huaxin_util.convert_time(passive_data[3], True)
        # 生效时间在1s以内
        cls.__latest_sell_active_deal_data_dict[code] = (
            active_data, tool.trade_time_add_millionsecond(deal_time, 1000))
        if cls.__callback:
            cls.__callback.OnTradeSingle(code, 0, cls.TYPE_ACTIVE, cls.__latest_sell_active_deal_data_dict[code])
        # deal_time = l2_huaxin_util.convert_time(passive_data[3], True)
        # # 生效时间在1s以内
        # cls.__latest_sell_active_deal_data_dict[code] = (
        #     active_data, tool.trade_time_add_millionsecond(deal_time, 1000))
        # if cls.__callback:
        #     cls.__callback.OnTradeSingle(code, 0, cls.TYPE_ACTIVE, cls.__latest_sell_active_deal_data_dict[code])
    @classmethod
    def get_valid_trade_single(cls, code, latest_time_with_ms):
output/code_info_output.py
@@ -422,17 +422,18 @@
                    records_new_data.append((time_, "", "-------------------------", []))
                    mode = data.get('mode')
                    mode_desc = data.get('mode_desc')
                    if mode == OrderBeginPosInfo.MODE_ACTIVE:
                        records_new_data.append((time_, "激进下单",
                                                 f"【{format_l2_data(total_datas[data['buy_single_index']])}】-【{format_l2_data(total_datas[data['buy_exec_index']])}】",
                                                 mode_desc,
                                                 extra_datas))
                    elif mode == OrderBeginPosInfo.MODE_FAST:
                        records_new_data.append((time_, "闪电下单",
                                                 f"【{format_l2_data(total_datas[data['buy_single_index']])}】-【{format_l2_data(total_datas[data['buy_exec_index']])}】",
                                                 mode_desc,
                                                 extra_datas))
                    else:
                        records_new_data.append((time_, "常规下单",
                                                 f"【{format_l2_data(total_datas[data['buy_single_index']])}】-【{format_l2_data(total_datas[data['buy_exec_index']])}】",
                                                 mode_desc,
                                                 extra_datas))
                elif type == trade_record_log_util.TYPE_REAL_PLACE_ORDER_POSITION:
                    _datas = []
third_data/kpl_data_manager.py
@@ -418,7 +418,7 @@
    def get_limit_up():
        while True:
            try:
                if (tool.is_trade_time() and int(tool.get_now_time_str().replace(':', '')) > int("092530")):
                if (tool.is_trade_time() and int(tool.get_now_time_str().replace(':', '')) > int("092530")) or True:
                    results = kpl_api.getLimitUpInfoNew()
                    result = json.loads(results)
                    start_time = time.time()
trade/huaxin/huaxin_trade_server.py
@@ -1713,8 +1713,16 @@
            l2_log.debug(code, "成交触发买入计算 触发模式:{} 大单数量:{}", _type, big_buy_order_count)
            total_datas = l2_data_util.local_today_datas.get(code)
            if _type == L2TradeSingleDataManager.TYPE_PASSIVE and big_buy_order_count > 0:
                # 被动下单且大单数量大于0就可以激进下单
            mode_descs = []
            if big_buy_order_count > 0:
                mode_descs.append("300w")
            if l2_data_manager_new.L2TradeDataProcessor.get_active_buy_blocks(code):
                mode_descs.append("身位")
            if _type == L2TradeSingleDataManager.TYPE_PASSIVE and mode_descs:
                # 被动下单且大单数量大于0/激进下单板块就可以激进下单
                mode_descs.insert(0, "成交触发")
                last_index = total_datas[-1]["index"]
                volume_rate = code_volumn_manager.get_volume_rate(code)
                order_begin_pos = OrderBeginPosInfo(buy_single_index=last_index,
@@ -1724,6 +1732,7 @@
                                                    max_num_set=set(),
                                                    buy_volume_rate=volume_rate,
                                                    mode=OrderBeginPosInfo.MODE_ACTIVE,
                                                    mode_desc=",".join(mode_descs),
                                                    sell_info=None,
                                                    threshold_money=0)
                l2_data_manager_new.L2TradeDataProcessor.save_order_begin_data(code, order_begin_pos)
@@ -1755,6 +1764,7 @@
                                                            max_num_set=set(),
                                                            buy_volume_rate=volume_rate,
                                                            mode=OrderBeginPosInfo.MODE_FAST,
                                                            mode_desc="成交触发",
                                                            sell_info=None,
                                                            threshold_money=0)
                        l2_data_manager_new.L2TradeDataProcessor.save_order_begin_data(code, order_begin_pos)
trade/trade_record_log_util.py
@@ -18,7 +18,7 @@
class PlaceOrderInfo(object):
    def __init__(self, buy_single_index=None, buy_exec_index=None, m_val=None, safe_count=None, big_num_indexes=None,
                 kpl_blocks=None, kpl_match_blocks=None, mode=None, sell_info = None):
                 kpl_blocks=None, kpl_match_blocks=None, mode=None, mode_desc=None, sell_info = None):
        self.buy_single_index = buy_single_index
        self.buy_exec_index = buy_exec_index
        self.m_val = m_val
@@ -27,6 +27,7 @@
        self.kpl_blocks = kpl_blocks
        self.kpl_match_blocks = kpl_match_blocks
        self.mode = mode
        self.mode_desc = mode_desc
        self.sell_info = sell_info
    def set_buy_index(self, buy_single_index, buy_exec_index):