300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 用Python实现一个SVM分类器策略

用Python实现一个SVM分类器策略

时间:2022-02-12 19:00:56

相关推荐

用Python实现一个SVM分类器策略

独角兽企业重金招聘Python工程师标准>>>

支持向量机(SVM)是什么意思?

正好最近自己学习机器学习,看到reddit上 Please explain Support Vector Machines (SVM) like I am a 5 year old 的帖子,一个字赞!于是整理一下和大家分享。(如有错欢迎指教!)

什么是SVM?

支持向量机/support vector machine (SVM)。当然首先看一下wiki.

Support Vector Machines are learning models used for classification: which individuals in a population belong where? So… how do SVM and the mysterious “kernel” work?

好吧,故事是这样子的:

在很久以前的情人节,大侠要去救他的爱人,但魔鬼和他玩了一个游戏。魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。” ..... 文章 详细内容 地址:/bbs-topic/680

我们来用Python 实现一个 SVM 分类器 预测 买卖

程序是 基于发明者量化平台的,标的物选择为电子货币,因为电子货币适合回测。Python机器学习之SVM 预测买卖,Python入门简单策略 sklearn 机器学习库的使用, 回测系统自带的库有:

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

实盘需要在托管者所在机器安装策略需要的库,策略源码地址: /strategy/21370

from sklearn import svmimport numpy as npdef main():preTime = 0n = 0success = 0predict = NonepTime = NonemarketPosition = 0initAccount = exchange.GetAccount()Log("Running...")while True:r = exchange.GetRecords()if len(r) < 60:continuebar = r[len(r)-1]if bar.Time > preTime:preTime = bar.Timeif pTime is not None and r[len(r)-2].Time == pTime:diff = r[len(r)-2].Close - r[len(r)-3].Closeif diff > SpreadVal:success += 1 if predict == 0 else 0elif diff < -SpreadVal:success += 1 if predict == 1 else 0else:success += 1 if predict == 2 else 0pTime = NoneLogStatus("预测次数", n, "成功次数", success, "准确率:", '%.3f %%' % round(float(success) * 100 / n, 2))else:Sleep(1000)continueinputs_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 = 0diff = r[i+1].Close - r[i].Closeif diff > SpreadVal:Y = 0sets[0] = Trueelif diff < -SpreadVal:Y = 1sets[1] = Trueelse:Y = 2sets[2] = Trueoutput_Y.append(Y)if None in sets:Log("样本不足, 无法预测 ...")continuen += 1clf = svm.LinearSVC()clf.fit(inputs_X, output_Y)predict = clf.predict(np.array([bar.Open, bar.Close]).reshape((1, -1)))pTime = bar.TimeLog("预测当前Bar结束:", bar.Time, ['涨', '跌', '横'][predict])if marketPosition == 0:if predict == 0:exchange.Buy(initAccount.Balance/2)marketPosition = 1elif predict == 1:exchange.Sell(initAccount.Stocks/2)marketPosition = -1else:nowAccount = exchange.GetAccount()if marketPosition > 0 and predict != 0:exchange.Sell(nowAccount.Stocks - initAccount.Stocks)nowAccount = exchange.GetAccount()marketPosition = 0elif marketPosition < 0 and predict != 1:while True:dif = initAccount.Stocks - nowAccount.Stocksif dif < 0.01:breakticker = 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:breaknowAccount = exchange.GetAccount()marketPosition = 0if marketPosition == 0:LogProfit(_N(nowAccount.Balance - initAccount.Balance, 4), nowAccount)

阅读原文

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。