随着投资者在金融市场上的投资规模不断扩大,如何提高交易效率、降低风险成为了众多投资者的问题。编写 EA (Expert Advisor)是自动化交易的一种常用方法。这篇文章将帮助初学者快速掌握 EA 编写技巧,结合深度学习和 Python 语言,实现自动交易。
一、介绍
EA(Expert Advisor)编写是指通过程序自动执行交易策略的过程。传统的手工交易需要人眼观察市场变化,判断并执行操作。而通过编写 EA,可以将程序预设规则与市场变化结合起来,使机器来执行操作,从而提高交易效率和降低投资风险。
目前 EA 主要运行在 MT4 (MetaTrader 4) 和 MT5 (MetaTrader 5) 平台上。这两种平台均支持 MQL (MetaQuotes Language) 程序语言编写 EA。
二、MQL 语言基础
1. MQL4 语言
MQL4 是一种类似于 C++ 的面向对象程序设计语言,用于编写 MT4 平台上的 EA。除了基本的数据类型外,还包括数组、结构体等。
以下是一个简单的 MQL4 代码例子:
“`cpp
int start(){
double price = MarketInfo(“EURUSD”, MODE_LAST);
Print(“当前 EURUSD 价格是:” + price );
return(0);
}
“`
该代码用于获取当前 EURUSD 的最新价格,并打印出来。
2. MQL5 语言
MQL5 是 MQL4 的升级版本,用于编写 MT5 平台上的 EA。MQL5 引入了许多新特性,如面向对象编程支持更加完善,同时也是基于 C++11 标准编写的。
以下是一个简单的 MQL5 代码例子:
“`cpp
int OnStart(){
double price = SymbolInfoDouble(_Symbol,SYMBOL_LAST);
Print(“当前 ” + _Symbol + ” 价格是:” + price );
return(0);
}
“`
该代码用于获取当前交易品种的最新价格,并打印出来。
三、Python 语言与深度学习
Python 是一种高级、通用、解释型的编程语言,因其易读性、可维护性和丰富的库而广受欢迎。深度学习则是一种通过“深层神经网络”实现对数据的预测和分类的方法。
在编写 EA 过程中,使用 Python 可以较为方便地进行数据处理和算法实现。而深度学习则可以提供更加准确和鲁棒的预测模型,帮助投资者更好地制定交易策略。
以下是一个简单的 Python 代码实现一个简单的神经网络算法:
“`python
import numpy as np
# 输入样本数据
X = np.array([[0,0,1],
[0,1,1],
[1,0,1],
[1,1,1]])
# 标签值
y = np.array([[0],[1],[1],[0]])
# 定义一个如下形式的神经网络:3输入——4隐藏层——1输出
class NeuralNetwork():
def __init__(self):
np.random.seed(1)
self.synaptic_weights_0 = 2 * np.random.random((3, 4)) – 1
self.synaptic_weights_1 = 2 * np.random.random((4, 1)) – 1
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(self, x):
return x * (1 – x)
def train(self, X, y, iterations):
for i in range(iterations):
l0 = X
l1 = self.sigmoid(np.dot(l0, self.synaptic_weights_0))
l2 = self.sigmoid(np.dot(l1, self.synaptic_weights_1))
# 计算误差和调整权重
l2_error = y – l2
l2_delta = l2_error * self.sigmoid_derivative(l2)
l1_error = l2_delta.dot(self.synaptic_weights_1.T)
l1_delta = l1_error * self.sigmoid_derivative(l1)
self.synaptic_weights_1 += l1.T.dot(l2_delta)
self.synaptic_weights_0 += l0.T.dot(l1_delta)
def predict(self, X):
l1 = self.sigmoid(np.dot(X, self.synaptic_weights_0))
l2 = self.sigmoid(np.dot(l1, self.synaptic_weights_1))
return l2
# 训练神经网络
neural_network = NeuralNetwork()
neural_network.train(X, y, 10000)
# 预测并输出预测结果
print(neural_network.predict(np.array([1,0,1])))
“`
该代码用于实现一个简单的三层神经网络,用于进行二分类任务。
四、结合 MQL4/MQL5 和 Python 实现自动交易
在编写 EA 时,可以结合 MQL4/MQL5 和 Python 语言,实现更为复杂和准确的交易策略。
以下是一个简单的 Python 代码及 MQL5 代码来实现交易操作:
“`python
import requests
# 请求 API 汇率数据
response = requests.get(“https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&from_currency=BTC&to_currency=USD&apikey=demo”
data = response.json()
# 解析数据并计算交易结果
exchange_rate = float(data[‘Realtime Currency Exchange Rate’][‘5. Exchange Rate’])
if exchange_rate > 60000:
position_order(1) # 买进开仓
elif exchange_rate < 58000:
position_order(-1) # 卖出开仓
def position_order(direction):
# 根据传递的方向参数进行处理,调用 MT5 平台 MqlTradePositionOpen() 函数进行开仓交易操作
return;
“`
“`cpp
#include <Python.h>
void position_order(int direction){
// 在 C++ 中使用 Python #position_order() 函数进行开仓交易操作
char *command = “from main import position_order\r\nposition_order(%d)\r\n”;
char buf[256];
Py_Initialize();
PyObject *pModule = PyImport_AddModule(“__main__”);
PyRun_SimpleString(“import sys”);
PyRun_SimpleString(“sys.path.append(‘.’)”); // 设置 Python 脚本路径
sprintf_s(buf, 256, command, direction);
PyRun_SimpleString(buf);
Py_Finalize();
}
int OnInit(){
position_order(1);
return(INIT_SUCCEEDED);
}
“`
以上是一个简单的示例代码,用于获取比特币兑美元的实时汇率数据,如果价格高于 60000 就进行买入开仓交易,如果价格低于 58000 就进行卖出开仓交易。通过 MQL5 调用预先定义好的 C/C++ 函数,间接地调用了 Python 脚本的 #position_order() 函数来实现交易操作。
通过结合 Python 语言和 MQL4/MQL5 语言,可以实现更加复杂和准确的自动化交易策略,帮助投资者降低风险、提升效益。
五、总结
编写 EA 是一种非常重要和有效的自动化交易方式,是许多投资者追求高效低风险收益的首选方法。本文介绍了 MQL4/MQL5 语言的基础、Python 语言和深度学习的编程技巧、结合 MQL4/MQL5 和 Python 实现自动交易的方法。建议初学者首先掌握 MQL4/MQL5 语言基本语法,再结合 Python 编程,进行 EA 编写。