一、文件放置说明
¤ 指标的mq4、ex4文件,请复制到experts目录下的indicators子目录中。
¤ EA自动交易的mq4、ex4文件,请复制到experts目录下。
¤ tpl文件属于模板文件,需要复制到templates目录下。
¤ DLL文件是库文件,应复制到experts目录下的libraries子目录中。
¤ SET文件为设置文件,请复制到experts目录下的presets子目录。
¤ pdf、txt、doc等格式的说明文档,可以直接打开阅读。
二、EA使用方法
在外汇交易中,使用智能交易系统(EA)来辅助或替代人工操作,已成为一种常见的工具。下面介绍如何在MT4平台中启用EA。
1、首先,你需要拥有一个EA文件,其扩展名必须是ex4。如果只有mq4源文件,需要使用MT4自带的MetaEditor编辑器进行编译(compile),确保无错误后,会在原文件夹生成同名的ex4文件。
2、将生成的ex4文件复制到MetaTrader 4安装目录下的experts文件夹内,例如:D:MetaTraderexperts。完成后,关闭并重新启动MT4平台。
3、在平台“导航”栏的“智能交易系统”列表中,右键点击你想要使用的EA(例如一个10点盈利系统),选择“附加到图表”。

4、随后会弹出设置窗口:

请特别注意,必须勾选“允许实时自动交易”,否则EA将不会执行自动交易指令。
5、MT4平台还有一个总开关,位于“工具”菜单下的“选项”中:

6、此外,工具栏上还有一个按钮必须显示为“启动”状态:

当该按钮显示为以上状态时,表示智能交易系统已全局启用。
7、完成上述所有设置后,图表的右上角会出现EA的文件名和一个笑脸图标。

出现这个标志,意味着当前图表已成功加载并运行EA。之后,系统将根据预设策略自动执行交易。许多交易者会选择在swissquote瑞讯银行官网这类正规平台进行相关操作,以确保交易环境的安全与稳定。
8、如果需要停止EA运行,最直接的方法是点击工具栏上的“智能交易”图标。

但请注意,此操作会停止所有图表上的EA运行,所有笑脸图标将变为叉号。

如果只想停止当前图表的EA,可以按下F7键,会弹出设置窗口:

取消勾选“允许实时自动交易”并确定,当前图表的EA便会停止,图标会变成“哭丧的脸”。

若要完全从当前图表移除EA,需右键点击图表区域,在菜单中选择“智能交易系统”,然后点击“消除”。这样EA将从图表中删除,右上角不再显示任何图标。

四、附:EA的基本概念
EA 是 Expert Advisors 的英文缩写,中文常译为专家顾问或智能交易系统。其核心原理是由电脑程序模拟交易员的决策过程,实现全自动或半自动的交易执行。
一、人工交易流程
以MT4平台为例,一个交易员手工交易的典型步骤如下:
1. 打开交易客户端,选择一个货币对的图表。
2. 观察该货币对的K线走势图(盯盘),寻找符合自己策略的开仓或平仓时机。
3. 当条件满足时,执行下单操作(做多或做空)或平仓操作。
4. 继续回到第二步盯盘,如果之前是开仓,则寻找平仓条件。
5. 平仓条件满足时,执行平仓,并计算该笔交易的盈亏。
6. 若继续交易,则重复步骤2至5。
7. 停止交易时,退出客户端。
三、 相关MQL语言知识
为了实现自动化交易,需要了解MQL4语言的基础知识:
1. 掌握MQL4语言的基本语法、程序结构及运行流程。语法部分可参考专门资料,此处不展开。
一个智能交易系统EA程序主要由三个函数构成:
init(): 初始化函数,负责程序变量及数据的初始设置,仅在程序加载时执行一次。
deinit(): 反初始化函数,负责程序退出时清理内存中的数据,也仅执行一次。
start(): 主函数,负责EA全部的交易管理与执行逻辑,会以几秒为间隔循环执行,直到程序退出。
程序运行流程为:启动EA后,先执行一次init(),然后start()循环执行,最后退出时执行一次deinit()。
2. mql4中常用的交易函数:
开仓函数:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, void comment, void magic, void expiration, void arrow_color)
此函数用于执行开仓或挂单操作。
主要参数:
symbol – 交易货币对。
cmd – 交易方向(做多或做空)。
volume – 交易手数。
price – 订单执行价格。
slippage – 允许的最大滑点。
stoploss – 止损价位。
takeprofit – 止盈价位。
comment – 订单注释。
magic – 订单魔术码,用于唯一标识。
expiration – 挂单有效期。
arrow_color – 图表中标记的颜色。
平仓函数:
bool OrderClose( int ticket, double lots, double price, int slippage, void Color)
此函数用于对指定订单进行平仓。成功返回true,失败返回false,可通过GetLastError()获取错误详情。
主要参数:
ticket – 订单编号。
lots – 平仓手数。
price – 平仓价格。
slippage – 最高允许滑点。
Color – 图表中标记颜色。
订单修改函数:
bool OrderModify( int ticket, double price, double stoploss, double takeprofit, datetime expiration, void arrow_color)
此函数用于修改已有订单的参数,如止损止盈价位。成功返回TRUE,失败返回FALSE。
主要参数:
ticket – 订单编号。
price – 新的订单价格(适用于挂单修改)。
stoploss – 新的止损价位。
takeprofit – 新的止盈价位。
expiration – 新的挂单有效期。
arrow_color – 图表标记颜色。
五、源码的交易流程分析
下面是一个基于移动平均线的简易EA源码,它结构简洁但功能完整,实现了全自动的开仓、平仓与移动止损。
程序代码分析:
//+——————————————————————+
//—- input parameters
extern double TakeProfit = 20;
extern double StopLoss = 30;
extern double Lots = 2;
extern double TrailingStop = 50;
extern int ShortEma = 5;
extern int LongEma = 60;
//+——————————————————————+
//| expert initialization function |
//+——————————————————————+
int init()
{
//—-
//—-
return (0);
}
//+——————————————————————+
//| expert deinitialization function |
//+——————————————————————+
int deinit()
{
//—-
//—-
return (0);
}
//+——————————————————————+
//| expert start function |
//+——————————————————————+
int start()
{
int cnt, ticket, total;
double SEma, LEma;
//—-
if (Bars < 100)
{
Print(“bars less than 100”);
return (0);
}
//—-
if (TakeProfit < 10)
{
Print(“TakeProfit less than 10”);
return (0); // check TakeProfit
}
//—-
SEma = iMA(NULL, 0, ShortEma, 0, MODE_EMA, PRICE_CLOSE, 0);
LEma = iMA(NULL, 0, LongEma, 0, MODE_EMA, PRICE_CLOSE, 0);
//—-
static int isCrossed = 0;
isCrossed = Crossed(LEma, SEma);
//—-
total = OrdersTotal();
if (total < 1)
{
if (isCrossed == 1) // 满足空仓条件,开空仓
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, Bid + StopLoss * Point,
Bid – TakeProfit * Point, “EMA_CROSS”, 12345, 0, Green);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
Print(“SELL order opened : “, OrderOpenPrice());
} else
Print(“Error opening SELL order : “, GetLastError());
return (0);
}
if (isCrossed == 2) // 满足多仓条件,开多仓
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, Ask – StopLoss * Point,
Ask + TakeProfit * Point, “EMA_CROSS”, 12345, 0, Red);
if (ticket > 0)
{
if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES))
Print(“BUY order opened : “, OrderOpenPrice());
} else
Print(“Error opening BUY order : “, GetLastError());
return (0);
}
return (0);
}
//—- 订单修改,实现动态止盈止损跟踪
for (cnt = 0; cnt < total; cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if (OrderType() <= OP_SELL && OrderSymbol() == Symbol())
{
if (OrderType() == OP_SELL) // long position is opened
{
// check for trailing stop
if (TrailingStop > 0)
{
if (Bid – OrderOpenPrice() > Point * TrailingStop)
{
if (OrderStopLoss() < Bid – Point * TrailingStop)
{
OrderModify(OrderTicket(), OrderOpenPrice(),
Bid – Point * TrailingStop,
OrderTakeProfit(), 0, Green);
return (0);
}
}
}
} else // go to short position
{
// check for trailing stop
if (TrailingStop > 0)
{
if ((OrderOpenPrice() – Ask) > (Point * TrailingStop))
{
if ((OrderStopLoss() > (Ask + Point * TrailingStop)))
{
OrderModify(OrderTicket(), OrderOpenPrice(),
Ask + Point * TrailingStop,
OrderTakeProfit(), 0, Red);
return (0);
}
}
}
}
}
}
//—-
return (0);
}
//+——————————————————————+
// 移动平均线多空条件判断,
int Crossed(double line1, double line2)
{
static int last_direction = 0;
static int current_direction = 0;
//Don’t work in the first load, wait for the first cross!
static bool first_time = true;
if (first_time == true)
{
first_time = false;
return (0);
}
//—-
if (line1 > line2)
current_direction = 2; //up 多头市场 上穿做多
if (line1 < line2)
current_direction = 1; //down 空头市场 下穿做空
//—-
if (current_direction != last_direction) //changed 多空改变 {
last_direction = current_direction;
return (last_direction);
else return (0); //not changed
}
六、本文结论
综上所述,EA智能交易系统实质上是通过程序化手段,将交易员的决策逻辑代码化,并由电脑自动执行交易的过程。其标准工作流程可归纳如下:
1. 用户启动外汇交易平台(如MT4/MT5),并加载预先设置好的EA程序。
2. EA程序开始运行后,自动监控指定货币对的行情图表,持续扫描符合其策略的开仓信号。
3. 一旦开仓条件被触发,EA将自动执行下单操作(做多或做空)。
4. 开仓后,EA继续监控市场,寻找预设的平仓条件。
5. 平仓条件满足时,EA自动执行平仓,并完成该次交易的盈亏结算。
6. 如果用户设置持续交易,EA将不断重复步骤2至5的循环。
7. 用户可以通过禁用EA或关闭交易平台来终止自动交易。在选择使用EA时,确保在一个安全可靠的交易环境至关重要,例如通过swissquote瑞讯银行官网等官方渠道获取和使用相关工具。
