KD 以及 均線,現在我們要丟給機器學習,
然後預測漲跌了!!
------------------------------------------------------------------------------------------------------------
Step 8 : TRAINING
在訓練之前呢,我一樣習慣看看到底特徵們都長怎樣,
也可以確定說,這筆特徵經過剛剛的處理後,是否有不合理的地方。
所以我們打開 twfuture.py 檔案,繼續加入以下程式碼,
儲存後,在終端機輸入
應該會看到這個
上面是台股指數從 1999 年到今天的每日收盤價,黑紅藍分別為,日線、週線、月線。
可以明顯看出,2000 年科技泡沫和 2008 年金融海嘯對台股的影響。
圖下方為 RSV 以及 K9 and D9,值都在 0 ~ 100 之間,把下圖拉近看看,
符合 z-transform 後,判斷為低通濾波關係之理解。
到這邊,就確定我們的特徵資料都沒問題,可以丟去餵給機器了!
我們把 plt.show() comment out。
在底下繼續加入以下程式碼,
這邊呢,我們匯入 2000 ~ 2015 的資料給機器做學習,
給的 Label 呢,就是當天的漲跌,
我們就定義最後成交價 > 開盤價為 1(漲),最後成交價 < 開盤價為 0(跌),
然後匯入昨天的 'y_K9','y_D9','y_close_mvag5','y_close_mvag20' 當作特徵。
一樣在終端機輸入,就可以看到你的 accuracy 了!
看到了嗎?
我想你應該沒看錯,大概就是 0.5 ~ 0.55 左右的命中率,
如果低於 0.5 代表你的機器真的很笨,哈哈哈哈!
你可能會想說,那跟丟銅板不是差不多嗎?
對。
但是都做到這邊了,能怎麼辦?
就只好繼續完成剩下的步驟,再來檢討到底出了什麼問題。
------------------------------------------------------------------------------------------------------------
Step 9 : BACKTEST
通常一般公司,跑回測就是給他跑個十幾年,
我們現在也要寫一套程式碼,來回測我們的機器,
寫回測方法之前,我們先加上以下程式碼做準備。
作多的時候,就是因為機器預測指數漲,
所以我們把 close_best_bid - open,做空則反之。
準備好這個,就可以開始寫回測的方法,
因為太長,所以我放到下一集。
------------------------------------------------------------------------------------------------------------
Reference
[1] 期貨 wikipedia
[2] 股票指數 wikipedia
[3] 台灣期貨交易所, http://www.taifex.com.tw/
[4] Codecademy, https://www.codecademy.com/
[5] A beautiful soup, https://www.crummy.com/software/BeautifulSoup/bs4/doc/
[6] Pickle, https://docs.python.org/2/library/pickle.html
[7] Scikit-Learn, http://machine-learning-python.kspax.io
[8] Scikit-Learn, http://scikit-learn.org/stable/
[9] INVESTOPEDIA, http://investopedia.com
[10] Wikiwand, http://www.wikiwand.com/
[11] z-transform, https://zh.wikipedia.org/wiki/Z轉換
下一集:
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(七)
Step 8 : TRAINING
在訓練之前呢,我一樣習慣看看到底特徵們都長怎樣,
也可以確定說,這筆特徵經過剛剛的處理後,是否有不合理的地方。
所以我們打開 twfuture.py 檔案,繼續加入以下程式碼,
style.use('fivethirtyeight')
ax1 = plt.subplot2grid((2,1),(0,0))
ax2 = plt.subplot2grid((2,1),(1,0), sharex= ax1)
df[['close','close_mvag5', 'close_mvag20']].plot(ax= ax1, linewidth=3, color=['k','r','b'])
df[['RSV','K9','D9']].plot(ax= ax2, linewidth=3, color=['r','g','b'])
plt.show()
儲存後,在終端機輸入
python twfuture.py
應該會看到這個
上面是台股指數從 1999 年到今天的每日收盤價,黑紅藍分別為,日線、週線、月線。
可以明顯看出,2000 年科技泡沫和 2008 年金融海嘯對台股的影響。
圖下方為 RSV 以及 K9 and D9,值都在 0 ~ 100 之間,把下圖拉近看看,
可以發現,藍線是最平滑的,綠線次之,紅線最後,
符合 z-transform 後,判斷為低通濾波關係之理解。
到這邊,就確定我們的特徵資料都沒問題,可以丟去餵給機器了!
我們把 plt.show() comment out。
在底下繼續加入以下程式碼,
df = df.loc[date(2000,1,1):date(2015,12,31)]
labels = []
for i in range(len(df.index)):
if df['open'][i] < df['settlement'][i]:
labels.append(1)
else:
labels.append(0)
df['labels'] = pd.Series(labels, index= df.index)
X = np.array(df[['y_K9','y_D9'
,'y_close_mvag5','y_close_mvag20']])X = preprocessing.scale(X)
y = np.array(df['labels'])
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,y,test_size=0.2)
clf = neighbors.KNeighborsClassifier()
clf.fit(X_train, y_train)
accuracy = clf.score(X_test, y_test)
print ('accuracy', accuracy)
這邊呢,我們匯入 2000 ~ 2015 的資料給機器做學習,
給的 Label 呢,就是當天的漲跌,
我們就定義最後成交價 > 開盤價為 1(漲),最後成交價 < 開盤價為 0(跌),
然後匯入昨天的 'y_K9','y_D9','y_close_mvag5','y_close_mvag20' 當作特徵。
一樣在終端機輸入,就可以看到你的 accuracy 了!
python twfuture.py
我想你應該沒看錯,大概就是 0.5 ~ 0.55 左右的命中率,
如果低於 0.5 代表你的機器真的很笨,哈哈哈哈!
你可能會想說,那跟丟銅板不是差不多嗎?
對。
但是都做到這邊了,能怎麼辦?
就只好繼續完成剩下的步驟,再來檢討到底出了什麼問題。
------------------------------------------------------------------------------------------------------------
Step 9 : BACKTEST
通常一般公司,跑回測就是給他跑個十幾年,
我們現在也要寫一套程式碼,來回測我們的機器,
寫回測方法之前,我們先加上以下程式碼做準備。
# 做多的賺賠 = 收盤最佳買價 - 開盤價
df['long'] = df['close_best_bid'] - df['open']
# 做空的賺賠 = 開盤價 - 收盤最佳賣價
df['short'] = df['open'] - df['close_best_ask']
作多的時候,就是因為機器預測指數漲,
所以我們把 close_best_bid - open,做空則反之。
準備好這個,就可以開始寫回測的方法,
因為太長,所以我放到下一集。
------------------------------------------------------------------------------------------------------------
Reference
[1] 期貨 wikipedia
[2] 股票指數 wikipedia
[3] 台灣期貨交易所, http://www.taifex.com.tw/
[4] Codecademy, https://www.codecademy.com/
[5] A beautiful soup, https://www.crummy.com/software/BeautifulSoup/bs4/doc/
[6] Pickle, https://docs.python.org/2/library/pickle.html
[7] Scikit-Learn, http://machine-learning-python.kspax.io
[8] Scikit-Learn, http://scikit-learn.org/stable/
[9] INVESTOPEDIA, http://investopedia.com
[10] Wikiwand, http://www.wikiwand.com/
[11] z-transform, https://zh.wikipedia.org/wiki/Z轉換
下一集:
[機器學習練習] [Machine Learning Practice] 用 Scikit 學習台灣指數趨勢(七)
您好想請問為何在執行 df = df.loc[date(2000,1,1):date(2015,12,31)]時會出現TypeError
回覆刪除找了好久一直找不出原因來
我是用 python 2.7,如果你是用 3.4 建議你把 crawler 那邊重新執行一次,爬一次自己的資料。
回覆刪除或者是你把 terminal 的訊息貼一下,不然我這樣也不是很了解。
成功了!!!最後我在匯入2000 ~ 2015資料上面加入了底下這行
刪除df.set_index('date', inplace=True)
似乎是date設成index的時候沒有用inplace的話,dataframe的index不會變,還會是最左邊那排預設值
嗯嗯嗯!pandas 很多方法都有 inplace 這個變數,sort_index, drop, 對於DataFrame做操作的,若將 inplace 設成 True 就是直接在這個 DataFrame 作轉換不會匯出值。
刪除