iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 13
1
Elastic Stack on Cloud

Elastic 戰台股系列 第 13

[Day13] 技術指標分析 - New Index + TA-Lib

今天的目標,是建立新的技術指標 Index,並利用 Talib 計算技術指標:移動平均線。

TA-Lib

TA-Lib 是基於 Python 的一個計算各種金融數據指標的套件,目前支援 158 種指標,你想得到的移動平均線、MACD、KD... 等,都可以計算。其實目前成名的股票大師,大多都不會看超過5個指標,所以 TA-Lib 是同好圈中的首選,沒有其它。TA-Lib 的安裝可見官方的 GithubDay08 我分享的 Dockerfile 已包含 TA-Lib 的安裝,有興趣的朋友可以參考。

移動平均線計算

我很欣賞林恩如老師的超簡單投資法,方法中採用的技術指標就是 20 週移動平均線,也就是 100 日線。在她的長線選股邏輯中,一個必要條件就是股價要站在 100 日線上。現在就來玩玩看 Talib 吧。利用 Day12 的程式碼,我取 2317 的 30 天盤後資料(如下圖)。
https://ithelp.ithome.com.tw/upload/images/20200926/20129624Eq3HUF7d1s.png
使用 talib.SMA 進行運算:

closePrices = elastic_df.iloc[:, 6].astype('float').values
close_sma_20 = np.round(talib.SMA(closePrices, timeperiod=20), 2)
print(close_sma_100)
# [  nan   nan   nan   nan   nan   nan   nan   nan   nan   nan   nan   nan
   nan   nan   nan   nan   nan   nan   nan 78.13 78.08 77.98 77.95 77.91
   77.89 77.94 77.9  77.9  77.82 77.74]

如此的簡單,我們得到了 20 日線。

Index 移動平均指標

我在 ES Cloud 上建一個新的 Index (history-prices-sma)。

PUT /history-prices-sma
{
  "mappings": {
    "properties": {
      "stock_id" : {
        "type" : "keyword"
      },
      "date" : {
        "type" : "date"
      },
      "sma_20" : {
        "type" : "float"
      }
    }
  }
}

Indexing Documents:

close_sma_20 = np.round(talib.SMA(closePrices, timeperiod=20), 2)
stock_id = elastic_df.iloc[:, 0].values
date = elastic_df.iloc[:, 1].values

documents = []
for i in range(len(stock_id)):
    document = {}
    document['stock_id'] = stock_id[i]
    document['date']     = date[i]
    document['sma_20']   = close_sma_20[i]

    action = {}
    actionProperties = {}
    actionProperties["_id"] = document['stock_id'] + document['date']
    action["index"] = actionProperties
    documents.append(action)
    documents.append(document)

result = es.bulk(body=documents, index='history-prices-sma')

在 ES Cloud 上確認一下:
https://ithelp.ithome.com.tw/upload/images/20200926/2012962452n9SeD9VI.png
酷!前幾天累積的新知,用起來真順手。


今天發現一個問題,新建的 history-prices-sma Index 的欄位和之前存放日資料的欄位重覆了,接下來我還建週線、月線等 Index,一直用重覆的語法肯定不是最好的方法。所以,明天我要來看看 index-template 了!


上一篇
[Day12] 技術指標計算 - ES + Pandas
下一篇
[Day14] Index Template
系列文
Elastic 戰台股30

尚未有邦友留言

立即登入留言