一個基於機器學習的打板策略分享(三)

版權所有:光明與黑暗([email protected])

原文再續又書接上一回,為什麼我說「又」呢?因為這是第三回了啊.在上一節,我分享了用小波變換截取OBV信號特徵點,那麼在這一節我們將會真正引入機器學習框架tslearn通過監督學習來對OBV信號進行監督分類.

首先界定我們要觀察的對象範圍:即什麼叫觸及漲停.根據個人的理解,我將單日向上振幅達到+8%的股票定義為觸及漲停:

#計算向上振幅
amplitude=df_stock_daily.iloc[i][high]/df_stock_daily.iloc[i][pre_close]

然後我定義兩個數組:

#存放小波變換的信號數據
stock_minute_train_data=[]
#存放最後是否能封板標籤數據,
stock_minute_label_data=[]

#很簡單的部分,就是遍歷所有的股票構建訓練數據:

time_series_temp=to_time_series(A2)
stock_minute_train_data.append(time_series_temp)
#如果最後漲幅大於9%就標記為1,反之標記為0
if(pct_chg>=9):
stock_minute_label_data.append(1)
else:
stock_minute_label_data.append(0)

#循環結束後保存為兩個本地文件,一個用於保存信號訓練數據,一個用於保存標籤數據

ts_train=to_time_series_dataset(stock_minute_train_data,dtype=np.float32)
where_are_nan = np.isnan(ts_train)
ts_train[where_are_nan] = 0
save_timeseries_txt(stock_minute_train_data.txt, ts_train)
np.savetxt(stock_minute_label_data.csv, stock_minute_label_data,delimiter=,)

接下來咱們要敲黑板了:第一個重點DTW! 什麼是DTW呢? DTW (Dynamic Time Warping) 是一種演算法,它基於動態規劃的思想,可以衡量兩個長度不一致時間序列的相似度.

第二個重點:監督學習

監督學習是從標記的訓練數據來推斷一個功能的機器學習任務。訓練數據包括一套訓練示例。在監督學習中,每個實例都是由一個輸入對象(通常為矢量)和一個期望的輸出值(也稱為監督信號)組成。監督學習演算法是分析該訓練數據,併產生一個推斷的功能,其可以用於映射出新的實例。一個最佳的方案將允許該演算法來正確地決定那些看不見的實例的類標籤。這就要求學習演算法是在一種「合理」的方式從一種從訓練數據到看不見的情況下形成。

第三個重點:時間序列分析框架tslearn

Tslearn是一個分析時間序列的機器學習工具,它基於numpy、scikit-learn和scipy構建,內部封裝了dtw、soft-dtw、euclidean、sqeuclidean、cityblock等演算法。可以幫我們衡量兩個小波變換後的高頻信號的相似度並給出相似度。GitHub地址:github.com/rtavenar/tsl 牆裂推薦。

那我們的演算法總體思路是怎麼樣的呢? 讓我們重溫一下:

  1. 通過引入相對變化價成交量占自由流通股本比例標準化分鐘K線;
  2. 通過Talib的內置演算法,基於價在量先,價量結合的原則得出OBV信號;
  3. 通過小波變換提取OBV信號中的高頻部分;
  4. 通過DTW監督學習對信號進行分類學習;
  5. 檢驗監督學習準確率,串列化模型文件,進行實盤測試.

下面我們直接給出訓練代碼:

from tslearn.utils import save_timeseries_txt ,load_timeseries_txt,ts_zeros
from tslearn.utils import to_time_series_dataset,to_time_series
from tslearn.neighbors import KNeighborsTimeSeriesClassifier
clf = KNeighborsTimeSeriesClassifier(n_neighbors=2,metric="dtw")
X=load_timeseries_txt(stock_minute_train_data.txt)
y=np.loadtxt(stock_minute_label_data.csv,delimiter=,,dtype=int)
clf.fit(X, y)
print(clf.score(X, y))

訓練結果如何呢?在4月17日的數據中,共有253隻股票達到觸及漲停標準.通過監督分類學習,我們的模型準確率約為77.86%.

看上去是一個不錯的分類結果哦,那到底我們能不能用於實戰呢?敬請期待本系列最終章.

話說已經水到第三章了,但是關注跟回復都還停留在2位數哦.傷心……


推薦閱讀:
相关文章