Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

如何基于机器学习设计一套智能交易系统?

在以后的几篇博文中我们会陆续讨论设计、开发和测试一个具有机器学习能力的人工智能股票与外汇交易系统。机器学习是一个新的领域,它是「基于统计学算法的数据挖掘技术」的另一个名称。计算机日新月异的计算能力提升使机器学习技术成为了可能。在我们更多的讨论这个问题之前,我希望读者先了解机器学习以及它的一些应用,比如垃圾邮件检测,手写识别以及语音识别技术等等。


R 语言是一门被世界各地学者开发出来的强有力的编程语言,它被用来执行一些用在机器学习领域的统计学算法。R 语言是可以被免费下载的开源软件。在前面几篇文章中我们讨论了如何使用 R 语言来改良我们的交易系统。在继续之前推荐您先浏览一下 如何用R语言开发自己的基于算法的交易系统 。现在我们面临的问题是如何在开始套用 R 语言提供的不同统计模型之前正确将数据格式化。


前面的有篇文章提到过 ARIMA (自回归积分滑动平均模型)和 GARCH (广义自回归条件异 方差 (模型)。不幸的是,ARIMA+GARCH 的强强组合在预测一个时间段的股票和汇率时表现并不理想。神经网络和向量机是时下被数据分析师们广泛使用的机器学习算法,希望了解更多的读者可以阅览一下我以前介绍向量机的视频内容。


神经网络模拟使用人脑的方式使用人工智能。 随着这篇文章对神经网络和向量机更详细的介绍,读者也可以参照这篇 讨论预测英镑美元之间汇率方法的论文的文章 。当你对金融时间序列进行预测时,你应该尽可能多的使用投资回报来预测,因为其结果往往更准确,神经网络算法非常擅长进行图像识别。除此之外,也可以参考 KNN 近邻取样(Nearest Neighbor)和隐马尔科夫模型算法 (Hidden Markov Chain)。


设计基于机器学习的人工智能股票外汇交易系统


我们希望初步设计一个可以根据预测每日收益来自动进行交易的系统。我们选择一个市场变化的阈值,达到这个阈值后我们才会发生交易操作。举个例子来说,我们想用我们的交易系统来预测一对外汇组合在接下来的 24 小时会朝哪个方向变化,变多少个点。假设我们选择了一组外汇 24 小时内 200 点的变动作为阈值。我们的机器学习算法应该做到能够预测向 2 个方向浮动 200 点的分别的可能性。如果英镑对美元在未来 24 小时内上涨 200 个点的可能性是 70% 到 80%,我们就使用对 K 线图的理解进行低买高卖来获取预期 200 个点的回报。切记,所有的统计算法本质上都是概率性的。


下面就是我们要怎么做。我们先计算我们选定的股票或一组外汇当日的收益,然后再预测下一日的 K 线图。然后再运用上文提到的算法来参照计算得到的每日收益数据组来训练交易系统。一旦我们教会了交易系统每日收益数据组,我们就用它来预测下一日的情况。这样可以帮助我们优化交易选择。就像前面提到的,交易系统其实就是跟概率打交道。这就是说,长期地看,预测成真的平均比率将大致等于该预测的概率。


我们也想缩小范围,以四个小时或者一个小时为单位来预测下一个单位时间的 K 线图来看看预测准确率是否达到70%-80%。如果我们的平均预测成功率超过了70%,就可以考虑去交易市场里赚的风生水起了,所以还等什么?让我们开始吧!


如何把数据读入到R语言内呢?


正如前文所说,我们将会使用 R 语言来进行预测。你可以免费下载 R 语言。下载 R 语言之后,我们需要向其中导入数据。我们拿嘉盛举例。嘉盛的行情交易软件 mt4( metaTrader4 )允许用户下载所有支持外汇组行情的 CSV 格式文件。打开 MT4 软件,选择工具( Tools )→历史中心( History Center ).然后下载以今天、过去四小时和一小时为单位的数据文件。然后用下列命令来读取欧元兑美元的每日 CSV 数据文件并导入 R 语言:


quotes <- read.csv(“E:/MarketData/EURUSD1440.csv”, header=FALSE)


其中E指代的是储存欧元兑美元的一日 CSV 文件的磁盘盘符,你也可以把数据文件保存在 C 盘, D 盘等磁盘。注意根据存文件的位置修改命令中的磁盘位置。同样你也可以导入四个小时和一个小时的数据文件:


quotes <- read.csv(“E:/MarketData/GBPUSD240.csv”, header=FALSE)


quotes <- read.csv(“E:/MarketData/EURUSD60.csv”, header=FALSE)


现在以上数据就被读取成了 R 语言中最常用的数据格式——数据框(dataframe)。数据框类似一个矩阵。我们需要把现有的数据框转化成按时间序列表示。就像前面提到过的,股票外汇的价格是与时间紧密联系的,这样就形成了一个价格的时间序列。所以我们需要把原始数据转换成时间序列模式来使 R 语言能够处理。xts 是一个在 R 语言里最好用的时间序列类。 所以我们顺理成章的把前面数据转换成 xts 。现在我们需要使用以下命令来把每日的数据框转化成按日为单位划分的时间序列:


x <- as.xts(quotes[,-(1:2)], as.Date(paste(quotes[,1]),format=’%Y.%m.%d’))


同理,我们也可以转化四小时和一小时的数据框为 xts 时间序列:


x <- as.xts(quotes[,-(1:2)], as.POSIXct(paste(quotes[,1],quotes[,2]),format=’%Y.%m.%d %H:%M’))


发现不同了吗?机智的读者可能已经发现了在按日为单位的时候时间格式是Date %Y.%m.%d,而按小时的时候则是OSIXct %Y.%m.5d %H:%M.为什么呢?这里有个规则。一天之内的时间区间我们需要考虑小时和分钟,而当按天和周为单位的数据我们将忽略小时和分钟,最小时间间隔为小时。在进一步使用上面命令转化好的 xts 时间序列数据之前,不要忘记在时间序列里命名数据列,可以用以下命令实现:


colnames(x) ←c(‘Open’,’High’,’Low’,’Close’,’Volume’)


显而易见,第一列是索引列并与时间绑定了起来。几个数据列分别是Open,High,Low,Close,Volume.


前面讲到的都是针对 Forex 而言。如果你只是简单的处理股票交易,数据读取会变得简单的多。我们可以直接从 Yahoo 金融下载数据文件,你甚至可以直接从 R 里面下载。R 语言的另一个优点是自动把得到的数据转化成 xts 时间序列。你只需要下载安装 Quantmod 安装包就可以简单做到。安装了 Quantmod 的 R 语言可以被用来实现 K 线图描绘以及大部分的技术性分析工作。Quantmod 的应用将在后面的文章详细解释。现在我们只需要使用下列命令下载亚马逊每日价格:


library(quantmod)


首先我们把 Quantamod 库导入R。


getSymbols(“AMZN”, from = “2010-01-01”, to = “2016-04-05”)


上面的命令可以使我们轻松得到 2010 年到 2016 年每天的股票价格。现在我们需要转化这些数据到不同的格式来满足我们的不同需要。


colnames(AMZN) <- c(“Open”, “High”, “Low”, “Close”, “Volume”, “AdjClose”)


你也可以实用 R语言里的 tseries 库来从网上下载数据,使用下列命令既可:


library(tseries)


 AMZN <- as.xts(get.hist.quote(“AMZN”,start=”2010-01-02″, quote=c(“Open”, “High”, “Low”, “Close”,”Volume”,”AdjClose”)))


下面解释一下上面的命令。首先我们导入 tseries 库。然后我们就可以使用 get.hist.quote 命令来下载 Amazon(AMZN)的数据。你可以下载任意股票的数据,简单的将上述命令中的 AMZN 替换成任意你感兴趣的股票代号,R 就会替你自动完成。数据会被下载成 zoo 对象,我们需要将其限制成 xts 时间序列对象。这就是我们在上述命令中使用 as.xts 的原因。


在这篇文章中我们已经展示了如何从 MT4 里面读取 forex 外汇组(数据)以及如何使用 R 语言从网上轻易的读取每日股票交易信息。切记注意下载数据的时间格式是否正确,不正确的时间格式会在使用统计学算法时对训练和预测造成很大影响。比如,我们在上述命令中就使用了 as.xts 来把数据限制成特定的时间序列。


正如我们前面所说,接下来我们要使用统计学算法来预测在接下来某个特定时间内,外汇组或者股票是否会增加或减少特定的百分比。在下篇文章里,我们会一起讨论如何来实现。



工程机器学习金融工程
2
暂无评论
暂无评论~