| | |
| | | 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 |
| | |
| | | def load_target_plate_and_codes(self): |
| | | """ |
| | | 加载目标板块与对应的代码: |
| | | 从最近120个交易日的真正涨停数据中 |
| | | 从最近60个交易日的真正涨停数据中 |
| | | @return: {"板块":[代码]} |
| | | """ |
| | | end_date = self.trade_days[:60][-1] |
| | |
| | | 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] |
| | |
| | | one_year_ago = (pre_date - datetime.timedelta(days=365)).strftime('%Y-%m-%d') |
| | | pre_date = pre_date.strftime('%Y-%m-%d') |
| | | |
| | | trade_days = self.jueJinLocalApi.get_trading_dates(one_year_ago, pre_date) |
| | | if constant.is_windows(): |
| | | trade_days = self.jueJinLocalApi.get_trading_dates(one_year_ago, pre_date) |
| | | else: |
| | | trade_days = HistoryKDatasUtils.get_trading_dates(one_year_ago, pre_date) |
| | | trade_days.sort(reverse=True) |
| | | trade_days = trade_days[:120] |
| | | return trade_days |
| | |
| | | 加载交易日列表,now_day前120个交易日 |
| | | :return: 交易日列表 |
| | | """ |
| | | next_trade_day = self.jueJinLocalApi.get_next_trading_date(self.now_day) |
| | | if constant.is_windows(): |
| | | next_trade_day = self.jueJinLocalApi.get_next_trading_date(self.now_day) |
| | | else: |
| | | next_trade_day = HistoryKDatasUtils.get_next_trading_date(self.now_day) |
| | | return next_trade_day |
| | | |
| | | def load_target_codes(self): |
| | |
| | | """ |
| | | datas = self.load_all_codes_of_plates(is_for_buy=True) |
| | | fdata = {} |
| | | if not datas: |
| | | return fdata |
| | | for plate_code in datas: |
| | | plate_name = datas[plate_code][0] |
| | | codes_info = datas[plate_code][1] |
| | |
| | | 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-05") |
| | | |
| | | # __load_target_codes_v1() |
| | | |
| | | __DataLoader = DataLoader("2025-06-17") |
| | | # __test_jx_blocks(__DataLoader) |
| | | |
| | | # instance = StockVariables() |
| | |
| | | # 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)) |