From aa5800658e452c0aa8c9a822395acb989e848f9f Mon Sep 17 00:00:00 2001 From: admin <admin@example.com> Date: 星期四, 31 七月 2025 13:14:24 +0800 Subject: [PATCH] 修正 昨日K线涨停 误差 的函数修改BUG --- main.py | 129 +++++++++++++++++++++++++++++++++++------- 1 files changed, 107 insertions(+), 22 deletions(-) diff --git a/main.py b/main.py index 0b95ef7..e2ac480 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,7 @@ import multiprocessing import threading import time +import schedule import constant # 寮曞叆鎺橀噾妗ユAPI @@ -22,6 +23,9 @@ selling_strategy from huaxin_client import l2_market_client, l2_client, trade_client from log_module import async_log_util, log +from strategy.order_methods import TodayBuyCodeManager +from strategy.trade_setting import BuyMoneyPerCodeManager, OpeningQuantityManager +from strategy.trading_dates_manager import TradingDatesManager from trade import huaxin_trade_data_update, huaxin_trade_api from utils import hx_qc_value_util, huaxin_util, juejin_api, tool @@ -49,9 +53,15 @@ 鏃犻渶鎺橀噾鑰冭檻鐨勭嚎绋嬫垨杩涚▼鏂瑰紡瀹炵幇 ''' # 鍒濆鍖栬处鎴蜂粨浣嶇鐞嗘暟鎹� - account_management.finance_management() + try: + account_management.finance_management() + except: + pass # 鍒濆鍖栬处鎴蜂粨浣嶇鐞嗘暟鎹� - account_management.position_management() + try: + account_management.position_management() + except: + pass # 鍒濆鍖�.瀹炰緥鍖栫紦瀛樹腑鐨勫叏灞�鏁版嵁 data_cache.DataCache() # 璇诲彇鏈湴K绾挎暟鎹� 骞舵洿鏂板埌data_cache @@ -67,19 +77,50 @@ local_data_management.read_local_K_line_data() # 璇诲彇鏈湴涓偂鎵�灞炴澘鍧楁暟鎹� 骞舵洿鏂板埌data_cache local_data_management.read_local_all_stocks_plate_data() + # 鍒濆鍖栨媺鍙栧綋鏃ヤ拱鍏ヤ唬鐮� + TodayBuyCodeManager() + # 寮�浠撻噾棰濆垵濮嬪寲 + BuyMoneyPerCodeManager() + # 寮�浠撴暟閲� + OpeningQuantityManager() - # todo 2025-03-25 娴嬭瘯鏃犺鍗冲彲鍒犻櫎涓嬮儴娉ㄩ噴 - # # 鍏堜娇鐢╦son.load()鐩存帴浠庢枃浠朵腑璇诲彇銆愬凡缁忓瓨鍌ㄥ湪鏈湴鐨凨绾挎寚鏍囧睘鎬у瓧鍏搞�戝苟瑙f瀽JSON鏁版嵁 - # if os.path.exists(constant.K_BARS_PATH): - # with open(constant.K_BARS_PATH, 'r', encoding='utf-8') as f: - # data_cache.all_stocks_all_K_line_property_dict = json.load(f) - # print( - # f"data_cache.all_stocks_all_K_line_property_dict鐨勪釜鏁�==={len(data_cache.all_stocks_all_K_line_property_dict)}") - # # 鑾峰彇鐩爣鏍囩殑K绾�---鍒濆鍖� - # all_K_line.main_index_k_line_history.init(data_cache.DataCache().today_date, data_cache.DataCache().next_trading_day, data_cache.DataCache().main_index_stocks) - # # 鐩存帴璋冪敤涓昏鎸囨暟K绾垮啓鍏ユ湰鍦版枃浠� - # all_K_line.main_index_k_line_dict_write() +def __run_pending(): + def update_k_lines(): + logger_debug.info("寮�濮嬫洿鏂癒绾�") + all_K_line.all_stocks_all_k_line_dict_write() + local_data_management.read_local_K_line_data() + logger_debug.info("缁撴潫鏇存柊K绾�") + + def update_target_codes(): + data_cache.target_codes_manager.update_today_codes_info() + time.sleep(2) + data_cache.target_codes_manager.load_data() + + def update_all_stocks_plate(): + plate_strength_analysis.get_all_stocks_plate_dict(data_cache.DataCache().filtered_stocks) + local_data_management.read_local_all_stocks_plate_data() + + def update_trading_dates(): + dates = TradingDatesManager().update_trading_dates() + TradingDatesManager().load_data() + + schedule.every().day.at("17:00:00").do(lambda: threading.Thread(target=update_k_lines, daemon=True).start()) + schedule.every().day.at("09:05:00").do(lambda: threading.Thread(target=update_k_lines, daemon=True).start()) + schedule.every().day.at("09:05:00").do(lambda: huaxin_trade_data_update.add_money_list()) + schedule.every().day.at("09:05:00").do(lambda: huaxin_trade_data_update.add_position_list()) + schedule.every().day.at("17:10:00").do(lambda: threading.Thread(target=update_target_codes, daemon=True).start()) + schedule.every().day.at("17:00:00").do( + lambda: threading.Thread(target=update_all_stocks_plate, daemon=True).start()) + schedule.every().day.at("17:00:00").do(lambda: threading.Thread(target=update_trading_dates, daemon=True).start()) + + while True: + try: + schedule.run_pending() + except: + pass + finally: + time.sleep(1) # 绗竴姝ワ細鍒濆鍖朿ontext鍑芥暟锛屽苟寮�鍚幏鍙栧疄鏃舵暟鎹殑绾跨▼ @@ -95,6 +136,8 @@ # print(f"all_stocks_all_K_line_property_dict== {type(data_cache.all_stocks_all_K_line_property_dict)}") # 鑾峰彇瀹炴椂澶х洏鎸囨暟琛屾儏绾跨▼ threading.Thread(target=lambda: instant_time_market.index_market_current(), daemon=True).start() + # 瀹氭椂浠诲姟 + threading.Thread(target=lambda: __run_pending(), daemon=True).start() # instant_time_market.index_market_trend() @@ -116,10 +159,15 @@ daemon=True).start() # # 寮�鐩樺暒鐨勬澘鍧楀己搴︿笅鐨勪釜鑲″己搴﹀洖璋冨嚱鏁� - def get_market_sift_plate_its_stock_power_process(market_sift_plate_stock_dict): + def get_market_sift_plate_its_stock_power_process(market_sift_plate_info): # print(f"鍥炶皟鎴愬姛===绮鹃�夋澘鍧楄偂绁ㄥ己搴︽暟鎹洿鏂�==={market_sift_plate_stock_dict}") # logger_kpl_jingxuan_in.info(f"{market_sift_plate_stock_dict}") - data_cache.market_sift_plate_stock_dict = market_sift_plate_stock_dict + if market_sift_plate_info is None: + return + market_sift_plate_stock_dict, market_sift_plates = market_sift_plate_info[0], market_sift_plate_info[1] + if market_sift_plate_stock_dict: + data_cache.market_sift_plate_stock_dict = market_sift_plate_stock_dict + data_cache.market_sift_plates = market_sift_plates # 鏉垮潡寮哄害涓嬩釜鑲″己搴︾嚎绋� threading.Thread(target=plate_strength_analysis.get_market_sift_plate_its_stock_power_process, @@ -160,7 +208,8 @@ :return: """ if datas: - logger_debug.debug(f"{code} - L2閫愮瑪鎴愪氦涓婃姤锛歿len(datas)}") + start_time = time.time() + # logger_debug.debug(f"{code} - L2閫愮瑪鎴愪氦涓婃姤锛歿len(datas)}") price, time_str = datas[-1][1], huaxin_util.convert_time(datas[-1][3]) try: # 鑾峰彇鏈�杩戠殑鎴愪氦浠� @@ -175,7 +224,7 @@ limit_up_price = tool.get_limit_up_price(code, self.__pre_close_price_dict[code]) if code in self.__last_price_dict: if abs(limit_up_price - self.__last_price_dict[code]) < 0.0001 < abs(limit_up_price - price): - # TODO 澶勭悊鐐告澘閫昏緫 + # 澶勭悊鐐告澘閫昏緫 # 鐩戝惉浜嗙偢鏉夸簡瑕佸仛鐨勫嚱鏁� try: selling_strategy.explosion_strategy(code) @@ -186,6 +235,11 @@ logger_debug.exception(e) finally: self.__last_price_dict[code] = price + data_cache.latest_deal_price_dict[code] = price + data_cache.latest_l2_transaction_info_dict[code] = (price, time_str) + use_time = time.time() - start_time + if use_time > 0.1: + logger_debug.warning(f"L2閫愮瑪鎴愪氦澶勭悊鑰楁椂锛歿use_time} 鏈�鍚庝竴鏉℃暟鎹細{datas[-1]}") def OnMarketData(self, code, datas): # logger_debug.info(f"鏀跺埌L2Market鏁版嵁锛歿datas}") @@ -195,9 +249,10 @@ # 瀹炴椂L2涔�1鎴愪氦閲� def OnRealTimeBuy1Info(self, code, buy1_info): + pass # buy1_info: [涔�1鏃堕棿,涔�1浠锋牸, 鍘熷涔�1閲�, 瀹炴椂涔�1閲廬 # 鏈�缁堢殑涔�1涓猴細 鍘熷涔�1閲�+瀹炴椂涔�1閲� - async_log_util.info(logger_debug, f"OnRealTimeBuy1Info锛歿code}-{buy1_info}") + # async_log_util.info(logger_debug, f"OnRealTimeBuy1Info锛歿code}-{buy1_info}") # L1DataProcessor.excute_sell_rule(code, buy1_info[3], buy1_info[1], "l2-real") @@ -230,14 +285,39 @@ # 绗笁姝ワ細鎵ц绛栫暐鐨勫垵濮嬭缃� if __name__ == '__main__': log.close_print() + + class MyMarketDataCallback(l2_market_client.L2MarketDataCallback): + + def __init__(self): + def push_ticks_of_position_codes(): + """ + 鎺ㄩ�佹寔浠撲唬鐮佺殑tick鏁版嵁 + :return: + """ + while True: + try: + if data_cache.OPEN_BIDDING_TIME <= tool.get_now_time_str() <= data_cache.OPENING_TIME: + logger_debug.info(f"09:25-09:30涓诲姩鎺ㄩ�佹暟鎹�") + datas = [v for k, v in data_cache.current_l1_dict.items()] + instant_time_market.set_current_info(datas) + elif tool.get_now_time_str() > data_cache.OPENING_TIME: + break + except Exception as e: + logger_debug.exception(e) + finally: + time.sleep(3) + + threading.Thread(target=push_ticks_of_position_codes, daemon=True).start() + def on_markets(self, datas): """ L1鏁版嵁鍥炶皟 :param datas: :return: """ - data_cache.latest_code_market_info_dict = {x[0]: x for x in datas} + for x in datas: + data_cache.latest_code_market_info_dict[x[0]] = x if constant.is_windows(): instant_time_market.get_current_info() else: @@ -245,7 +325,8 @@ # 鍔犺浇寮�鐩樺暒鏉垮潡鏃ュ織鏁版嵁 - kpl_data_manager.KPLStockOfMarketsPlateLogManager() + kpl_data_manager.KPLMarketsSiftPlateLogManager() + kpl_data_manager.KPLMarketStockHeatLogManager() # 鍚姩寮傛鏃ュ織 threading.Thread(target=async_log_util.run_sync, daemon=True).start() @@ -268,7 +349,7 @@ threading.Thread(target=hx_qc_value_util.run, daemon=True).start() # 杩愯浜ゆ槗鏁版嵁鏇存柊鏈嶅姟 - huaxin_trade_data_update.run() + huaxin_trade_data_update.run(order_methods.trade_callback) # 绛夊緟5s锛岀瓑鍏朵粬绾跨▼/杩涚▼鍚姩瀹屾瘯 time.sleep(15) @@ -283,7 +364,11 @@ logger_system.exception(e) # 闇�瑕佽闃呯殑鐩爣浠g爜 - target_codes = [x["sec_id"] for x in data_cache.DataCache().all_stocks] + target_codes = [x[-6:] for x in data_cache.DataCache().min_stocks] + position_codes = [x[-6:] for x in data_cache.position_symbols_set] + logger_debug.info(f"浠婃棩鎸佷粨浠g爜锛歿position_codes}") + target_codes = set(target_codes) | set(position_codes) + logger_debug.info(f"浠婃棩瑕佽闃呯殑浠g爜锛歿len(target_codes)}-{target_codes}") # 璁㈤槄L2 market琛屾儏 l2_market_client.run(target_codes, MyMarketDataCallback()) -- Gitblit v1.8.0