strategy/data_cache.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
strategy/kpl_api.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
strategy/kpl_data_manager.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
strategy/market_sentiment_analysis.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
strategy/order_methods.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
utils/hx_qc_value_util.py | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
strategy/data_cache.py
@@ -101,7 +101,7 @@ # 使用 get 方法安全地获取 symbol 字段的值 self.min_stocks = [stock.get('symbol') for stock in min_instruments if stock.get('symbol') is not None] print(f"min_stocks 数量 ==={len(self.min_stocks)}") logger.info(f"min_stocks==={self.min_stocks}") # logger.info(f"min_stocks==={self.min_stocks}") logging.info(f"全局初始化数据 完成《《《 - {os.getpid()}") # 获取当前进程的PID @@ -121,6 +121,8 @@ AFTER_OPEN_BIDDING_TIME = datetime.time(9, 25, 12).strftime("%H:%M:%S") # 定义 集合竞价 开始后 时间 OPENING_TIME = datetime.time(9, 30, 00).strftime("%H:%M:%S") # 定义开盘时间 MORN_MARKET_TIME = datetime.time(9, 35, 00).strftime("%H:%M:%S") # 定义早盘时间 MORN_MARKET_CLOSING_TIME = datetime.time(11, 30, 00).strftime("%H:%M:%S") # 定义上午收盘时间 NOON_MARKET_OPENING_TIME = datetime.time(13, 0, 00).strftime("%H:%M:%S") # 定义下午开盘时间 NOON_MARKET_TIME = datetime.time(13, 5, 00).strftime("%H:%M:%S") # 定义午盘时间 CLOSE_POSITION_TIME = datetime.time(14, 55, 00).strftime("%H:%M:%S") # 定义平仓时间 WATCH_DISK_END_TIME = datetime.time(14, 56, 00).strftime("%H:%M:%S") # 定义 板上盯结束时间 strategy/kpl_api.py
@@ -229,6 +229,9 @@ def request_plate_codes(i): plate_name = i[1] log_data = None its_stock = json.loads(getCodesByPlate(i[0])) if data_cache.OPENING_TIME < now_time < data_cache.NOON_MARKET_TIME: log_data = {plate_name: its_stock['list']} # 尝试过滤掉无意义的概念板块(plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革','超跌', '壳资源', '股权转让', '送转填权']) and '增长' in plate_name if (plate_name not in ['科创板', '北交所', '次新股', '无', 'ST板块', 'ST摘帽', '并购重组', '国企改革', '超跌', '壳资源', '股权转让', '送转填权']) or ('增长' in plate_name): @@ -236,8 +239,6 @@ # print(f"{i[1]} 强度:{i[2]}") # 通过板块ID获取其下面的个股强度列表 # print(f"======={i[0]}=======") its_stock = json.loads(getCodesByPlate(i[0])) log_data = {plate_name: its_stock['list']} # its_stock_list_info = its_stock['list'] # logger.info(f"its_stock_list_info==={its_stock_list_info}") @@ -261,8 +262,7 @@ stock_power_list = [] for s in its_stock['list']: # 过滤掉涨幅大于 and s[6] < 6.5 且小于0%的 和 名称中包含ST的 和 涨速小于等于0%的 和 只要昨日未涨停 和 上证或深证的正股 and s[9] > 0.0025 if s[6] > 0 and s[1].find("ST") < 0 and s[1].find("XD") < 0 and s[23].find("板") < 0 and s[24].find( "板") < 0 and (s[0].startswith('60') or s[0].startswith('00')) and s[9] > 1: if s[6] > 0 and s[1].find("ST") < 0 and s[1].find("XD") < 0 and s[23].find("板") < 0 and s[24].find("板") < 0 and (s[0].startswith('60') or s[0].startswith('00')) and s[9] > 1: # print(f"{s[1]},个股代码:{s[0]}, 涨幅:{s[6]}% 涨速:{s[9]}% 概念:{s[4]} 主力资金推测:{s[2]} 领涨次数:{s[40]} 今日第几板:{s[23]} 是否破版{s[24]}") # 对个股强度 主要 属性列表进行装填 its_stock_power = [s[1], s[0], s[6], s[9], s[4], s[2], s[40]] @@ -746,16 +746,20 @@ try: if data_cache.position_automatic_management_switch is True: now_time = tool.get_now_time_str() if data_cache.L1_DATA_START_TIME < now_time < data_cache.UPDATE_DATA_TIME: if data_cache.L1_DATA_START_TIME < now_time < data_cache.CLOSING_TIME: # 获取大盘综合强度分数 data_cache.real_time_market_strong = get_market_strong() # data_cache.time_sharing_market_strong_dirt = time_sharing_market_strong_dirt.update({now: data_cache.real_time_market_strong}) # 该logger.info的的日志不再需要打印,后续将转入到GUI客户端上直接显示,该数据的打印交由下方的打印机制异步执行单独存储,以便后续可视化呈现后进行更高效的数据分析 # logger.info(f"大盘行情情绪综合强度 [分数]==={data_cache.real_time_market_strong}分") # 大盘综合强度分数 的 异步日志 # logger_Overall_market_strength_score.info(data_cache.real_time_market_strong) async_log_util.info(logger_Overall_market_strength_score, f"{data_cache.real_time_market_strong}") if data_cache.MORN_MARKET_CLOSING_TIME < now_time < data_cache.NOON_MARKET_OPENING_TIME: pass logger.info(f"午间休市时间内 不打印大盘综合强度分数") else: # 大盘综合强度分数 的 异步日志 # logger_Overall_market_strength_score.info(data_cache.real_time_market_strong) async_log_util.info(logger_Overall_market_strength_score, f"{data_cache.real_time_market_strong}") usefulMoney = data_cache.account_finance_dict[0].get('usefulMoney', 0) logger.info(f"账户可用资金==={usefulMoney}元") # 低迷情绪比例 @@ -763,7 +767,8 @@ # 33分是个两级分化阶梯不好,目前不好拿捏,暂时不用 # if data_cache.real_time_market_strong <= 33: if data_cache.real_time_market_strong < 30: low_emotion_mood_ratio = 0.1 # 如果大盘综合强度分数小于30,将低迷情绪分数比例设置为0.01,可用资金缩小一百倍 low_emotion_mood_ratio = 0.01 if data_cache.real_time_market_strong <= 10: low_emotion_mood_ratio = 0 logger.info(f"极端低迷情绪比例===={low_emotion_mood_ratio * 100}%") strategy/kpl_data_manager.py
@@ -14,7 +14,7 @@ self.__filter_log_datas = [] def __load_data(self): if tool.get_now_time_str() > '15:00:00': if tool.get_now_time_str() > '13:10:00': logger_debug.info("KPLStockOfMarketsPlateLogManager 开始加载数据") datas = log_export.load_stock_of_markets_plate() for data in datas: strategy/market_sentiment_analysis.py
@@ -300,10 +300,6 @@ else: index_composite_tick_increase = '三大指数:涨跌不一' logger.info(f"开盘指数开盘瞬时走势播报:{index_composite_tick_increase}") # print(f"指数K线{data_cache.all_index_k_line_property_dict}") if len(data_cache.all_index_k_line_property_dict) > 0 or data_cache.all_index_k_line_property_dict is not None: logger.info(f"指数带属性K线数据的昨日是否为空:{data_cache.all_index_k_line_property_dict['SHSE.000001'][0]}") # print(f"指数带属性K线数据的昨日是否为空:{data_cache.all_index_k_line_property_dict['SHSE.000001'][0]['open']}") if index_trend_expectation_score > 100: index_trend_expectation_score = 100 return index_trend_expectation_score strategy/order_methods.py
@@ -34,7 +34,7 @@ if volume < 100: volume = 100 # 调用笼子价计算工具计算下单价格 order_price = tool.get_buy_max_price(current_price) order_price = round(tool.get_buy_max_price(current_price), 2) buy_order = huaxin_trade_api.order(1, symbol[-6:], volume, order_price, blocking=True) logger.info(f"current_price===={current_price} order_price===={order_price}") logger.info(f"buy_order===={buy_order}") utils/hx_qc_value_util.py
@@ -71,6 +71,8 @@ @param end_date: @return: """ if not end_date: end_date = tool.get_now_date_str() load_latest_trade_calendar() _count = -1 start_date = None @@ -110,6 +112,7 @@ end_date = tool.get_now_date_str() end_date = tool.date_sub(end_date, -30) days = get_trade_calendar(tool.date_sub(end_date, 365), end_date) logger_debug.info(f"华鑫API获取交易日历结果:{days}") for i in range(0, len(days)): if 0 < i < len(days) - 1: __trade_calendar_dict[days[i]] = (days[i - 1], days[i + 1])