NBLOG_20231128 PYTHON量化交易;Back Testing_4
NBLOG_20231128 PYTHON量化交易;Back Testing_4
既然上一篇已經搞定RSI了,接下來我們來把它的難兄難弟挨個搞定一起都給辦了唄。首先登場的是俗稱KD的,STOCH隨機指標。這次增加的難度也不高,也就是從一條線增加到兩條線罷了。完整代碼如下:
import pandas as pd
import yfinance as yf
import mplfinance as mpf
import talib
#%matplotlib notebook
#下載TSLA公司一年的股價日線資料
df=yf.download('TSLA',period='1y')
#使用talib計算STOCH指標
df['Kp'], df['Dp'] = talib.STOCH(df['High'], df['Low'], df['Close'], fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
#設定超買超賣水準虛線為90與10
df['Ulim']=90
df['Dlim']=10
apds=[
#繪製紅色線的%K在panel=2 mpf.make_addplot(df['Kp'],panel=2,color='r',ylabel='KD%',secondary_y=False),
#繪製藍色線的%D在panel=2 mpf.make_addplot(df['Dp'],panel=2,color='b',linestyle='-.',secondary_y=False),
#方別繪製超買、超賣水準虛線同樣在panel=2
mpf.make_addplot(df['Ulim'],panel=2,color='g',linestyle='--'),
mpf.make_addplot(df['Dlim'],panel=2,color='g',linestyle='--'),
]
panel_ratios=(3,1)
#輸出完整的K線圖形與指標
mpf.plot(df,type='candle',volume=True,title='TSLA Chart & STOCH',addplot=apds)
得到如上的輸出圖形,其實扣掉開始的初始使用套件宣告,以及熟悉的資料下載代碼;真正主要的程式碼也沒幾行。而且當我們進行到這當口時,大家有沒有發現?其實我們事實上已經有能力去繪製幾乎所有的技術指標了。兩條線以下的都可以搞定,那不是涵蓋絕大多數指標了嗎?給自己一個愛的鼓勵吧!
首先、在talib當中計算隨機指標的呼叫方法為:
slowk, slowd = STOCH(high, low, close, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
這個應該是一般軟體上所謂“慢速KD”的公式;不是原始公式,使用單一叄數的計算方法。然後這裡發現有位新同學叫apds。
這個數列是我們的容器,專門用來裝那些make_addplot的敘述用的。大凡一個以上的make_addplot,就可以先在這裡集中嚴加看管;先餓個它兩三天再說。對了,這裡還有一個secondary_y=False)的叄數設定,需要說明一下。這是關係panel之間Y軸的尺標是否相互間共用;有auto、true與False可以選擇。
在結束這一篇之前;最後咱們就來弄個餘興節目吧!多年前有位朋友曾經提供給我一個策略,今天剛好遇上了我們的進度;還真是巧了。他的這個策略也很簡單,就是使用9日與50日的RSI交叉產生買賣訊號。我沒使用過,但是印象裡績效應該有個中上的水準。反正是拿來墊檔,求個歹戲拖棚罷了,沒事的就順便瞧瞧吧。程式碼如下:
import yfinance as yf
import mplfinance as mpf
import talib
#%matplotlib notebook
# 下載 MSFT 的一年股價資料
data = yf.download('MSFT', period='1y')
# 使用 talib 計算RSI指標
data['RSI9'] = talib.RSI(data['Close'], 9)
data['RSI50'] = talib.RSI(data['Close'], 50)
# 繪製K線圖、平均線和RSI指標
apds=[
mpf.make_addplot(data['RSI9'], panel=1, color='blue',ylabel='RSI 9,50'),
mpf.make_addplot(data['RSI50'], panel=1, color='red'),
mpf.make_addplot([30] * len(data), panel=1, color='gray', linestyle='--'),
mpf.make_addplot([70] * len(data), panel=1, color='gray', linestyle='--'),
]
mpf.plot(data, type='candle', mav=(5, 10),title='MSFT Stock Chart',addplot=apds)
panel_ratios=(3, 1),
figsize=(10, 8),
留言
張貼留言