From ad615df734b4d82f9a83a7d1805ac9fabdf01a53 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期四, 21 八月 2025 18:27:39 +0800 Subject: [PATCH] 200元股价以下的不足4手算4手/撤单率设置为100%不计算L后后半段撤单 --- huaxin_client/l1_client.py | 108 ++++++++++++++++++++++++++++++----------------------- 1 files changed, 61 insertions(+), 47 deletions(-) diff --git a/huaxin_client/l1_client.py b/huaxin_client/l1_client.py index aaa608f..0ee112f 100644 --- a/huaxin_client/l1_client.py +++ b/huaxin_client/l1_client.py @@ -9,7 +9,8 @@ from huaxin_client import socket_util, l1_subscript_codes_manager import xmdapi from huaxin_client import tool, constant -from log_module.log import logger_system, logger_local_huaxin_l1, logger_l2_codes_subscript +from log_module.log import logger_system, logger_local_huaxin_l1, logger_l2_codes_subscript, logger_debug +from third_data import custom_block_in_money_manager from utils import tool as out_tool ################B绫�################## @@ -121,32 +122,27 @@ return if pMarketDataField.SecurityName.find("ST") >= 0: return - close_price = round(pMarketDataField.UpperLimitPrice / out_tool.get_limit_up_rate(pMarketDataField.SecurityID), - 2) - rate = round((pMarketDataField.LastPrice - close_price) * 100 / close_price, 2) + close_price = pMarketDataField.PreClosePrice + lastPrice = pMarketDataField.LastPrice + if pMarketDataField.BidPrice1: + lastPrice = pMarketDataField.BidPrice1 + rate = round((lastPrice - close_price) * 100 / close_price, 2) if out_tool.get_limit_up_rate(pMarketDataField.SecurityID) > 1.1001: # 娑ㄥ仠鏉�20%浠ヤ笂鐨勬墦鎶� rate = rate / 2 - - # print(pMarketDataField.SecurityID, pMarketDataField.SecurityName, rate, pMarketDataField.Volume) - + # (浠g爜, 鐜颁环, 娑ㄥ箙, 閲�, 褰撳墠鏃堕棿, 涔�1浠�, 涔�1閲�, 涔�2浠�, 涔�2閲�, 鏇存柊鏃堕棿, 鍗�1浠�, 鍗�1閲�) level1_data_dict[pMarketDataField.SecurityID] = ( pMarketDataField.SecurityID, pMarketDataField.LastPrice, rate, pMarketDataField.Volume, time.time(), - pMarketDataField.BidPrice1, pMarketDataField.BidVolume1) - # print( - # "SecurityID[%s] SecurityName[%s] LastPrice[%.2f] Volume[%d] Turnover[%.2f] BidPrice1[%.2f] BidVolume1[%d] AskPrice1[%.2f] AskVolume1[%d] UpperLimitPrice[%.2f] LowerLimitPrice[%.2f]" - # % (pMarketDataField.SecurityID, pMarketDataField.SecurityName, pMarketDataField.LastPrice, - # pMarketDataField.Volume, - # pMarketDataField.Turnover, pMarketDataField.BidPrice1, pMarketDataField.BidVolume1, - # pMarketDataField.AskPrice1, - # pMarketDataField.AskVolume1, pMarketDataField.UpperLimitPrice, pMarketDataField.LowerLimitPrice)) + pMarketDataField.BidPrice1, pMarketDataField.BidVolume1, pMarketDataField.BidPrice2, + pMarketDataField.BidVolume2, pMarketDataField.UpdateTime, pMarketDataField.AskPrice1, + pMarketDataField.AskVolume1) __latest_subscript_codes = set() def __upload_codes_info(queue_l1_w_strategy_r: multiprocessing.Queue, datas): - if not tool.is_trade_time(): + if not tool.is_trade_time() and not tool.is_pre_trade_time(): return # 涓婁紶鏁版嵁 type_ = "set_target_codes" @@ -165,16 +161,9 @@ logger_local_huaxin_l1.info(f"({request_id})鏂板鍔犺闃呯殑浠g爜锛歿add_codes}") -is_re_subscript = False - - # 閲嶆柊璁㈤槄浠g爜 def re_subscript(spi: MdSpi): try: - global is_re_subscript - if is_re_subscript: - return - is_re_subscript = True codes_sh, codes_sz = l1_subscript_codes_manager.request_l1_subscript_target_codes() if len(codes_sh) > 100 and len(codes_sz) > 100: logger_local_huaxin_l1.info(f"閲嶆柊璁㈤槄 sh-{len(codes_sh)} sz-{len(codes_sz)}") @@ -203,8 +192,38 @@ time.sleep(1) -def run(queue_l1_w_strategy_r, queue_l1_r_strategy_w): - logger_local_huaxin_l1.info("杩愯l1璁㈤槄鏈嶅姟") +def __run_subscript_task(spi): + """ + 杩愯璁㈤槄浠诲姟锛屽湪9:19鍒�9:29涔嬮棿寮�濮嬭闃� + @return: + """ + is_re_subscript = False + while True: + try: + # 鍒ゆ柇鏄惁闇�瑕侀噸鏂拌闃� + if tool.is_pre_trade_time(): + re_subscript(spi) + is_re_subscript = True + if is_re_subscript: + break + except: + pass + finally: + time.sleep(3) + + +def run(queue_l1_w_strategy_r, queue_l1_r_strategy_w, fixed_codes=None): + """ + 杩愯l1璁㈤槄浠诲姟 + + @param queue_l1_w_strategy_r: L1鏂瑰啓锛岀瓥鐣ユ柟璇� + @param queue_l1_r_strategy_w: L1鏂硅锛岀瓥鐣ユ柟鍐� + @param fixed_codes: 鍥哄畾瑕佽繑鍥炴暟鎹殑浠g爜 + @return: + """ + if fixed_codes is None: + fixed_codes = set() + logger_local_huaxin_l1.info(f"杩愯l1璁㈤槄鏈嶅姟锛屽浐瀹氫唬鐮侊細{fixed_codes}") codes_sh = [] codes_sz = [] for i in range(15): @@ -254,9 +273,12 @@ # "002292", 8.06, 9.96, 969500 * 100, time.time()) threading.Thread(target=__read_from_strategy, args=(queue_l1_r_strategy_w,), daemon=True).start() + + threading.Thread(target=__run_subscript_task, args=(spi,), daemon=True).start() + # 绛夊緟绋嬪簭缁撴潫 while True: - print("鏁伴噺", len(level1_data_dict)) + # print("鏁伴噺", len(level1_data_dict)) try: if len(level1_data_dict) < 1: continue @@ -265,42 +287,34 @@ # (浠g爜,鐜颁环,娑ㄥ箙,閲�,鏃堕棿) list_ = [level1_data_dict[k] for k in level1_data_dict] flist = [] - plist = [] now_time_int = int(tool.get_now_time_str().replace(":", "")) - threshold_rate = constant.L1_MIN_RATE_PRE if now_time_int < int( - "094000") else constant.L1_MIN_RATE + threshold_rate = constant.L1_MIN_RATE for d in list_: - if d[2] >= threshold_rate: - # 娑ㄥ箙灏忎簬5%鐨勯渶瑕佸垹闄� + if d[2] >= threshold_rate or d[0] in fixed_codes: + # 娑ㄥ箙灏忎簬3%鐨勯渶瑕佸垹闄� flist.append(d) - if d[0] in __position_codes: - plist.append(d) flist.sort(key=lambda x: x[2], reverse=True) + # 灏嗗浐瀹氫唬鐮佺殑鎺掑湪鏈�鍓� + for code in fixed_codes: + if code in level1_data_dict: + flist.insert(0, level1_data_dict[code]) # 姝e紡浜ゆ槗涔嬪墠鍏堝鐞嗘瘮杈冨皯鐨勬暟鎹紝涓嶇劧澶勭悊鏃堕棿涔呴�犳垚鏁版嵁鎷ュ牭 - MAX_COUNT = 1000 + MAX_COUNT = 500 if now_time_int < int("092600"): - MAX_COUNT = 100 - elif now_time_int < int("092800"): MAX_COUNT = 200 + elif now_time_int < int("092800"): + MAX_COUNT = 300 + elif now_time_int < int("092900"): + MAX_COUNT = 400 datas = flist[:MAX_COUNT] - # 灏嗘寔浠撹偂鍔犲叆杩涘幓 - datas.extend(plist) if len(datas) > 0: logger_l2_codes_subscript.info("寮�濮�#鍗庨懌L1涓婁紶浠g爜锛氭暟閲�-{}", len(datas)) __upload_codes_info(queue_l1_w_strategy_r, datas) except Exception as e: logging.exception(e) + logger_debug.exception(e) finally: time.sleep(3) - try: - # 鍒ゆ柇鏄惁闇�瑕侀噸鏂拌闃� - if tool.is_pre_trade_time(): - re_subscript(spi) - else: - global is_re_subscript - is_re_subscript = False - except: - pass # 閲婃斁鎺ュ彛瀵硅薄 api.Release() -- Gitblit v1.8.0