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