量化交易30天Day5 | RSI 計算範例

第12屆iT邦幫忙鐵人賽DAY50AI&Data量化交易30天系列第5篇量化交易30天Day5-Python計算RSI12th鐵人賽SeanLiu團隊OutcomeFirst2020-09-1810:31:243556瀏覽量化交易30天本系列文章是紀錄一位量化交易新手的學習過程,除了基礎的Python語法不說明,其他金融相關的東西都會一步步地說明,希望讓更多想學習量化交易但是沒有學過相關金融知識的朋友們,透過這系列的文章,能夠對量化交易略知一二,也歡迎量化交易的高手們多多交流。

RSI相對強弱指標是什麼RSI是RelativeStrengthIndex的縮寫,1978年由WellsWilder發明,是用來衡量過去一段時間內,投資標的漲跌趨勢的相對指標,Relative這個字代表的是,它是以過去這段時間內的上漲量對比下跌量,或者我們也可以說是買盤與賣盤的相對強弱,因此是一個相對的概念。

RSI的計算公式RSI=100×前N日漲幅的平均值÷(前N日漲幅的平均值+前N日跌幅的平均值)從上面這個公式可以觀察到,由於我們是計算漲或是跌的"幅度",因此都是取絕對值,數字都是大於0的,所以RSI這個數字一定會介在0~100中間。

設想幾個情況喔:前N日漲幅的平均值=前N日跌幅的平均值:把這個條件帶入公式,RSI會等於50,代表這段時間內買盤跟賣盤是差不多的。

前N日漲幅的平均值<前N日跌幅的平均值:RSI小於50,代表買盤較賣盤弱。

前N日漲幅的平均值>前N日跌幅的平均值:RSI大於50,代表買盤較賣盤強。

相信到了這邊,我們對RSI的理解就有初步的認識。

Python計算RSI下面會教大家怎麼從收盤價的時間序列資料,計算出對應的RSI值:先整理資料#串接tiingoapi獲取資料importosimportpandas_datareaderaspdrSPY=pdr.get_data_tiingo('SPY',api_key='YOURAPIKEY')SPY=SPY.reset_index(level=[0,1])SPY.index=SPY['date']SPY_adj=SPY.iloc[:,7:12]SPY_adj.columns=['Close','High','Low','Open','Volume']#整理資料importpandasaspd#收盤價Close=SPY_adj.Close#日漲跌Chg=Close-Close.shift(1)#上漲幅度Chg_pos=pd.Series(index=Chg.index,data=Chg[Chg>0])Chg_pos=Chg_pos.fillna(0)#下跌幅度(取正值,所以要加負號)Chg_neg=pd.Series(index=Chg.index,data=-Chg[Chg<0])Chg_neg=Chg_neg.fillna(0)計算RSI值由於RSI是計算過去一段時間的相對強弱,這個"一段時間"是看個人選擇要多長的時間,一般比較常見的是6日、12日、14日、24日,這個沒有一定要哪個日期比較好,這邊我就先用12日來做計算。

#計算12日平均漲跌幅度importnumpyasnpup_mean_12=[]down_mean_12=[]foriinrange(13,len(Chg_pos)+1):up_mean_12.append(np.mean(Chg_pos.values[i-12:i]))down_mean_12.append(np.mean(Chg_neg.values[i-12:i]))#計算RSI12rsi_12=[]foriinrange(len(up_mean_12)):rsi_12.append(100*up_mean_12[i]/(up_mean_12[i]+down_mean_12[i]))rsi_12_series=pd.Series(index=Close.index[12:],data=rsi_12)rsi_12_series------date2015-09-2300:00:00+00:0054.5901782015-09-2400:00:00+00:0040.2303502015-09-2500:00:00+00:0047.1616342015-09-2800:00:00+00:0031.9278952015-09-2900:00:00+00:0029.281669...2020-08-2600:00:00+00:0077.8035222020-08-2700:00:00+00:0089.6780792020-08-2800:00:00+00


常見投資理財問答