今天終於要來介紹加速度指標,這個指標的用處,在於可以篩選出「止跌回升」或「加速往上漲」的股票,經過回測驗證是有效的。搭配其他指標,可以獲得約20%的年報酬率。接下來我們就來用 python 實做它吧!
這個 blog 會永久推出免費的教學,讓大家可以免費的學習 python 又賺錢,學習程式語言是很多人憧憬的目標,但是常常會有學了不知道拿來做什麼?要是寫程式不只能在工作上增加效率,還能幫你挑股票賺錢,那還有什麼理由不學習呢?
我喜歡寫程式,也希望可以做出很好的工具,幫助到大家,帶著這個初衷,我創立了finlab 並且持續到了現在(不過中間因為博士班論文所以暫停了一段時間)。與其販賣選股軟體,我們分享代碼,讓大家自己零成本 DIY,假如想要支持我們,可以考慮我們的影音課程,獲得完整的 python 選股知識跟大量實用代碼。
好了廢話不多說,開始今天的 python 程式碼吧!
製作時間序列
首先我們必須先做出時間序列,時間序列其實就是一條條股價隨時間的變化圖,有點像是K線圖,我們習慣將這些資料整理成以下的樣貌:
要如何獲得此資料結構呢?
- 假如您沒有購買課程的話,可以參考這篇文章來免費獲得時間序列資料,調整當中的參數,獲得至少200天的收盤價喔!
- 假如您已經有課程中的代碼,就變得很簡單,只需要:
from finlab.data import Data
data = Data()
close = data.get('收盤價', 200)
就可以獲得兩百天內的所有上市股價資料。
在這個階段完成後,我們會有一個 close
的 variable,裡面的資料結構就如上圖一樣,是一個 dataframe
而其中就是一條條時間序列,每一檔股票的收盤價。
撰寫加速度指標
加速度指標的原理,可以參考
簡單來說,加速度指標,其實就是看均線的曲率是正負,來決定是否買賣,但是由於股價的雜訊太大了,與其用微分的,我們提供一個比較簡單的方式,來判斷曲率的正負:
(n天前 + 當天)/2 > n/2天前 的k天均線
我們把以上這個判斷式寫成代碼:
close60 = close.rolling(60, min_periods=10).mean()
def rising_curve(n):
return (close60.iloc[-n] + close60.iloc[-1]) / 2 > close60.iloc[-int((n+1)/2)]
以上的代碼中,第一行,我們創建了close60
這個variable
,裡面的資料就是每檔股票60天的均線的數值。
接下來,在第三行中,我們定義了一個function
叫做rising_curve
,來判斷條件是否符合,
第四行,就是最重要的判斷式:
其中我們只用到了iloc(k)
這個method
,這個method
是將close60
中第k
條row
給拿出來的意思。而k
可以是正的,代表從dataframe
的第0條row開始數,也可以是負的,代表從 dataframe
的最後一條row倒著數。
試用看看
接下來我們就可以呼叫這個rising_curve,來看哪些股票符合這個條件:
rising_curve(10)
代表哪些檔股票符合條件,而哪些不符合條件。
組裝策略
接下來就到了多個策略組合的時候了,前一篇文章有說過,必須要用多次的rising_curve來判斷不同週期下,是否都是符合條件!
rising = (
rising_curve(5) &
rising_curve(10) &
rising_curve(20) &
rising_curve(60) &
rising_curve(30) &
rising_curve(40) &
rising_curve(50) &
(close.iloc[-1] > close60.iloc[-1])
)
print(rising[rising])
以上,第2~9行,我們將所有的條件做交集(&),代表必須要全部的條件都符合,才能被選入清單,我們以非常嚴苛的方式,來判斷股價的曲率。
最後一行,我們使用rising[rising]
,這個意思是,從rising
這條序列中,選取rising
為 True
的股票,忽略False
的股票。
選股個股概覽
我們將選出來的股票畫出來,來瞭解這些股票的特性,下圖中,黃色的為股價,而藍色的為均線,我們可以發現這些股票的特性,就是均線會呈現圓弧型:
可以看到大部分都是抓出止跌回漲的股票居多,加速度指標可以抓出兩種股票:
- 止跌
- 起漲
至於要更細部的設定,就留給各位看官來實做了。
假如將以上代碼的不等式反過來用,也可以抓出股票的賣點,進而抓出止漲的股票,我發現加速度指標拿來抓賣點,搭配一些技術指標效果非常好,可以試試看!
今天的重點整理
- 加速度指標實做
- 利用「iloc」選取特定的row
- 利用「&」來做條件交集,篩選股票