From 8382cbe98cab50d8bbea9d43779e1c632548fe04 Mon Sep 17 00:00:00 2001 From: admin <admin@example.com> Date: 星期二, 17 六月 2025 13:39:32 +0800 Subject: [PATCH] 禁止买入板块管理/增加外部接口 --- data_server.py | 21 ++++++++++ constant.py | 5 ++ strategy/forbidden_plates_manager.py | 63 +++++++++++++++++++++++++++++++ strategy/buying_strategy.py | 29 +++++++++++++- 4 files changed, 116 insertions(+), 2 deletions(-) diff --git a/constant.py b/constant.py index a9abd7a..45a5f73 100644 --- a/constant.py +++ b/constant.py @@ -84,3 +84,8 @@ # 鏄惁鏄豢鐪熶氦鏄� IS_SIMULATED_TRADE = False + +check_plate_list = {'鏃�', 'ST鎽樺附', 'ST鏉垮潡', '瓒呰穼', '娆℃柊鑲�', '鍖椾氦鎵�', '绉戝垱鏉�', + '骞存姤澧為暱', '骞存姤棰勫', '骞惰喘閲嶇粍', '鑲℃潈杞', '閫佽浆濉潈', '楂橀�佽浆', '澹宠祫婧�', + '璧勪骇绠$悊', '涓剧墝', + '涓撶敤璁惧', '鍒涙姇'} diff --git a/data_server.py b/data_server.py index 361bcee..13d7b51 100644 --- a/data_server.py +++ b/data_server.py @@ -17,6 +17,7 @@ from log_module import log_export, async_log_util from log_module.log import hx_logger_l2_transaction, logger_debug, logger_request_api, logger_system from strategy import data_cache +from strategy.forbidden_plates_manager import ForbiddenPlatesManager from strategy.kpl_data_manager import KPLMarketsSiftPlateLogManager, KPLMarketStockHeatLogManager from strategy.trade_setting import TradeSetting from trade import huaxin_trade_api, huaxin_trade_data_update @@ -234,6 +235,26 @@ # (璺濈09:15:00鐨勭鏁�, 鏃堕棿, 寮哄害) fdatas.append((tool.trade_time_sub(data[0], "09:15:00"), data[0], data[1])) response_data = json.dumps({"code": 0, "data": fdatas}) + elif url.path == "/get_place_order_records": + datas = data_cache.purchased_stocks_details_list + response_data = json.dumps({"code": 0, "data": datas}) + elif url.path == "/get_forbidden_plates": + datas = ForbiddenPlatesManager().list_plates() + # human 璁や负璁剧疆 fixed: 鍥哄畾鐨� + response_data = json.dumps( + {"code": 0, "data": {"human": list(datas), "fixed": list(constant.check_plate_list)}}) + elif url.path == "/add_forbidden_plate": + plate = params_dict.get("plate") + ForbiddenPlatesManager().add_plate(plate) + response_data = json.dumps({"code": 0, "data": {}}) + elif url.path == "/remove_forbidden_plate": + plate = params_dict.get("plate") + ForbiddenPlatesManager().remove_plate(plate) + response_data = json.dumps({"code": 0, "data": {}}) + elif url.path == "/get_market_sift_plate_stock_dict": + # 鑾峰彇寮�鐩樺暒鏉垮潡绮鹃�夋祦鍏� + data = data_cache.market_sift_plate_stock_dict + response_data = json.dumps({"code": 0, "data": data}) self.send_response(200) # 鍙戠粰璇锋眰瀹㈡埛绔殑鍝嶅簲鏁版嵁 diff --git a/strategy/buying_strategy.py b/strategy/buying_strategy.py index 991e972..bc6be39 100644 --- a/strategy/buying_strategy.py +++ b/strategy/buying_strategy.py @@ -429,6 +429,7 @@ data_cache.bought_plate.extend(limit_up_plate_included_list) logger_info( f"銆恵k_line_data[0]['sec_name']}銆戜氦鏄撴垚鍔燂紒鎸佷粨闆嗗悎锛歿data_cache.position_symbols_set}") + # 浼犵粰GUI鏄剧ず purchased_stock_details = { "name": k_line_data[0]['sec_name'], "policy_name": "鏈夋蹇垫湁寮哄害绛栫暐鍒嗘敮", @@ -548,11 +549,23 @@ data_cache.bought_plate.extend(limit_up_plate_included_list) logger_info( f"銆恵k_line_data[0]['sec_name']}銆戜氦鏄撴垚鍔燂紒鎸佷粨闆嗗悎锛歿data_cache.position_symbols_set}") + # 浼犵粰GUI鏄剧ず + purchased_stock_details = { + "name": k_line_data[0]['sec_name'], + "policy_name": "鏈夋蹇垫棤寮哄害绛栫暐鍒嗘敮", + "plate_name": limit_up_plate_included, + "buy_time_trading_volume_ratio": ( + current_volume / k_line_data[0]['volume']), + } + data_cache.purchased_stocks_details_list.append(purchased_stock_details) + logger_info( + f"宸叉垚浜よ偂绁ㄨ鎯呭垪琛細{data_cache.purchased_stocks_details_list} ") ''' 鏃犳蹇� 鏈夊己搴﹁鐣� ''' - if len(limit_up_plate_included) == 0: - # logger_info(f"銆愭棤姒傚康銆�") + if len(limit_up_plate_included) == 0 or limit_up_plate_included.issubset( + check_plate_list) is True: + # logger_info(f"銆愭棤姒傚康 鎴� 姒傚康鍦ㄥ睆钄芥蹇电粍涓��") if strength_list_have_it is True: logger_info( f"銆恵k_line_data[0]['sec_name']}銆�--------------------------------------------------------------------------------------------------------[鏈夊己搴﹁鐣宂") @@ -661,6 +674,18 @@ data_cache.bought_plate.extend(strength_plate) logger_info( f"銆恵k_line_data[0]['sec_name']}銆戜氦鏄撴垚鍔燂紒鎸佷粨闆嗗悎锛歿data_cache.position_symbols_set}") + # 浼犵粰GUI鏄剧ず + purchased_stock_details = { + "name": k_line_data[0]['sec_name'], + "policy_name": "鏃犳蹇垫湁寮哄害绛栫暐鍒嗘敮", + "plate_name": strength_plate, + "buy_time_trading_volume_ratio": ( + current_volume / k_line_data[0]['volume']), + } + data_cache.purchased_stocks_details_list.append( + purchased_stock_details) + logger_info( + f"宸叉垚浜よ偂绁ㄨ鎯呭垪琛細{data_cache.purchased_stocks_details_list} ") ''' 鏃犳蹇垫棤寮哄害 鏈夊皬閲忔崲澶ф定骞呭害瑙嗙晫 ''' diff --git a/strategy/forbidden_plates_manager.py b/strategy/forbidden_plates_manager.py new file mode 100644 index 0000000..920ee96 --- /dev/null +++ b/strategy/forbidden_plates_manager.py @@ -0,0 +1,63 @@ +""" +榛戝悕鍗曟澘鍧楃鐞� +""" +from db import redis_manager_delegate as redis_manager +from db.redis_manager_delegate import RedisUtils +from utils import tool + + +@tool.singleton +class ForbiddenPlatesManager: + def __init__(self): + self.forbidden_plates = set() + self.__db = 1 + self.__redisManager = redis_manager.RedisManager(self.__db) + self.__load_forbidden_plates() + + def __load_forbidden_plates(self): + plates = RedisUtils.smembers(self.__redisManager.getRedis(), "forbidden_plates") + if plates: + self.forbidden_plates = set(plates) + + def add_plate(self, plate): + """ + 娣诲姞鏉垮潡 + :param plate: + :return: + """ + if plate in self.forbidden_plates: + return + self.forbidden_plates.add(plate) + RedisUtils.sadd_async(self.__db, "forbidden_plates", plate) + RedisUtils.expire_async(self.__db, "forbidden_plates", tool.get_expire()) + + def remove_plate(self, plate): + """ + 绉婚櫎鏉垮潡 + :param plate: + :return: + """ + if plate not in self.forbidden_plates: + return + self.forbidden_plates.remove(plate) + RedisUtils.srem_async(self.__db, "forbidden_plates", plate) + RedisUtils.expire_async(self.__db, "forbidden_plates", tool.get_expire()) + + def list_plates(self): + """ + 鍒楀嚭鎵�鏈夋澘鍧� + :return: + """ + return self.forbidden_plates + + def is_plate_forbidden(self, plate): + """ + 鍒ゆ柇鏉垮潡鏄惁琚姝� + :param plate: + :return: + """ + return plate in self.forbidden_plates + + +if __name__ == '__main__': + print(ForbiddenPlatesManager().list_plates()) -- Gitblit v1.8.0