From ab662be5c523b75c1bd28fc6bfcab2872b9623b3 Mon Sep 17 00:00:00 2001 From: Administrator <admin@example.com> Date: 星期四, 12 六月 2025 15:22:06 +0800 Subject: [PATCH] bug修复 --- trade/trade_manager.py | 83 ++++++++++++++++++++++++++++++++++++++++- 1 files changed, 81 insertions(+), 2 deletions(-) diff --git a/trade/trade_manager.py b/trade/trade_manager.py index c56e4f6..56ab205 100644 --- a/trade/trade_manager.py +++ b/trade/trade_manager.py @@ -4,12 +4,14 @@ """ # 浜ゆ槗绠$悊鍣� import copy +import json +from code_attribute import gpcode_manager from db import redis_manager_delegate as redis_manager +from db.mysql_data_delegate import Mysqldb from db.redis_manager_delegate import RedisUtils from log_module import async_log_util from trade import trade_constant - from log_module.log import * from utils import import_util, tool, huaxin_util @@ -163,6 +165,83 @@ # 璁剧疆浜ゆ槗璐︽埛鐨勫彲鐢ㄩ噾棰� +@tool.singleton +class DealCodesManager: + """ + 鎴愪氦浠g爜绠$悊 + """ + __db = 12 + + # 鎴愪氦浠g爜鐨勮鍗曚俊鎭細{浠g爜:{浜ゆ槗id:(閲忥紝浠锋牸锛岀郴缁熻鍗曞彿)}} + + def __init__(self): + self.musql = Mysqldb() + self.__deal_code_orders_info = {} + self.redis_manager = redis_manager.RedisManager(12) + # 涓嬭繃鍗曠殑鏉垮潡浠g爜 + self.__place_order_plate_codes_info = {} + self.__load_data() + + def __get_redis(self): + return self.redis_manager.getRedis() + + def __load_data(self): + # 涓嶇畻鎵撴澘鐨勬暟鎹� + sql = f"select tradeID,securityID, orderSysID,price,volume from hx_trade_deal_record where `direction` = '0' and tradingDay = '{tool.get_now_date_str('%Y%m%d')}'" + results = self.musql.select_all(sql) + if results: + for r in results: + self.add_deal_order(r[1], r[4], round(float(r[3]), 2), r[0], r[2]) + + val = RedisUtils.get(self.__get_redis(), "place_order_plate_codes_info") + if val: + self.__place_order_plate_codes_info = json.loads(val) + + def add_deal_order(self, code, volume, price, trade_id, order_sys_id): + """ + 娣诲姞鎴愪氦澶у崟 + @param code: + @param volume: + @param price: + @param trade_id: + @param order_sys_id: + @return: + """ + pre_price = gpcode_manager.CodePrePriceManager().get_price_pre_cache(code) + if pre_price and round((price - pre_price) / pre_price, 4) > 0.08 * (tool.get_limit_up_rate(code) - 1) * 10: + # 瑙嗕负鎵撴澘涔板叆锛屼笉澶勭悊鏁版嵁 + return + if code not in self.__deal_code_orders_info: + self.__deal_code_orders_info[code] = {} + if trade_id in self.__deal_code_orders_info[code]: + return + self.__deal_code_orders_info[code][trade_id] = (volume, price, order_sys_id) + + def get_deal_codes(self): + if not self.__deal_code_orders_info: + return set() + return set(self.__deal_code_orders_info.keys()) + + def place_order(self, plate, code): + """ + 涓嬪崟 + @param plate: + @param code: + @return: + """ + if plate not in self.__place_order_plate_codes_info: + self.__place_order_plate_codes_info[plate] = [] + if code not in self.__place_order_plate_codes_info[plate]: + self.__place_order_plate_codes_info[plate].append(code) + RedisUtils.setex_async(self.__db, "place_order_plate_codes_info", tool.get_expire(), + json.dumps(self.__place_order_plate_codes_info)) + + def get_place_order_plate_codes(self): + return self.__place_order_plate_codes_info + + __CodesTradeStateManager = CodesTradeStateManager() - +if __name__ == "__main__": + codes = DealCodesManager().get_codes() + print(codes) -- Gitblit v1.8.0