EA是什么?外汇EA的工作原理是什么?
2025-06-05阅读量:
EA,即Expert Advisor的缩写,其含义为专家顾问,亦被称为智能交易系统。它指的是通过电脑模拟交易员下单操作,实现机器自动进行交易的过程。外汇EA是一款适用于MT4(Metatrader4)和MT5(Metatrader5)平台的自动化交易软件,它能够独立执行外汇交易流程,整个过程无需人工介入。
一、人工操盘过程
下面我们就以MT4外汇客户端为例,首先来分析一个外汇交易员手工进行外汇交易的操作过程:其步骤如下:
1.打开外汇交易客户端,选定一种货币对图表;
密切关注该货币对的K线走势图,也就是我们常说的盯盘,目的是为了把握开仓或平仓的最佳时机,也就是判断开仓或平仓的具体条件。
若满足特定条件,则执行下单操作以开立多头或空头仓位,亦或进行平仓处理。
重复执行第二步操作,持续关注市场动态,若第二步为建立仓位,则需寻找平仓的相应条件。
一旦满足平仓的条件,便执行平仓动作,并计算盈亏,从而完成一笔交易的整个流程。
若交易行为持续进行,则需依次重复执行步骤2至步骤5。
7。若不进行交易,退出外汇客户端。
二、EA操盘过程
经过上述的深入分析,我们已明确,一个完备的智能交易系统,也就是人们常说的EA,在启动运行之后,必须具备实现以下基本功能,即涵盖人工操作的前五步。这即是智能交易系统运作的基本流程,因此,智能交易系统运作的核心原理是程序员利用特定的计算机编程语言,编写交易指令,模仿人类交易员的行为进行下单,从而实现机器自动交易。其主要的执行步骤包括:监控市场行情、开立仓位、继续监控、平仓,如此周而复始地循环进行。
关于支持机器自动交易的平台,目前外汇市场当前市面上广泛采用的是MetaQuotes公司推出的MT4平台,该平台内置了MQL4编程语言,使得用户能够访问服务器端数据并执行交易操作,交易者可依据个人交易策略自行编写自动化交易系统,进而实现机器自动交易。这种方式不仅能减少人工工作量,还能克服人类交易中的某些性格缺陷。然而,目前EA(Expert Advisor,智能交易顾问)的开发仍处于初级阶段,部分产品存在不足。但展望未来,随着技术的不断进步,机器自动交易有望逐步取代人工操作。届时会给交易者一项新的选择。
三、涉及外汇EA编程的MQL4语言相关技能:
为了确保机器能够正常运行,我们需要深入了解MQL4编程语言的相关内容:。
1、精通MQL4语言的基础语法规则,熟悉程序的结构组成,以及其运行的具体流程。
有关语法部分,请读者参看相关的资料,这里略去。
就程序的组成而言,对于智能交易系统中的EA程序而言:它主要由三个核心函数构成,分别是:
初始化函数是一个专门用于启动程序的函数,其主要功能是对程序变量和数据进行初次设置;此函数在程序被加载时仅执行一次,通常情况下无需对其进行修改。
deinit函数是一个反初始化的函数,其主要作用是在程序退出时,将内存中的数据予以清除;此函数仅在程序退出时执行一次,通常情况下无需重新编写其内容。
start函数,即程序的核心启动函数,承担着EA程序所有交易活动的执行任务,本质上相当于EA的交易管理及执行模块。该函数通常每隔固定的时间间隔,通常在几秒钟之内,进行一次循环执行,其作用在于确保程序在退出时能够顺利完成终止。
启动EA程序后,程序中的INTI()函数将首先启动并执行一次,随后,START()函数将进入循环状态,持续执行;而当退出EA程序时,deinit()函数将再执行一次。
2. MQL4中与交易相关的交易函数:
开仓函数:
定义函数OrderSend,该函数接受以下参数:交易标的物名称为symbol,指令类型为cmd,交易数量为volume,交易价格为price,滑点为slippage,止损价格为stoploss,止盈价格为takeprofit,备注信息为comment,交易魔法数为magic,到期时间为expiration,箭头颜色为arrow_color。
这个功能主要应用于开仓位置和挂单交易.
参量:
symbol - 交易货币对。
cmd - 购买方式。
volume - 购买手数。
price - 收盘价格。
slippage - 最大允许滑点数。
stoploss - 止损水平。
takeprofit - 赢利水平。
comment - 注解文本。
订单中包含的特定代码,即所谓的“magic码”,用户可将其作为个人识别标识来使用。
订单的有效期限为(仅限于挂单操作)。
图表中箭头的色彩设定。若该参数缺失或设定为CLR_NONE,则图表中不会显示箭头。
平仓函数:
执行订单关闭操作,参数包括:票据编号(int ticket)、交易数量(double lots)、交易价格(double price)、滑点值(int slippage)以及颜色信息(void Color)。
执行订单平仓处理。若操作顺利完成,系统将返回真实值。反之,若操作失败,则返回虚假值。欲获取具体错误信息,请查阅GetLastError()函数。
参量:
ticket - 定单编号。
lots - 手数。
price - 收盘价格。
slippage - 最高划点数。
图表中的颜色标识。一旦参数信息缺失,CLR_NONE的数值便不会在图表上呈现。
定单修改函数:
定义函数OrderModify,其参数包括整数ticket、双精度浮点数price、stoploss、takeprofit、datetime类型的expiration以及void类型的arrow_color。
对之前的开仓或挂单进行属性调整。若操作顺利完成,系统将返回 TRUE 值。若操作未能成功执行,则返回 FALSE。欲获取更详尽的错误信息,请查阅 GetLastError() 函数。
参量:
ticket - 定单编号。
price - 收盘价格
stoploss - 新止损水平。
takeprofit - 新赢利水平。
expiration - 挂单有效时间。
图表中可对止损与盈利的颜色进行调整。若参数缺失或设定为CLR_NONE,则图表中相应颜色将不会呈现。
四、EA源码的交易流程分析
该源代码构成的是一个依托移动平均线的智能交易系统,程序结构精炼,同时具备丰富的EA功能;它能够实现下单与平仓的全自动化操作,整个程序仅通过一个名为START()的函数便完成了所有功能。
程序代码分析参看代码中的相关注释
//---- 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、当用户打开外汇客户端程序后,由客户端程序调入用户在系统内已预置好的EA交易系统程序。
2、当EA程序启动后便开始对图表中货币对的K线趋势图,进行监视,寻找开仓的条件。
3、如果条件满足,进行下单开仓(做多或者做空)。
4、重复第二步,继续盯盘,假定第二步是开仓,就是寻找平仓的条件。
5、如果平仓的条件满足,进行平仓操作,计算盈亏核算。完成一次交易的循环。
6、若继续交易,EA重复2->3->4->5步
7、用户若不想让EA进行交易,可通过相关菜单操作设置禁用EA,或者退出外汇客户端。
外汇交易少不了返佣啊!主流热门汇商100%全返佣,每日结算!业内最高外汇返佣全在返佣啊外汇返佣网!
返佣啊官方QQ:112899994
返佣啊官网微信:forexib
返佣啊官方网站:www.fanyonga.com
汇市有风险,投资需谨慎
加入我们,立享100%全返佣
始于2008年的外汇返佣大品牌,外汇返佣老字号,比来比去还得是亭辉!不加点不加佣不唯利是图,亭辉有态度,交易更放心!联系客服申请返佣!QQ:2559915,微信:tinghuiwaihui
QQ客服
微信客服


