今天的目標,是建立新的技術指標 Index,並利用 Talib 計算技術指標:移動平均線。
TA-Lib 是基於 Python 的一個計算各種金融數據指標的套件,目前支援 158 種指標,你想得到的移動平均線、MACD、KD... 等,都可以計算。其實目前成名的股票大師,大多都不會看超過5個指標,所以 TA-Lib 是同好圈中的首選,沒有其它。TA-Lib 的安裝可見官方的 Github。Day08 我分享的 Dockerfile 已包含 TA-Lib 的安裝,有興趣的朋友可以參考。
我很欣賞林恩如老師的超簡單投資法,方法中採用的技術指標就是 20 週移動平均線,也就是 100 日線。在她的長線選股邏輯中,一個必要條件就是股價要站在 100 日線上。現在就來玩玩看 Talib 吧。利用 Day12 的程式碼,我取 2317 的 30 天盤後資料(如下圖)。
使用 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 日線。
我在 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 上確認一下:
酷!前幾天累積的新知,用起來真順手。
今天發現一個問題,新建的 history-prices-sma Index 的欄位和之前存放日資料的欄位重覆了,接下來我還建週線、月線等 Index,一直用重覆的語法肯定不是最好的方法。所以,明天我要來看看 index-template 了!