NBLOG_20231128 PYTHON量化交易;Back Testing_4

Translator

 

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),


 








留言

熱門文章