Python 機器學習之 SVM 預測買賣(標的物:比特幣)

Python 機器學習之 SVM 預測買賣

Python入門簡單策略 sklearn 機器學習庫的使用

回測系統自帶的庫有

numpy pandas TA-Lib scipy statsmodels sklearn cvxopt hmmlearn pykalman arch matplotlib

實盤需要在託管者所在機器安裝策略需要的庫

from sklearn import svmimport numpy as npdef main(): preTime = 0 n = 0 success = 0 predict = None pTime = None marketPosition = 0 initAccount = exchange.GetAccount() Log("Running...") while True: r = exchange.GetRecords() if len(r) < 60: continue bar = r[len(r)-1] if bar.Time > preTime: preTime = bar.Time if pTime is not None and r[len(r)-2].Time == pTime: diff = r[len(r)-2].Close - r[len(r)-3].Close if diff > SpreadVal: success += 1 if predict == 0 else 0 elif diff < -SpreadVal: success += 1 if predict == 1 else 0 else: success += 1 if predict == 2 else 0 pTime = None LogStatus("預測次數", n, "成功次數", success, "準確率:", "%.3f %%" % round(float(success) * 100 / n, 2)) else: Sleep(1000) continue inputs_X, output_Y = [], [] sets = [None, None, None] for i in xrange(1, len(r)-2, 1): inputs_X.append([r[i].Open, r[i].Close]) Y = 0 diff = r[i+1].Close - r[i].Close if diff > SpreadVal: Y = 0 sets[0] = True elif diff < -SpreadVal: Y = 1 sets[1] = True else: Y = 2 sets[2] = True output_Y.append(Y) if None in sets: Log("樣本不足, 無法預測 ...") continue n += 1 clf = svm.LinearSVC() clf.fit(inputs_X, output_Y) predict = clf.predict(np.array([bar.Open, bar.Close]).reshape((1, -1))) pTime = bar.Time Log("預測當前Bar結束:", bar.Time, ["漲", "跌", "橫"][predict]) if marketPosition == 0: if predict == 0: exchange.Buy(initAccount.Balance/2) marketPosition = 1 elif predict == 1: exchange.Sell(initAccount.Stocks/2) marketPosition = -1 else: nowAccount = exchange.GetAccount() if marketPosition > 0 and predict != 0: exchange.Sell(nowAccount.Stocks - initAccount.Stocks) nowAccount = exchange.GetAccount() marketPosition = 0 elif marketPosition < 0 and predict != 1: while True: dif = initAccount.Stocks - nowAccount.Stocks if dif < 0.01: break ticker = exchange.GetTicker() exchange.Buy(ticker.Sell + (ticker.Sell-ticker.Buy)*2, dif) while True: Sleep(1000) orders = exchange.GetOrders() for order in orders: exchange.CancelOrder(order.Id) if len(orders) == 0: break nowAccount = exchange.GetAccount() marketPosition = 0 if marketPosition == 0: LogProfit(_N(nowAccount.Balance - initAccount.Balance, 4), nowAccount)

小樣本測試 預測對的概率是 三分之一, 是不是很有趣!(預測情況分三種 漲、跌、橫盤)

BotVS 原創

原文鏈接 : botvs.com/strategy/2137


推薦閱讀:

Python魔法方法指南
【深度技術】小試牛刀:使用Python模擬登錄知乎
認準目標,前進
Python3實現TCP埠掃描器

TAG:比特币Bitcoin | 量化交易 | Python |