You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现Connors RSI(3,2,100)计算结果异常求助

问题排查与修正:Connors RSI计算错误

核心错误点

  • PercentRank计算对象错误:Connors RSI的第三个成分是连涨连跌天数(streak)的100期百分位排名,你错误地使用了单日收益率(one_day_return)来计算排名,完全偏离了指标定义。
  • 百分位排名未缩放至0-100区间:你计算的percent_rank是0-1的小数,而前两个RSI值是0-100的整数,三者直接相加会导致结果严重偏低。

修正后的代码

1. 修正PercentRank计算逻辑

将计算对象替换为streaks_numpy(连涨连跌天数),并将结果缩放至0-100区间:

# 定义回溯周期
lookback = 100

# 计算连涨连跌天数的百分位排名(0-100)
def calculate_percent_rank(x):
    current = x[-1]
    # 统计小于当前值的数量 + 等于当前值数量的一半(标准百分位排名逻辑)
    count_less = np.sum(x < current)
    count_eq = np.sum(x == current)
    return (count_less + 0.5 * count_eq) / len(x) * 100

df['percent_rank'] = df['streaks_numpy'].rolling(window=lookback, min_periods=lookback).apply(
    calculate_percent_rank, raw=True
)

2. 重新计算Connors RSI

现在三个成分都是0-100区间的值,直接按公式计算:

# 计算CRSI
df['CRSI'] = (df['rsi(3)'] + df['streak_rsi'] + df['percent_rank']) / 3

额外验证点

  • 你之前实现的streaks_numpy逻辑正确:当收盘价相等时,streak重置为0,符合Connors RSI的定义。
  • RSI函数中的min_periods = periods参数设置合理,前periods-1天返回NaN,符合指标初始值的计算逻辑。

内容的提问来源于stack exchange,提问作者Simon B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:17:43