量化型態學(1): Python偵測高低點 [附程式碼]

一般量化策略比較少去碰觸技術分析中的「型態學」,主因是一般人認為股價型態不容易用程式去辨識。但事實上,型態辨識並不困難。

很多型態的基礎特徵,是股價高低點的相對位置,譬如:M頭、W底。所以型態辨識的第一步就是找出股價高低點。

Python偵測高低點@量化操盤手

接下來,我會教你「如何利用Python自動找出股價高低點」,程式一共用到三種函式庫:

1. ffn用來下載股價資料
2. scipy用來偵測高低點
3. matplotlib用來繪圖

scipy函式庫裡面有一個find_peaks函式,可以藉由計算地形突起度(Topographic Prominence),偵測出股價的峰點(peak),這是出自於測繪學的衡量公式,由於設計精巧,我們把它運用於型態辨識。

在Anaconda內建的Spyder編輯器中,輸入:
# 載入需要用到的函式庫
import ffn # 金融函式庫
import scipy.signal as signal # 信號處理函式庫
import IPython # 互動模組
import matplotlib.pyplot as plt # 繪圖函式庫

# 取得歷史資料
stock = ffn.get('^TWII', column_names=['price']) # 下載加權指數歷史資料

# 自動偵測高低點
threshold = 750 # 設定突起度門檻
peaks = signal.find_peaks(stock['price'], prominence=threshold)[0] # 找相對高點
valleys = signal.find_peaks(-stock['price'], prominence=threshold)[0] # 找相對低點

# 設定圖片輸出位置
IPython.get_ipython().enable_matplotlib(gui='qt') # 圖片輸出於新視窗

# 繪圖
plt.figure()
plt.plot(stock.index, stock['price'], color='grey')
plt.plot(stock.index[peaks], stock['price'][stock.index[peaks]], linewidth=0, marker='v', markersize=10, color='g')
plt.plot(stock.index[valleys], stock['price'][stock.index[valleys]], linewidth=0, marker='^', markersize=10, color='r')
plt.show()


Python高低點偵測@量化操盤手
Python高低點偵測

有了自動偵測高低點的工具,下一步就可以進行型態辨識的工作了!