案例看懂外汇交易机器学习的应用

随着“AlphaGo”、“无人驾驶”、“大数据处理”等名词不断出现在公众视野中,人工智能和机器学习这些概念被频繁提及。很多人认为,2016年是算法时代的起点,2017年人工智能将迎来更快发展。笔者也认同这一趋势,因为基于算法的机器学习是人工智能的核心,运用得当的话,确实能够带来强大助力,为各行各业注入全新活力。

目前,在国内外量化交易领域,已有少数CTA策略或外汇EA会涉及机器学习的内容。那么,机器学习究竟是如何运作的呢?今天,我们就通过一个简单案例,演示如何用机器学习进行外汇行情预测。

直奔主题,直接上操作步骤:

1. 首先,把需要处理的数据准备好。

前三根K线涨幅

当前K线涨幅

下一根大跌(0) /跌(1)/涨(2) /大涨(3)

10.36787091

14.01653763

1

0.56490792

-10.0514786

1

6.024039683

7.334618459

1

14.01653763

-4.792107118

1

-10.0514786

14.47722188

2

7.334618459

31.2593872

3

-4.792107118

11.13596167

0

在MT4中用脚本处理好数据,再写入CSV文件,作为训练数据。

数据总量为1.8万条,采样周期为XAUUSD的1小时K线。

2. 导入数据,进行处理。

import pandas as pd

import numpy as np

from sklearn.cross_validation import train_test_split

from sklearn.preprocessing import StandardScaler

#获取经过MT4处理的数据集

data = pd.read_csv('XAUUSDtick.csv')

#数据X、Y分类

X = data.iloc[:,[1,2]].values

y = data.iloc[:,[3]].values

y = y.ravel()

X_train,X_test,y_train,y_test = train_test_split(X , y , test_size = 0.35, random_state = 0)

sc = StandardScaler()

sc.fit(X_train)

X_train_std = sc.transform(X_train)

X_test_std = sc.transform(X_test)

3. 使用sklearn的感知机模型训练数据。

from sklearn.linear_model import Perceptron

#迭代次数1000次,学习率0.3

ppn = Perceptron(n_iter = 1000, eta0 = 0.3, random_state = 0)

ppn.fit(X_train_std,y_train)

y_pred = ppn.predict(X_test_std)

print 'Misclassified samples:%d' % (y_test != y_pred).sum()

print 'Accuracy:%.2f'% accuracy_score(y_test,y_pred)

接下来,运行代码,得到结果:

Misclassified samples:2942

Accuracy:0.47

案例看懂外汇交易机器学习的应用(图1)

1. 使用逻辑回归模型预测涨跌。

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression(C=1000.0 , random_state =0)

lr.fit(X_train_std,y_train)

y_pred = lr.predict(X_test_std)

print 'Misclassified samples:%d' % (y_test != y_pred).sum()

print 'Accuracy:%.2f'% accuracy_score(y_test,y_pred)

运行一下:

Misclassified samples:2852

Accuracy:0.49

看看学习之后的曲线:

案例看懂外汇交易机器学习的应用(图2)

好了,以上就是一个简单的机器学习案例。如果能够看懂,就会发现它并非高深莫测,写一个机器学习程序也比较简单,但要取得理想结果却相当困难。如果还是不太理解,可以通俗地将其看作一个黑匣子:扔进一堆数据让模型学习,若效果较好,就可以将实时数据交给它进行预测;若效果不佳,则需继续优化。

从上面这个简单的机器学习案例可以看出,该模型不具备明显预测能力,效果并不理想。实际上,用机器学习对金融市场时间序列进行预测,结果往往也不尽如人意。许多实证研究表明,金融时间序列的收益呈现随机波动,不具备自相关特性。

既然机器学习在预测未来行情方面缺乏显著效果,那为什么还要使用它呢?

我们都知道,AlphaGo自称一天能和自己下几百万盘棋,通过无数次自我学习战胜了人类棋手。从统计学角度看,机器学习能够持续训练、反复试错、不断学习,从而提升估计的精度和概率。对于外汇交易而言,机器学习可以很好地应用于交易策略开发,例如在策略参数选择上,可以借助机器学习帮助我们根据市场行情选取较优参数。

机器学习仍在持续发展,既有的积累也容易被快速更新和淘汰。要想深入了解这项技术,持续学习最前沿的知识和理论是必要的。这至少能让我们识别出,外汇市场中很多宣称使用人工智能预测行情的EA,本质上多是营销手段。

正如盈十证券所倡导的理念,机器学习并非高深莫测,关键在于将其应用到合适的领域。

案例看懂外汇交易机器学习的应用(图3)