外汇交易中机器学习应用实例解析
随着“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,往往更多是营销手段。
还是那句话,机器学习并不神秘,关键在于用对地方。

