Python:免費加速度指標選股實做

今天終於要來介紹加速度指標,這個指標的用處,在於可以篩選出「止跌回升」或「加速往上漲」的股票,經過回測驗證是有效的。搭配其他指標,可以獲得約20%的年報酬率。接下來我們就來用 python 實做它吧!

這個 blog 會永久推出免費的教學,讓大家可以免費的學習 python 又賺錢,學習程式語言是很多人憧憬的目標,但是常常會有學了不知道拿來做什麼?要是寫程式不只能在工作上增加效率,還能幫你挑股票賺錢,那還有什麼理由不學習呢?

我喜歡寫程式,也希望可以做出很好的工具,幫助到大家,帶著這個初衷,我創立了finlab 並且持續到了現在(不過中間因為博士班論文所以暫停了一段時間)。與其販賣選股軟體,我們分享代碼,讓大家自己零成本 DIY,假如想要支持我們,可以考慮我們的影音課程,獲得完整的 python 選股知識跟大量實用代碼。

好了廢話不多說,開始今天的 python 程式碼吧!

製作時間序列

首先我們必須先做出時間序列,時間序列其實就是一條條股價隨時間的變化圖,有點像是K線圖,我們習慣將這些資料整理成以下的樣貌:

要如何獲得此資料結構呢?

  1. 假如您沒有購買課程的話,可以參考這篇文章來免費獲得時間序列資料,調整當中的參數,獲得至少200天的收盤價喔!
  2. 假如您已經有課程中的代碼,就變得很簡單,只需要:
1
2
3
4
from finlab.data import Data
data = Data()

close = data.get('收盤價', 200)

就可以獲得兩百天內的所有上市股價資料。

在這個階段完成後,我們會有一個 close 的 variable,裡面的資料結構就如上圖一樣,是一個 dataframe 而其中就是一條條時間序列,每一檔股票的收盤價。

撰寫加速度指標

加速度指標的原理,可以參考

簡單來說,加速度指標,其實就是看均線的曲率是正負,來決定是否買賣,但是由於股價的雜訊太大了,與其用微分的,我們提供一個比較簡單的方式,來判斷曲率的正負:

(n天前 + 當天)/2 > n/2天前 的k天均線

我們把以上這個判斷式寫成代碼:

1
2
3
4
5
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中第krow給拿出來的意思。而k可以是正的,代表從dataframe的第0條row開始數,也可以是負的,代表從 dataframe的最後一條row倒著數。

試用看看

接下來我們就可以呼叫這個rising_curve,來看哪些股票符合這個條件:

1
rising_curve(10)

以上這行就是判斷10日內的取率是多少,會得出以下的結果:

代表哪些檔股票符合條件,而哪些不符合條件。

組裝策略

接下來就到了多個策略組合的時候了,前一篇文章有說過,必須要用多次的rising_curve來判斷不同週期下,是否都是符合條件!

1
2
3
4
5
6
7
8
9
10
11
12
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這條序列中,選取risingTrue的股票,忽略False的股票。

最後得出了一串清單,代表符合所有條件的股票代號:

選股個股概覽

我們將選出來的股票畫出來,來瞭解這些股票的特性,下圖中,黃色的為股價,而藍色的為均線,我們可以發現這些股票的特性,就是均線會呈現圓弧型:

可以看到大部分都是抓出止跌回漲的股票居多,加速度指標可以抓出兩種股票:

  1. 止跌
  2. 起漲
    至於要更細部的設定,就留給各位看官來實做了。

假如將以上代碼的不等式反過來用,也可以抓出股票的賣點,進而抓出止漲的股票,我發現加速度指標拿來抓賣點,搭配一些技術指標效果非常好,可以試試看!

今天的重點整理

  1. 加速度指標實做
  2. 利用「iloc」選取特定的row
  3. 利用「&」來做條件交集,篩選股票

文章不錯,影音課程更讚:


或我們按個 鼓勵一下吧!