Administrator
3 天以前 5f034f7a6733b03e0d08d7920ec6de1b1517c421
strategy/strategy_variable_factory.py
@@ -7,7 +7,7 @@
import re
import constant
from code_attribute import global_data_loader
from code_attribute import global_data_loader, gpcode_manager
from db import mysql_data_delegate
from strategy.data_analyzer import KTickLineAnalyzer, KPLLimitUpDataAnalyzer, K60SLineAnalyzer
from strategy.strategy_variable import StockVariables
@@ -22,7 +22,7 @@
    数据加载器类,用于集中管理策略变量所需的各类数据加载逻辑
    """
    def __init__(self, now_day, cache_path="D:/datas"):
    def __init__(self, now_day, cache_path=f"{constant.get_path_prefix()}/datas"):
        """
        初始化数据加载器
        :param now_day: 当前日期,格式为"2025-01-01"
@@ -203,7 +203,7 @@
    def load_target_plate_and_codes(self):
        """
        加载目标板块与对应的代码:
        从最近120个交易日的真正涨停数据中
        从最近60个交易日的真正涨停数据中
        @return: {"板块":[代码]}
        """
        end_date = self.trade_days[:60][-1]
@@ -234,8 +234,9 @@
            if results:
                results = [x for x in results if
                           (tool.is_can_buy_code(x[0]) and x[0] in valid_codes and x[0] not in exclude_codes)]
                # 取前1/3且涨停数是前10
                max_count = len(results) // 3 if len(results) % 3 == 0 else len(results) // 3 + 1
                results = results[:max_count]
                # results = results[:max_count]
                # 取前10
                results = results[:10]
                codes = [x[0] for x in results]
@@ -601,6 +602,12 @@
            kline_data_60s = kline_data_60s_dict.get(trade_days[0])
            fdata = K60SLineAnalyzer.get_close_price_of_max_volume(kline_data_60s)
            instance.__setattr__(f"昨日分时最高量价", fdata)
        if KTickLineAnalyzer.is_too_high_and_not_relase_volume(kline_data_1d):
            instance.涨得高未放量 = True
        else:
            instance.涨得高未放量 = False
        return instance
@@ -635,8 +642,39 @@
            print(code, code_blocks[code])
def __load_target_codes_v1():
    """
    50亿以下的
    @return:
    """
    def get_zylt(code):
        zylt_volume_map = global_util.zylt_volume_map
        last_trade_day = __DataLoader.trade_days[0]
        volume = zylt_volume_map.get(code)
        # 今日涨停价要突破昨日最高价
        k_bars = HistoryKDataManager().get_history_bars(code, last_trade_day)
        return k_bars[0]["close"] * volume * tool.get_limit_up_rate(code)
    __DataLoader = DataLoader('2025-06-13')
    global_data_loader.load_zyltgb_volume_from_db()
    results = __DataLoader.load_target_plate_and_codes()
    # for k in results:
    #     print(k, results[k])
    plates = ["天然气", "军工"]
    print("==========新题材=======")
    for p in plates:
        codes = [x for x in results.get(p)]  # if get_zylt(x) < 31e8
        print("======", p)
        for code in codes:
            print("\t\t", code, gpcode_manager.CodesNameManager().get_code_name(code))
if __name__ == "__main__":
    __DataLoader = DataLoader("2025-06-09")
    # __load_target_codes_v1()
    __DataLoader = DataLoader("2025-06-04")
    # __test_jx_blocks(__DataLoader)
    # instance = StockVariables()
@@ -652,7 +690,9 @@
    # print(result_dict["301279"])
    results = __DataLoader.load_target_plate_and_codes()
    plates = ["医药"]
    # for k in results:
    #     print(k, results[k])
    plates = ["锂电池"]
    print("==========新题材=======")
    for p in plates:
        print(p, results.get(p))