Python 机器学习之 SVM 预测买卖(标的物:比特币)

协程蝉翼
• 阅读 5257

Python入门简单策略 sklearn 机器学习库的使用

  • 什么是 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?

好吧,故事是这样子的:

在很久以前的情人节,大侠要去救他的爱人,但魔鬼和他玩了一个游戏。

魔鬼在桌子上似乎有规律放了两种颜色的球,说:“你用一根棍分开它们?要求:尽量在放更多球之后,仍然适用。”

Python 机器学习之 SVM 预测买卖(标的物:比特币)

于是大侠这样放,干的不错?

Python 机器学习之 SVM 预测买卖(标的物:比特币)

然后魔鬼,又在桌上放了更多的球,似乎有一个球站错了阵营。

Python 机器学习之 SVM 预测买卖(标的物:比特币)

SVM就是试图把棍放在最佳位置,好让在棍的两边有尽可能大的间隙。

Python 机器学习之 SVM 预测买卖(标的物:比特币)

现在即使魔鬼放了更多的球,棍仍然是一个好的分界线。

Python 机器学习之 SVM 预测买卖(标的物:比特币)

然后,在SVM 工具箱中有另一个更加重要的 trick。 魔鬼看到大侠已经学会了一个trick,于是魔鬼给了大侠一个新的挑战。

Python 机器学习之 SVM 预测买卖(标的物:比特币)

现在,大侠没有棍可以很好帮他分开两种球了,现在怎么办呢?当然像所有武侠片中一样大侠桌子一拍,球飞到空中。然后,凭借大侠的轻功,大侠抓起一张纸,插到了两种球的中间。

Python 机器学习之 SVM 预测买卖(标的物:比特币)

现在,从魔鬼的角度看这些球,这些球看起来像是被一条曲线分开了。

Python 机器学习之 SVM 预测买卖(标的物:比特币)

再之后,无聊的大人们,把这些球叫做 「data」,把棍子 叫做 「classifier」, 最大间隙trick 叫做「optimization」, 拍桌子叫做「kernelling」, 那张纸叫做「hyperplane」。

参考:

Please explain Support Vector Machines (SVM) like I am a 5 year old. : MachineLearning

Support Vector Machines explained well

https://www.youtube.com/watch...

Python 机器学习之 SVM 预测买卖(标的物:比特币)

[以上例子引用自 网络,侵删]

  • 一个 SVM 应用于 bitcoin trading 的 DEMO

    回测系统自带的库有
    实现语言 Python 2

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

实盘需要在托管者所在机器安装策略需要的库

OK , Talk is cheap, Show code to you!

from sklearn import svm
import numpy as np

def 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)
                

小样本测试 预测对的概率是 三分之一, 是不是很有趣!(预测情况分三种 涨、跌、横盘)
原文链接 : https://www.botvs.com/strateg...

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4年前
怎么操作能使Python代码运行起来速度飞快?
Python是开发人员当中流行的编程语言之一。它应用广泛,无论是Web开发还是机器学习。Python大受欢迎的原因有很多,比如社区支持、出色的库、广泛用于机器学习和大数据以及简单的语法。尽管有这么多优点,Python还是有一个缺点:速度慢。作为一种解释性语言,Python的速度不如其他编程语言。不过,我们可以用几个技巧来克服这个问题。本文将分享几个Pytho
Aimerl0 Aimerl0
4年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
Stella981 Stella981
3年前
BAT机器学习面试153题:SVM xgboost 特征工程你都会么
前言本博客曾经在10~13年连续4年整理过各大公司数据结构和算法层面的笔试题、面试题,很快,2014年之后,机器学习大伙,很多公司开始招AI方面的人才,很多同学也会从网上找各种各样的机器学习笔试题、面试题,但和数据结构方面的题不同,AI的题网上极少。2017年起,我和团队开始整理BAT机器学习面试1000题系列,近百万人开始追踪,目前七月在线官
Stella981 Stella981
3年前
OpenCV3的机器学习算法SVM-使用Python
OpenCV3的机器学习算法SVM-使用Pythonhttp://docs.opencv.org/master/d4/db1/tutorial\_py\_svm\_basics.html(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fdocs.opencv.org%2Fmas
Stella981 Stella981
3年前
CentOS KVM种种
安装启用kvm必须在64位系统,soCentOS6.2\_64前提:物理机支持虚拟化技术,intel的VT和AMD的SVM技术,在BIOS中启用虚拟化支持;检查命令:egrep'vmx|svm'/proc/cpuinfo应该出现vmx或svm字样的安装请参考:http://www.centos.bz/2012/03
Stella981 Stella981
3年前
Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM
转载请注明作者和出处:https://zhuanlan.zhihu.com/mljack机器学习知乎专栏:https://zhuanlan.zhihu.com/mljackCSDN博客专栏:http://blog.csdn.net/column/details/16415.htmlGithub代码获取:https://github.c
Stella981 Stella981
3年前
KVM学习笔记
1.查看主机是否支持KVM,egrepc'(vmx|svm)'/proc/cpuinfo2.如果单台虚机的vCPU数量大于物理vCPU的数量,会带来明显性能损失。3.VirtualBox创建的虚拟机目前不支持InterVTx/EPT等虚拟化,所以直接使用vmvare创建虚拟机,然后安装kvm即可。使用qemu创建虚拟机时,一定要启
Stella981 Stella981
3年前
Python——sklearn 中 Logistics Regression 的 coef_ 和 intercept_ 的具体意义
sklearn中LogisticsRegression的coef\_和intercept\_的具体意义​使用sklearn库可以很方便的实现各种基本的机器学习算法,例如今天说的逻辑斯谛回归(LogisticR
马尚 马尚
1年前
用Python和机器学习识别英文数字验证码
在本项目中,我们将展示如何使用Python和机器学习技术来识别英文数字验证码。英文数字验证码通常包含了一系列随机生成的字母和数字,我们将利用机器学习模型来训练识别这些验证码。首先,我们需要导入所需的库:pythonimportosimportnumpyas