剧烈拉升检查器逻辑修复

This commit is contained in:
zhangkun9038@dingtalk.com 2025-08-30 08:28:25 +08:00
parent 9f9777008d
commit 295b7b6982

View File

@ -750,24 +750,23 @@ class FreqaiPrimer(IStrategy):
# 剧烈拉升检测参数
H1_RAPID_RISE_LOOKBACK = 200 # 检查最近200根K线
H1_RAPID_RISE_THRESHOLD = 5 # 价格拉升阈值(百分比)
H1_MAX_CANDLES = 2 # 最多连续检查的K线数量
H1_UNSTABLE_REGION_THRESHOLD = 60 # 不稳定区域阈值百分比超过60%认为是中上部分)
H1_MAX_CANDLES = 3 # 最多连续检查的K线数量修改为3
def detect_h1_rapid_rise(self, dataframe: DataFrame, metadata: dict) -> tuple[bool, float]:
"""
检测最近K线中是否发生了剧烈拉升情况
检测最近K线中是否发生了剧烈拉升情况200根1h k线范围内最多3个周期内抬升至少5%
参数:
dataframe: 当前时间框架的数据
metadata: 币对元数据
返回:
tuple: (是否发生剧烈拉升, 当前价格在最近价格范围中的百分比)
tuple[bool, float]: (是否处于不稳固区域(布尔值), 当前价格在最近价格范围中的百分比(浮点数))
"""
pair = metadata.get('pair', 'Unknown')
try:
# 使用当前时间框架的数据而不仅仅是1小时框架
# 获取数据
current_timeframe_data = dataframe.copy()
if len(current_timeframe_data) < self.H1_RAPID_RISE_LOOKBACK:
@ -781,7 +780,7 @@ class FreqaiPrimer(IStrategy):
rapid_rise_detected = False
max_cumulative_change = 0
# 检查最多连续2根K线内的累计涨幅
# 检查最多连续3根K线内的累计涨幅
for i in range(1, len(recent_data)):
# 计算从i-n到i的累计涨幅
for n in range(1, self.H1_MAX_CANDLES + 1):
@ -795,6 +794,7 @@ class FreqaiPrimer(IStrategy):
if cumulative_change >= self.H1_RAPID_RISE_THRESHOLD:
rapid_rise_detected = True
logger.info(f"[{pair}] 检测到剧烈拉升: 从{i-n}{i}根K线累计涨幅{cumulative_change:.2f}% >= {self.H1_RAPID_RISE_THRESHOLD}%")
break
if rapid_rise_detected:
break
@ -811,10 +811,11 @@ class FreqaiPrimer(IStrategy):
else:
price_position_pct = 0.0
# 判断当前是否处于不稳固区域(剧烈拉升后价格处于中上部分)
is_unstable_region = rapid_rise_detected and (price_position_pct >= self.H1_UNSTABLE_REGION_THRESHOLD)
# 判断当前是否处于不稳固区域(检测到剧烈拉升后,直接判定为不稳固区域)
# 只要检测到剧烈拉升3根K线内涨幅≥5%),就判定为不稳固区域,阻止入场
is_unstable_region = rapid_rise_detected
logger.info(f"[{pair}] 剧烈拉升检测 - 最大{self.H1_MAX_CANDLES}根K线累计涨幅: {max_cumulative_change:.2f}%, 阈值: {self.H1_RAPID_RISE_THRESHOLD}%, 不稳固区域: {is_unstable_region}")
logger.info(f"[{pair}] 剧烈拉升检测 - 最大{self.H1_MAX_CANDLES}根K线累计涨幅: {max_cumulative_change:.2f}%, 阈值: {self.H1_RAPID_RISE_THRESHOLD}%, 价格位置: {price_position_pct:.2f}%, 不稳固区域: {is_unstable_region}")
return is_unstable_region, price_position_pct