外汇交易中机器学习应用实例解析

随着“AlphaGo”、“无人驾驶”、“大数据处理”等词汇频繁出现在大众视野中,人工智能和机器学习逐渐成为热门话题。许多人认为,2016年是算法时代的元年,而2017年人工智能将迎来更快速的发展。笔者也认同这一趋势,因为基于算法的机器学习是人工智能的核心,若能合理运用,其能力十分强大,有望为各行各业带来全新变革。

目前,国内外量化交易领域已有一部分CTA策略或外汇EA开始涉及机器学习。那么,机器学习具体是如何运作的呢?本文将通过一个简单案例,演示如何运用机器学习进行外汇行情预测。

下面直接进入正题:

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

前三根K线涨幅

当前K线涨幅

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

10.36787091

14.01653763

1

0.564瑞讯银行外汇平台90792

-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小时周期。

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. 使用逻辑回归模型预测涨跌

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

训练后的曲线如下:

外汇交易机器学习应用实例

以上就是简单的机器学习案例。如果能够理解它,就会发现机器学习并非高深莫测,编写一个机器学习程序也比较简单,但要获得理想的结果却相当困难。如果仍然不能理解,可以通俗地将其视为一个黑匣子(Black Box):将数据投入进行学习,若效果良好,便可将实时数据交给它进行预测;若效果不理想,则需继续优化。

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

既然机器学习在预测未来行情上不具显著性,那么为什么还要应用它呢?

众所周知,AlphaGO自称每天能与自己下数百万盘棋,它通过无数次的自我学习战胜了人类棋手。从统计学角度来看,机器学习能够不断训练、不断犯错、不断学习,从而提高估计的精度和概率。在外汇交易中,机器学习可被很好地应用于交易策略开发,例如在策略参数的选择上,可以利用机器学习辅助我们根据行情选择较优的参数。

机器学习仍在持续发展,已有的积累也容易被快速更新和淘汰。要深入了解这一技术,不断学习最新相关知识是必要的。至少这能帮助我们认识到,外汇市场中许多宣称使用人工智能预测行情的EA,往往更多是营销手段。

还是那句话,机器学习并不神秘,关键在于用对地方。

外汇交易机器学习应用实例