Administrator
2024-10-14 46789f04b9d1525c38bc64e8ecd244e16661b71b
接口修改/扫入板块修改
10个文件已修改
183 ■■■■ 已修改文件
api/outside_api_command_callback.py 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
servers/huaxin_trade_server.py 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/l2_trade_test.py 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/test.py 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/test_block.py 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/test_k_datas.py 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/code_plate_key_manager.py 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
third_data/third_blocks_manager.py 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/buy_money_count_setting.py 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
trade/trade_result_manager.py 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/outside_api_command_callback.py
@@ -1104,6 +1104,14 @@
                            except:
                                pass
                            try:
                                if order_begin_pos:
                                    fdata['mode'] = order_begin_pos.mode
                                else:
                                    fdata['mode'] = -1
                            except:
                                pass
                            fdatas.append(fdata)
                        except Exception as e:
                            logger_debug.exception(e)
servers/huaxin_trade_server.py
@@ -45,7 +45,7 @@
from third_data.history_k_data_util import JueJinApi
from trade import trade_manager, l2_trade_util, \
    trade_data_manager, trade_constant, radical_buy_strategy, radical_buy_data_manager
from trade.buy_money_count_setting import BuyMoneyAndCountSetting
from trade.buy_money_count_setting import BuyMoneyAndCountSetting, BuyMoneyUtil
from trade.huaxin import huaxin_trade_api as trade_api, huaxin_trade_api, huaxin_trade_data_update, \
    huaxin_trade_record_manager, huaxin_sell_util
@@ -782,6 +782,7 @@
            # 判断昨日是否涨停过
            async_log_util.info(logger_l2_radical_buy, f"涨停主动买:{code}-{transaction_datas[-1]}")
            deal_codes = RadicalBuyDealCodesManager().get_deal_codes()
            # 判断今日扫入的代码数量是否大于阈值
            radical_buy_setting = BuyMoneyAndCountSetting().get_radical_buy_setting()
            MAX_COUNT = 4 if radical_buy_setting is None else radical_buy_setting[0]
            if len(deal_codes) >= MAX_COUNT:
@@ -823,6 +824,17 @@
                    except Exception as e:
                        logger_debug.exception(e)
                    # 判断当前时间段是否可以买入
                    mode = OrderBeginPosInfo.MODE_RADICAL
                    can_buy, money, msg = BuyMoneyUtil.get_buy_data(tool.get_now_time_str(), mode,
                                                                    DealAndDelegateWithBuyModeDataManager().get_deal_codes_info(
                                                                        mode),
                                                                    DealAndDelegateWithBuyModeDataManager().get_delegates_codes_info(
                                                                        mode))
                    if not can_buy:
                        async_log_util.info(logger_l2_radical_buy, f"当前时间段已不能扫入:{msg}")
                        return
                    # -----根据成交比例判断是否可买------
                    result_by_volume = radical_buy_strategy.limit_up_active_buy_deal(code, transaction_datas)
                    async_log_util.info(logger_l2_radical_buy, f"量买入结果判断:{code}, 结果:{result_by_volume} 板块:{buy_blocks}")
test/l2_trade_test.py
@@ -18,13 +18,15 @@
from l2.l2_transaction_data_manager import HuaXinSellOrderStatisticManager
from log_module import log, log_export, async_log_util
from trade.huaxin import huaxin_trade_api
from trade.radical_buy_data_manager import RedicalBuyDataManager
from utils import tool, init_data_util
from db import redis_manager_delegate as redis_manager
from l2 import l2_log, l2_data_manager, transaction_progress, l2_data_manager_new, l2_transaction_data_processor, \
    cancel_buy_strategy
from l2.transaction_progress import TradeBuyQueue
from third_data import kpl_util, kpl_data_manager, block_info
from third_data.code_plate_key_manager import LimitUpCodesPlateKeyManager, CodePlateKeyBuyManager
from third_data.code_plate_key_manager import LimitUpCodesPlateKeyManager, CodePlateKeyBuyManager, \
    RadicalBuyBlockManager
from third_data.kpl_data_manager import KPLDataManager
from trade import trade_data_manager, current_price_process_manager, l2_trade_util, trade_manager
import l2.l2_data_manager_new, l2.l2_data_manager, l2.l2_data_util, l2.cancel_buy_strategy
@@ -235,36 +237,52 @@
        l2.l2_data_util.local_today_datas[code] = total_datas
        l2.l2_data_util.load_num_operate_map(l2.l2_data_util.local_today_num_operate_map, code, total_datas, True)
    # @unittest.skip("跳过此单元测试")
    def test_block(self):
        code = "001376"
        # KPLCodeJXBlockManager().load_jx_blocks(code, 23.52,23.62,
        #                                        kpl_data_manager.KPLLimitUpDataRecordManager.get_current_reasons())
        #
        block_info.init_code(code)
        codes_str = "603778"
        codes = codes_str.split(",")  # ["002889", "300337", "001298", "002771"]
        kpl_data_manager.KPLLimitUpDataRecordManager.load_total_datas()
        latest_current_limit_up_records = kpl_data_manager.get_latest_current_limit_up_records()
        kpl_data_manager.KPLLimitUpDataRecordManager.save_record(tool.get_now_date_str(),
                                                                 kpl_data_manager.KPLDataManager.get_data(
                                                                     kpl_util.KPLDataType.LIMIT_UP))
        limit_up_data = kpl_data_manager.KPLLimitUpDataRecordManager.record_code_dict.get(code)
        if limit_up_data:
            limit_up_time = tool.to_time_str(limit_up_data[2])
        CodePlateKeyBuyManager.update_can_buy_blocks(code,
                                                     kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas,
                                                     kpl_data_manager.KPLLimitUpDataRecordManager.total_datas,
                                                     latest_current_limit_up_records,
                                                     block_info.get_before_blocks_dict(),
                                                     kpl_data_manager.KPLLimitUpDataRecordManager.get_current_limit_up_reason_codes_dict())
        can_buy_result = CodePlateKeyBuyManager.can_buy(code)
        print(can_buy_result)
        if can_buy_result:
            if can_buy_result[0]:
                blocks = ",".join([f"{x[0]}-{x[1] + 1}({x[2]}&{x[3] - x[2]})" for x in can_buy_result[0]])
                print(blocks)
        for code in codes:
            # KPLCodeJXBlockManager().load_jx_blocks(code, 23.52,23.62,
            #                                        kpl_data_manager.KPLLimitUpDataRecordManager.get_current_reasons())
            #
            block_info.init_code(code)
            # latest_current_limit_up_records = kpl_data_manager.get_latest_current_limit_up_records()
            init_data_util.re_set_price_pre(code, True)
            limit_up_data = kpl_data_manager.KPLLimitUpDataRecordManager.record_code_dict.get(code)
            if limit_up_data:
                limit_up_time = tool.to_time_str(limit_up_data[2])
            RadicalBuyBlockManager.set_current_limit_up_datas(
                kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas)
            # CodePlateKeyBuyManager.update_can_buy_blocks(code,
            #                                              kpl_data_manager.KPLLimitUpDataRecordManager.latest_origin_datas,
            #                                              kpl_data_manager.KPLLimitUpDataRecordManager.total_datas,
            #                                              latest_current_limit_up_records,
            #                                              block_info.get_before_blocks_dict(),
            #                                              kpl_data_manager.KPLLimitUpDataRecordManager.get_current_limit_up_reason_codes_dict())
            # can_buy_result = CodePlateKeyBuyManager.can_buy(code)
            # print(can_buy_result)
            # if can_buy_result:
            #     if can_buy_result[0]:
            #         blocks = ",".join([f"{x[0]}-{x[1] + 1}({x[2]}&{x[3] - x[2]})" for x in can_buy_result[0]])
            #         print(blocks)
            yesterday_codes = kpl_data_manager.get_yesterday_limit_up_codes()
            if yesterday_codes is None:
                yesterday_codes = set()
            result = RadicalBuyBlockManager.is_radical_buy(code, yesterday_codes)
            print(code, result)
            if result[0]:
                can_buy_result = RedicalBuyDataManager.can_buy(code)
                if can_buy_result[0]:
                    print("可以买", code, result)
                else:
                    print("不可以买", code, can_buy_result)
        # l2.l2_data_manager_new.L2TradeDataProcessor.can_buy_first(code, None)
test/test.py
@@ -1,3 +1,5 @@
import base64
from code_attribute import global_data_loader
from settings.trade_setting import TradeBlockBuyModeManager
from third_data.history_k_data_util import HistoryKDatasUtils
@@ -21,4 +23,4 @@
if __name__ == "__main__":
    print(1e7)
    print( base64.b64decode("WwogICAgWwogICAgICAgICLkuK3lrZflpLQiLAogICAgICAgIDIKICAgIF0KXQ==").decode('utf-8'))
test/test_block.py
@@ -1,6 +1,12 @@
from third_data import kpl_data_manager, kpl_util
from third_data.code_plate_key_manager import CodesHisReasonAndBlocksManager
import copy
import time
from db import redis_manager
from db.redis_manager_delegate import RedisUtils
from third_data import kpl_data_manager, kpl_util, kpl_api
from third_data.code_plate_key_manager import CodesHisReasonAndBlocksManager, KPLCodeJXBlockManager
from third_data.kpl_limit_up_data_manager import LatestLimitUpBlockManager, CodeLimitUpSequenceManager
from third_data.third_blocks_manager import BlockMapManager, CodeThirdBlocksManager, SOURCE_TYPE_KPL
from utils import tool
from utils.kpl_data_db_util import KPLLimitUpDataUtil
@@ -25,11 +31,17 @@
if __name__ == "__main__":
    code = "000546"
    k3 = CodesHisReasonAndBlocksManager().get_history_blocks(code)
    print(k3)
    k3 = CodesHisReasonAndBlocksManager().get_history_blocks(code)
    print(k3)
    limit_up_timestamp = time.time()
    current_before_codes_info = [("000333", time.time())]
    if tool.trade_time_sub(tool.timestamp_format(limit_up_timestamp, '%H:%M:%S'),
                           tool.timestamp_format(current_before_codes_info[-1][1], '%H:%M:%S')) >= 10 * 60:
        print("123123")
    # code = "603825"
    # k3 = CodesHisReasonAndBlocksManager().get_history_blocks(code)
    # print(k3)
    # k3 = CodesHisReasonAndBlocksManager().get_history_blocks(code)
    # print(k3)
    # print(KPLLimitUpDataUtil.get_latest_block_infos(code="000561"))
    # print(code_plate_key_manager.ForbiddenBlockManager().get_blocks())
    # code_plate_key_manager.ForbiddenBlockManager().add("测试2")
test/test_k_datas.py
@@ -1,12 +1,21 @@
from third_data import history_k_data_manager
from third_data.history_k_data_manager import HistoryKDataManager
from third_data.history_k_data_util import JueJinApi
from utils import tool, init_data_util
if __name__ == '__main__':
    code = "603960"
    day = tool.get_now_date_str()
    datas = init_data_util.get_volumns_by_code(code, 150)
    HistoryKDataManager().save_history_bars(code, day, datas, force=True)
    print(HistoryKDataManager().get_history_bars(code, day))
    print(HistoryKDataManager().get_pre_close(code, day))
    history_k_data_manager.re_set_price_pres([code])
    # code = "603960"
    # day = tool.get_now_date_str()
    # datas = init_data_util.get_volumns_by_code(code, 150)
    # HistoryKDataManager().save_history_bars(code, day, datas, force=True)
    # print(HistoryKDataManager().get_history_bars(code, day))
    # print(HistoryKDataManager().get_pre_close(code, day))
    # history_k_data_manager.re_set_price_pres([code])
    # volumes_data = init_data_util.get_volumns_by_code("600211", 150)
    # for volume in volumes_data:
    #     print(volume)
    code = "000333"
    now_day = "2024-10-10"
    results = JueJinApi.get_history_instruments(JueJinApi.get_juejin_code_list_with_prefix([code]),
                                                tool.date_sub(now_day, 30), tool.date_sub(now_day, 1))
    print(results)
third_data/code_plate_key_manager.py
@@ -126,6 +126,8 @@
                        async_log_util.info(logger_kpl_block_can_buy,
                                            f"{code}:获取到精选板块-{blocks}  耗时:{int(time.time() - start_time)}s")
                        self.save_jx_blocks(code, blocks, current_limit_up_blocks)
                        # 跟随精选板块一起更新
                        self.load_jx_blocks_radical(code)
                    else:
                        # 还没涨停的需要更新精选板块 更新精选板块
                        if abs(float(buy_1_price) - float(limit_up_price)) >= 0.001:
@@ -146,6 +148,8 @@
                                async_log_util.info(logger_kpl_block_can_buy,
                                                    f"{code}:获取到精选板块(更新)-{blocks}  耗时:{int(time.time() - start_time)}s")
                                self.save_jx_blocks(code, blocks, current_limit_up_blocks)
                                # 跟随精选板块一起更新
                                self.load_jx_blocks_radical(code)
                elif price_rate > 0.03:
                    # 添加备用板块
                    if not self.get_jx_blocks_cache(code, by=True):
@@ -154,6 +158,8 @@
                        self.save_jx_blocks(code, blocks, current_limit_up_blocks, by=True)
                        async_log_util.info(logger_kpl_block_can_buy,
                                            f"{code}:获取到精选板块(备用)-{blocks}  耗时:{int(time.time() - start_time)}s")
                        # 跟随精选板块一起更新
                        self.load_jx_blocks_radical(code)
                if price_rate > 0.03:
                    if not self.__code_blocks_for_radical_buy.get(code):
@@ -1459,7 +1465,7 @@
        if blocks is None:
            blocks = set()
        # 将获取涨停原因与涨停推荐
        keys = TargetCodePlateKeyManager().get_plate_keys(code, contains_today=False)
        keys = TargetCodePlateKeyManager().get_plate_keys(code, contains_today=True)
        if keys and keys[0]:
            blocks |= set(keys[0])
        return blocks
third_data/third_blocks_manager.py
@@ -212,9 +212,9 @@
        for block in blocks:
            if block.endswith("概念"):
                block = block[:-2]
            # b = self.get_map_blocks_cache(block)
            # if b:
            #     fbs |= b
            b = self.get_map_blocks_cache(block)
            if b:
                fbs |= b
            if block in invalid_blocks:
                continue
            fbs.add(block)
@@ -287,17 +287,21 @@
                pass
if __name__ == '__main__':
def __add_invlaid_blocks():
    blocks_str = """
昨日连板
昨日连板_含一字
昨日涨停
昨日涨停_含一字
    """
    昨日连板
    昨日连板_含一字
    昨日涨停
    昨日涨停_含一字
        """
    blocks = set()
    for x in blocks_str.split("\n"):
        if x.strip():
            blocks.add(x.strip())
    print(len(blocks))
    print(len(InvalidBlockManager().get_invalid_blocks()))
    InvalidBlockManager().set_incalid_blocks(blocks)
if __name__ == '__main__':
    pass
trade/buy_money_count_setting.py
@@ -192,7 +192,7 @@
            if start_time_int < int(d[1].replace(":", "")) <= end_time_int:
                codes.add(d[0])
        if len(codes) >= end_info[2]:
            return True, constant.BUY_MONEY_PER_CODE, f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})超过{end_info[2]}个,按照默认金额委托"
            return False, constant.BUY_MONEY_PER_CODE, f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})超过{end_info[2]}个,已经不能委托"
        else:
            return True, end_info[
                1], f"时间段:{start_time}-{end_info[0]} 已成交/委托数量({codes})没有超过{end_info[2]}个,委托金额为:{end_info[1]}"
trade/trade_result_manager.py
@@ -106,6 +106,10 @@
    if GreenListCodeManager().is_in_cache(code):
        MustBuyCodesManager().add_code(code)
    # 如果是扫入下单,下单之后就加红
    if order_begin_pos.mode == OrderBeginPosInfo.MODE_RADICAL:
        MustBuyCodesManager().add_code(code)
    # 清除下单信号
    place_order_single_data_manager.L2TradeSingleDataManager.clear_data(code)