多空双方力量的对比(它不光看价格涨了多少,而是看上涨的力度和下跌的力度谁更强。)
[0,100]
- 50:多空分界线。高于 50 代表多方强势,低于 50 代表空方强势
- RSI > 70 时,说明市场短期内上涨过快、买盘过热,就像弹簧被压到了极限,此时价格容易回调或下跌。
- RSI < 30 时,说明市场短期内下跌过猛、卖盘过急,此时价格容易反弹或上涨
算法
设基准价:
a = 100
后面 14 天的涨跌数(我随便编一组,方便你看 当天与前一日的涨跌数据 ):
开始 100 | 102 | 101 | 104 | 102 | 103……
2, -1, 3, -2, 1, 0, 4, -1, 2, -3, 1, -2, 3, -1
- 所有上涨(Gain):2,3,1,4,2,1,3
总和 = 16
- 所有下跌(Loss):1,2,1,3,2,1
总和 = 10
计算:
AvgGain = 16 / 14 ≈ 1.14
AvgLoss = 10 / 14 ≈ 0.71
RS = 1.14 / 0.71 ≈ 1.61
RSI = 100 – 100/(1+1.61)
= 100 – 100/2.61
≈ 61.7
import pandas as pd
df=pd.read_csv("000021.csv")
df['delta']=df['收盘'].diff()
df['gain']=df['delta'].where(df['delta']>0,0)
df['loss']=-df['delta'].where(df['delta']<0,0)
df['avg_gain']=df['gain'].rolling(14).mean()
df['avg_loss']=df['loss'].rolling(14).mean()
df['avg_loss'] = df['avg_loss'].replace(0, 1e-6)
df['rs']=df['avg_gain']/df['avg_loss']
df['rsi']=100-(100/(1+df['rs']))
print(df.head(30))




