(完整版)外汇均线金叉死叉ea实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//| MACross_ea.mq4 |
//| shawnyau |
//| |
//+------------------------------------------------------------------+
#property copyright "Shawn Yau"
extern double Lots = 0.1; //默认交易单位
extern int StopLoss = 30; //止损
extern int TakeProfit = 30; //止赢
extern int Magic_Number = 8899; //Magic_Number是用来标识这个EA的唯一性的,简单来说,就是这个EA的身份证
extern int FasterMA = 5; //均线1的周期
extern int SlowerMA = 25; //均线2的周期
extern int Trade_Bar = 1; //下单的时机,如果为1,表示等待当前的K线完成,下一根K 线刚出现的时候才下单;如果为0表示只要当前的价格
//满足条件了就马上下单
int last_t = 0; //这个是用来避免重复下单
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() //这个是初始化函数,只会在EA刚加载到图表上的时候运行一次,之后就不起作用了
{
//----
//----
return(0);
}
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() //反初始化函数,用处是在删除EA的时候运行一次,做一些清理性的工作,例如把所画的线、箭头等从图表上删除掉
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
///////////////////////////////////////////////////////////////////
////////定义几个变量,从名字也可以很容易看出其代表的含义了:FasterMANow表示均线1当前的值、SlowerMANow表示均线2当前的值、
///////FasterMAPrevious表示均线1的前值、SlowerMAPrevious表示均线2的前值;均线金叉,其实就是表示当均线1的前值小于均线2的前值,
///////且均线1的当前值大于均线2的当前值。这样描述我想应该能明白了吧:-)
double FasterMANow, SlowerMANow, FasterMAPrevious, SlowerMAPrevious;
////////////////////////////////////////////////////////////////////////////
//////////下面是给各个变量赋值,iMA就是均线函数,里面的各个参数可以在我在论坛发的中文文档上查到说明的
///////////////////////////////////////////////////////////////////////////
FasterMANow = iMA(NULL, 0, FasterMA, 0, MODE_SMA, PRICE_CLOSE, Trade_ Bar);
SlowerMANow = iMA(NULL, 0, SlowerMA, 0, MODE_SMA, PRICE_CLOSE, Trade
_Bar);
FasterMAPrevious = iMA(NULL, 0, FasterMA, 0, MODE_SMA, PRICE_CLOSE, Tr ade_Bar+1);
SlowerMAPrevious = iMA(NULL, 0, SlowerMA, 0, MODE_SMA, PRICE_CLOSE, T rade_Bar+1);
//////////////////////////////////////////////////////
///////////下面开始判断是否发生金叉了
///////////////////////////////////////////////////////
if ((FasterMANow > SlowerMANow) && (FasterMAPrevious <= SlowerMAPreviou s)) {
if ((TotalOrders(Magic_Number)==0) && (Time[0]>last_t)) ///如果当前的EA还没有下单
{
RefreshRates(); ///刷新市场报价
////////////////////////////////////////
///下单都是用OrderSend()函数来进行的,这是个系统函数,详细说明可以在文档里面查到
OrderSend(Symbol(), OP_BUY, Lots, NormalizeDouble(Ask,Digits), 3, Normal izeDouble(Ask-StopLoss*Point,Digits),
NormalizeDouble(Ask+TakeProfit*Point,Digits), "", Magic_Number, 0, Blu e);
last_t = Time[0];
return (0);
}
}
////////////////////////////////////////////////////////////
///如果没有发生金叉,则下面开始判断是否发生死叉
//////////////////////////////////////////////////////////////
else if ((FasterMANow < SlowerMANow) && (FasterMAPrevious >= SlowerMA Previous)) {