From bba825d6ddfaca81c18890a5c3d3a1f0a346fd42 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期三, 30 七月 2025 17:12:47 +0800 Subject: [PATCH] 定时K线更新/L1目标代码更新 --- output/code_info_output.py | 169 +++++++++++++++++++++++++++++++++++++++++-------------- 1 files changed, 125 insertions(+), 44 deletions(-) diff --git a/output/code_info_output.py b/output/code_info_output.py index 3eecfae..c4b5844 100644 --- a/output/code_info_output.py +++ b/output/code_info_output.py @@ -14,14 +14,17 @@ code_nature_analyse from l2.l2_data_manager import OrderBeginPosInfo from l2.l2_data_util import L2DataUtil +from third_data.code_plate_key_manager import KPLCodeJXBlockManager +from third_data.kpl_data_constant import LimitUpCodesBlockRecordManager +from trade.buy_radical.block_special_codes_manager import BlockSpecialCodesManager from utils import global_util, tool from log_module import log, log_export from l2 import l2_data_manager, l2_data_util, transaction_progress, l2_data_manager_new, code_price_manager -from l2.cancel_buy_strategy import HourCancelBigNumComputer +from cancel_strategy.s_l_h_cancel_strategy import HourCancelBigNumComputer import l2.l2_data_manager_new from third_data import kpl_data_manager, kpl_api from third_data.kpl_data_manager import KPLLimitUpDataRecordManager -from trade import l2_trade_factor, trade_manager, l2_trade_util, trade_record_log_util +from trade import l2_trade_factor, trade_manager, l2_trade_util, trade_record_log_util, trade_constant from trade.l2_trade_factor import L2TradeFactorUtil base_output_content = {} @@ -31,7 +34,6 @@ def __get_base_html_content(): - print("璺緞", sys.path[0]) if base_output_content.get('css') is None: __base_html_content = "" with open("./output/css/style.css", mode='r') as f: @@ -79,21 +81,21 @@ code_extra_infos.append("鏆備笉涔�") params["code"] = code params["code_name"] = f"{gpcode_manager.get_code_name(code)} {code} 锛坽','.join(code_extra_infos)}锛�" - total_datas = l2_data_util.local_today_datas.get(code) if total_datas is None: - l2_data_util.load_l2_data(code) - total_datas = l2_data_util.local_today_datas.get(code) + total_datas = [] + # l2_data_util.load_l2_data(code) + # total_datas = l2_data_util.local_today_datas.get(code) if is_target_code: limit_up_price = gpcode_manager.get_limit_up_price(code) limit_up_time = limit_up_time_manager.LimitUpTimeManager().get_limit_up_time_cache(code) - volume_rate, volume_info = code_volumn_manager.get_volume_rate(code, with_info=True) + volume_rate, volume_info = code_volumn_manager.CodeVolumeManager().get_volume_rate(code, with_info=True) ################################涔板墠璇勫垎################################ # zyltgb, limit_price, bidding, k_form, code_nature, hot_block, volume_rate, limit_up_time, # deal_big_money - log.logger_debug.info(f"鏉垮潡鐑害鑰楁椂锛歿time.time() - __start_time}") + # log.logger_debug.info(f"鏉垮潡鐑害鑰楁椂锛歿time.time() - __start_time}") __start_time = time.time() ###############################涓嬪崟淇℃伅############################### @@ -101,25 +103,31 @@ # 鑾峰彇涔板叆鎰忔効 __L2PlaceOrderParamsManager = l2_trade_factor.L2PlaceOrderParamsManager(code, True, volume_rate, - code_volumn_manager.get_volume_rate_index( + code_volumn_manager.CodeVolumeManager().get_volume_rate_index( volume_rate), None) # 鏄惁鍙互涔板叆鐨勪俊鎭� try: - can_buy_info = l2.l2_data_manager_new.L2TradeDataProcessor.can_buy_first(code, limit_up_price) + can_buy_info = l2.l2_data_manager_new.L2TradeDataProcessor.can_buy_first_new(code, limit_up_price) params["trade_data"]["can_buy_info"] = can_buy_info except: pass # 鑾峰彇閲忓弬鑰冩棩鏈� try: - volume_refer_date = code_volumn_manager.get_volume_refer_date(code) + volume_refer_date, volume_refer_date_distance = code_volumn_manager.CodeVolumeManager().get_volume_refer_date( + code) params["trade_data"]["volume_refer_date"] = volume_refer_date except: pass + # 鑾峰彇鏄惁 + k_format = code_nature_analyse.CodeNatureRecordManager().get_k_format_cache(code) + if k_format: + params["trade_data"]["special_info"] = k_format[8] + __base_L2PlaceOrderParamsManager = l2_trade_factor.L2PlaceOrderParamsManager(code, False, volume_rate, - code_volumn_manager.get_volume_rate_index( + code_volumn_manager.CodeVolumeManager().get_volume_rate_index( volume_rate), None) if -1 < __L2PlaceOrderParamsManager.score_index < 3: @@ -201,25 +209,25 @@ data['val']['price']) * 100 / 10000, 1)} params["trade_data"]["trade_state"] = {} trade_state = trade_manager.CodesTradeStateManager().get_trade_state_cache(code) - if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED: + if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED: params["trade_data"]["trade_state"]["order"] = True params["trade_data"]["trade_state"]["desc"] = "宸蹭笅鍗�" else: params["trade_data"]["trade_state"]["order"] = False - if trade_state == trade_manager.TRADE_STATE_NOT_TRADE: + if trade_state == trade_constant.TRADE_STATE_NOT_TRADE: params["trade_data"]["trade_state"]["desc"] = "鏈氦鏄�" - elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_ING: + elif trade_state == trade_constant.TRADE_STATE_BUY_CANCEL_ING: params["trade_data"]["trade_state"]["desc"] = "鎾ゅ崟涓�" - elif trade_state == trade_manager.TRADE_STATE_BUY_CANCEL_SUCCESS: + elif trade_state == trade_constant.TRADE_STATE_BUY_CANCEL_SUCCESS: params["trade_data"]["trade_state"]["desc"] = "鎾ゅ崟鎴愬姛" - elif trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: + elif trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS: params["trade_data"]["trade_state"]["desc"] = "宸叉垚浜�" - log.logger_debug.info(f"涓嬪崟淇℃伅鑰楁椂锛歿time.time() - __start_time}") + # log.logger_debug.info(f"涓嬪崟淇℃伅鑰楁椂锛歿time.time() - __start_time}") __start_time = time.time() # H鎾ょ洃鍚寖鍥� - if trade_state == trade_manager.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_manager.TRADE_STATE_BUY_DELEGATED or trade_state == trade_manager.TRADE_STATE_BUY_SUCCESS: + if trade_state == trade_constant.TRADE_STATE_BUY_PLACE_ORDER or trade_state == trade_constant.TRADE_STATE_BUY_DELEGATED or trade_state == trade_constant.TRADE_STATE_BUY_SUCCESS: hcancel_datas_dict, cancel_indexes_set = HourCancelBigNumComputer().get_watch_index_dict(code) # 鏍规嵁鏃ュ織璇诲彇瀹炴椂鐨勮绠楁暟鎹� h_cancel_latest_compute_info = log_export.get_h_cancel_compute_info(code) @@ -237,7 +245,7 @@ params["trade_data"]["h_cancel"]["datas"].append( (val["time"], val["num"], money_desc(val["num"] * float(val["price"]) * 100), (1 if canceled else 0))) - log.logger_debug.info(f"H鎾ょ洃鍚寖鍥磋�楁椂锛歿time.time() - __start_time}") + # log.logger_debug.info(f"H鎾ょ洃鍚寖鍥磋�楁椂锛歿time.time() - __start_time}") __start_time = time.time() ##############################涓诲姩涔帮紝琚姩涔�################################## @@ -254,13 +262,13 @@ # {"name": d[1], "code": d[0], "score": d[2], "limit_up": d[3], "open_limit_up": d[4]}) params["passive_buy_codes"] = params["passive_buy_codes"] - log.logger_debug.info(f"涓诲姩涔帮紝琚姩涔拌�楁椂锛歿time.time() - __start_time}") + # log.logger_debug.info(f"涓诲姩涔帮紝琚姩涔拌�楁椂锛歿time.time() - __start_time}") __start_time = time.time() - trade_info = __load_trade_record(code, total_datas) + trade_info = load_trade_record(code, total_datas) params["trade_record"] = {"open_limit_up": trade_info[0], "records": trade_info[2]} - log.logger_debug.info(f"璇诲彇浜ゆ槗璁板綍鑰楁椂锛歿time.time() - __start_time}") + # log.logger_debug.info(f"璇诲彇浜ゆ槗璁板綍鑰楁椂锛歿time.time() - __start_time}") __start_time = time.time() ##############################寮�鐩樺暒鐩稿叧淇℃伅################################## @@ -269,17 +277,24 @@ "industry": format_plate_output(industry)} # 鑾峰彇寮�鐩樺暒鏉垮潡 plate_info = None - if code not in kpl_block_info_dict: - plate_info = kpl_api.getStockIDPlate(code) - else: - plate_info = kpl_block_info_dict.get(code) + jingxuan_block_info = KPLCodeJXBlockManager().get_jx_blocks_cache(code) + if not jingxuan_block_info: + jingxuan_block_info = KPLCodeJXBlockManager().get_jx_blocks_cache(code, by=True) + if jingxuan_block_info: + jingxuan_blocks = jingxuan_block_info[0] + plate_info = [(0, x, 0) for x in jingxuan_blocks] # set([x[1] for x in jingxuan_blocks]) + if not plate_info: + if code not in kpl_block_info_dict: + plate_info = kpl_api.getStockIDPlate(code) + else: + plate_info = kpl_block_info_dict.get(code) if plate_info: kpl_block_info_dict[code] = plate_info plate_info.sort(key=lambda x: x[2]) plate_info.reverse() params["kpl_code_info"]["plate"] = [(k[0], k[1], k[2], format_plate_output(k[1])[1]) for k in plate_info] - log.logger_debug.info(f"寮�鐩樺暒鏉垮潡鑰楁椂锛歿time.time() - __start_time}") + # log.logger_debug.info(f"寮�鐩樺暒鏉垮潡鑰楁椂锛歿time.time() - __start_time}") __start_time = time.time() # 鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹�,(娑ㄥ仠鍘熷洜,鏃ユ湡,鏉垮潡) @@ -287,6 +302,13 @@ if code_records: code_records = [(format_plate_output(k[0]), k[1], [format_plate_output(k1) for k1 in k[2].split("銆�")]) for k in code_records] + # 淇敼鍘嗗彶 + # code_records = LimitUpCodesBlockRecordManager().get_radical_buy_blocks_origin_data(code) + # if code_records: + # code_records = [(f"{x[0]}x{x[1]}", x[2], '') for x in code_records] + # else: + # code_records = [] + params["kpl_code_info"]["code_records"] = code_records if not KPLLimitUpDataRecordManager.total_datas: @@ -299,12 +321,58 @@ params["kpl_code_info"]["today"] = (format_plate_output(d[2]), d[1], plates) break - log.logger_debug.info(f"鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹�楁椂锛歿time.time() - __start_time}") + # log.logger_debug.info(f"鑾峰彇浠g爜鐨勫巻鍙叉定鍋滄暟鎹�楁椂锛歿time.time() - __start_time}") __start_time = time.time() return params -def __load_trade_record(code, total_datas): +# 鑾峰彇寮�鐩樺暒鏉垮潡淇℃伅 +def get_kpl_block_info(code): + def format_plate_output(_plat): + return _plat, '' + + ##############################寮�鐩樺暒鐩稿叧淇℃伅################################## + industry = global_util.code_industry_map.get(code) + kpl_code_info = { + "industry": format_plate_output(industry)} + # 鑾峰彇寮�鐩樺暒鏉垮潡 + plate_info = None + jingxuan_block_info = KPLCodeJXBlockManager().get_jx_blocks_cache(code) + if not jingxuan_block_info: + jingxuan_block_info = KPLCodeJXBlockManager().get_jx_blocks_cache(code, by=True) + if jingxuan_block_info: + jingxuan_blocks = jingxuan_block_info[0] + plate_info = [(0, x, 0) for x in jingxuan_blocks] # set([x[1] for x in jingxuan_blocks]) + if not plate_info: + if code not in kpl_block_info_dict: + plate_info = kpl_api.getStockIDPlate(code) + else: + plate_info = kpl_block_info_dict.get(code) + if plate_info: + kpl_block_info_dict[code] = plate_info + plate_info.sort(key=lambda x: x[2]) + plate_info.reverse() + kpl_code_info["plate"] = [(k[0], k[1], k[2], format_plate_output(k[1])[1]) for k in plate_info] + + code_records = KPLLimitUpDataRecordManager.get_latest_infos(code, 4, False)[:2] + if code_records: + code_records = [(format_plate_output(k[0]), k[1], [format_plate_output(k1) for k1 in k[2].split("銆�")]) for k in + code_records] + kpl_code_info["code_records"] = code_records + + if not KPLLimitUpDataRecordManager.total_datas: + KPLLimitUpDataRecordManager.load_total_datas() + for d in KPLLimitUpDataRecordManager.total_datas: + if d[3] == code: + # 鑾峰彇浠婃棩 + plates = d[6].split("銆�") + plates = [format_plate_output(p) for p in plates] + kpl_code_info["today"] = (format_plate_output(d[2]), d[1], plates) + break + return kpl_code_info + + +def load_trade_record(code, total_datas, date=tool.get_now_date_str()): def format_l2_data(item): return f"{item['val']['time']}#{item['val']['num']}鎵�#{round(item['val']['num'] * float(item['val']['price']) * 100 / 10000, 1)}涓�" @@ -318,7 +386,7 @@ break_time = limit_up_info[1] records = [] try: - records = log_export.load_trade_recod(code) + records = log_export.load_trade_recod(code, date=date) except: pass records_new = [] @@ -350,23 +418,35 @@ f"鐙嫍", None)) extra_datas = [] - if data['big_num_indexes']: + if data.get('big_num_indexes'): big_num_desc = [] for i in data['big_num_indexes']: big_num_desc.append(format_l2_data(total_datas[i])) extra_datas.append(f"鍖呭惈澶у崟锛歿' & '.join(big_num_desc)}") - extra_datas.append(f"M鍊硷細{money_desc(data['m_val'])}") - extra_datas.append(f"瀹夊叏绗旀暟锛歿data['safe_count']}") + if data.get('m_val'): + extra_datas.append(f"M鍊硷細{money_desc(data['m_val'])}") + if data.get('safe_count'): + extra_datas.append(f"瀹夊叏绗旀暟锛歿data['safe_count']}") + extra_datas.append(f"鎬诲崠棰濓細{data.get('sell_info')}") records_new_data.append((time_, "", "-------------------------", [])) mode = data.get('mode') - if mode == OrderBeginPosInfo.MODE_FAST: + mode_desc = data.get('mode_desc') + if mode == OrderBeginPosInfo.MODE_ACTIVE: + records_new_data.append((time_, "绉瀬涓嬪崟", + 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)) + elif mode == OrderBeginPosInfo.MODE_RADICAL: + records_new_data.append((time_, "鎵叆涓嬪崟", + 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']])}銆�", + records_new_data.append((time_, "甯歌涓嬪崟", + mode_desc, extra_datas)) elif type == trade_record_log_util.TYPE_REAL_PLACE_ORDER_POSITION: _datas = [] @@ -414,6 +494,8 @@ elif type == trade_record_log_util.TYPE_CANCEL: load_cancel_watch_index(latest_cancel_watch_index_dict) records_new_data.append((time_, "鎾ゅ崟", f"鍘熷洜锛歿data['msg']}", [])) + elif type == trade_record_log_util.TYPE_ACTION: + records_new_data.append((time_, data['type'], f"{data['msg']}", [])) load_cancel_watch_index(latest_cancel_watch_index_dict) records_new_data.sort(key=lambda x: x[0]) if records_new_data: @@ -427,11 +509,11 @@ # 杩斿洖鍐呭[锛堢被鍨�,buy_single_index,indexes锛塢 -def load_trade_record_cancel_watch_indexes(code, cancel_type=None): +def load_trade_record_cancel_watch_indexes(code, cancel_type=None, date=tool.get_now_date_str()): fresults = [] records = [] try: - records = log_export.load_trade_recod(code) + records = log_export.load_trade_recod(code, date=date) except: pass if records: @@ -449,7 +531,6 @@ if __name__ == '__main__': - code = '600713' - l2_data_util.load_l2_data(code) - fresults = __load_trade_record(code, l2_data_util.local_today_datas.get(code)) - print(fresults) + code = '603616' + records = load_trade_record_cancel_watch_indexes(code, + trade_record_log_util.CancelWatchIndexesInfo.CANCEL_TYPE_H) -- Gitblit v1.8.0