From f929ff8a2f504488147afdbb5acfe2f91f87dbf1 Mon Sep 17 00:00:00 2001 From: blade <8019068@qq.com> Date: Thu, 14 Aug 2025 20:08:48 +0800 Subject: [PATCH] support title with details, and only output records which volume ratio greater than huge volume mean value. --- .../market_monitor.cpython-312.pyc | Bin 17964 -> 18085 bytes core/biz/market_monitor.py | 8 +++++--- market_monitor_main.py | 13 +++++++++++++ monitor_schedule.py | 1 + 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/biz/__pycache__/market_monitor.cpython-312.pyc b/core/biz/__pycache__/market_monitor.cpython-312.pyc index 93d3cf58c818f8c7d79c2f046a0b1af4ed9c64a6..00e9a93a9c8642cb327a85dc14e503cfc4fb3a37 100644 GIT binary patch delta 2740 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 PQ{=BZL3?Vjf@S{)zkyto diff --git a/core/biz/market_monitor.py b/core/biz/market_monitor.py index cbc5942..5ad69e3 100644 --- a/core/biz/market_monitor.py +++ b/core/biz/market_monitor.py @@ -55,10 +55,13 @@ def create_metrics_report( f"symbol: {symbol} {bar} window_size: {window_size} date_time: {date_time} 下跌,不发送相关数据" ) return + volume_ratio = round(float(row["volume_ratio"]), 4) + change = "涨" if pct_chg > 0 else "跌" + brief = f"{symbol} {bar} 量率: {volume_ratio} {change}: {pct_chg}%" if huge_volume == 1: - contents.append(f"## 交易巨量报告") + contents.append(f"## {brief} 交易巨量报告") else: - contents.append(f"## 交易量报告") + contents.append(f"## {brief} 交易量报告") if now_datetime_str is not None: contents.append(f"## {symbol} {bar} 滑动窗口: {window_size} 最新数据时间: {now_datetime_str}") else: @@ -72,7 +75,6 @@ def create_metrics_report( volume = round(float(row["volume"]), 4) volCcy = round(float(row["volCcy"]), 4) volCCyQuote = round(float(row["volCCyQuote"]), 4) - volume_ratio = round(float(row["volume_ratio"]), 4) spike_intensity = round(float(row["spike_intensity"]), 4) close_80_high = int(row["close_80_high"]) close_20_low = int(row["close_20_low"]) diff --git a/market_monitor_main.py b/market_monitor_main.py index 4ba0f20..36fc570 100644 --- a/market_monitor_main.py +++ b/market_monitor_main.py @@ -66,6 +66,7 @@ class MarketMonitorMain: symbol: str, bar: str, only_output_huge_volume: bool = False, + only_output_over_mean_volume: bool = False, only_output_rise: bool = False, ): """ @@ -135,6 +136,16 @@ class MarketMonitorMain: if only_output_huge_volume: if realtime_row["huge_volume"] == 1: logging.info(f"监控到巨量: {symbol} {bar} 窗口大小: {self.window_size}") + if only_output_over_mean_volume: + # 获得huge_volume==1时的volume_ratio的均量 + mean_huge_volume_ratio = real_time_data[real_time_data["huge_volume"] == 1]["volume_ratio"].mean() + if realtime_row["volume_ratio"] >= mean_huge_volume_ratio: + logging.info(f"监控到巨量且超过均量: {symbol} {bar} 窗口大小: {self.window_size}") + else: + logging.info( + f"监控到巨量但未超过均量: {symbol} {bar} 窗口大小: {self.window_size},退出本次监控" + ) + return else: logging.info( f"监控到非巨量: {symbol} {bar} 窗口大小: {self.window_size},退出本次监控" @@ -233,6 +244,7 @@ class MarketMonitorMain: def batch_monitor_realtime_market( self, only_output_huge_volume: bool = True, + only_output_over_mean_volume: bool = True, only_output_rise: bool = True, ): for symbol in self.market_data_main.symbols: @@ -245,6 +257,7 @@ class MarketMonitorMain: symbol, bar, only_output_huge_volume, + only_output_over_mean_volume, only_output_rise, ) except Exception as e: diff --git a/monitor_schedule.py b/monitor_schedule.py index 8c6a90d..f37bcaa 100644 --- a/monitor_schedule.py +++ b/monitor_schedule.py @@ -11,6 +11,7 @@ def monitor_schedule(): while True: # 每分钟监控一次 market_monitor_main.batch_monitor_realtime_market( only_output_huge_volume=True, + only_output_over_mean_volume=True, only_output_rise=False, ) logging.info("本次循环监控结束,等待30秒")