教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 资格考试 >

ea简明教程收集以及修改(4)

来源:网络收集 时间:2025-09-22
导读: ============================================================= 有了以上的初步了解,下面开始进行EA程序基本结构的分析: 1、start()函数是最重要的执行部分,每来一个价格 此函数都自动执行一次,所以主要的逻

=============================================================

有了以上的初步了解,下面开始进行EA程序基本结构的分析:

1、start()函数是最重要的执行部分,每来一个价格 此函数都自动执行一次,所以主要的逻辑结构都在这个函数里

mt4只做ea的教程

2、程序的基本流程都是按照以下步骤进行,我们先牢牢记住这个结构,然后再对号入座去理解程序。

先判断当前自身的仓位状态,因为start函数式循环运行的,所以中间的每个步骤都会使用start函数,因此,当函数开始的时候我们首先要通过MT4的仓位操作函数获得当前的仓位状态,并进一步根据状态进行不同分支的计算。

程序开始的以下两个部分不重要 简单说一下:

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

以上是说如果当前图形的K线个数少于100 则不进行运算 直接返回。这种情况一般不会出现,所以我们自己写程序的时候可以不写这部分。

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

以上这段意思是参数TakeProfit移动止损点数的设定如果小于10点,则发出报警,并返回不进行运算。这是为了防止乱设数值,引起后面计算的错误。这部分,如果程序只是我们自己使用,估计不会犯这种低级错误,所以写程序的时候也可以忽略不写。

下面这段:

MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);

MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);

SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);

SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);

MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);

MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

这部分是变量赋值部分,等于提前计算出为后面用到的当前MACD数值以及MA数值,这样提前写出来在后面直接使用赋值后的变量就很清楚了。是很好的编程习惯。

再下面开始最主要的程序逻辑部分,首先遇到的就是我们上面说过的通过仓位函数获得当前状态的部分。

total=OrdersTotal(); 通过函数获得当前持仓单的个数,如果持仓单个数小于1,则说明是空仓状态,那末就进行多头和空头的入场条件判断,如果满足条件则进行入场。代码如下:

if(total<1)

{

// no opened orders identified

if(AccountFreeMargin()<(1000*Lots)) 这句诗判断保证金余量是否够下单,如果不够则直接返回,并不进行后续入场判断

{

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

// check for long position (BUY) possibility

if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&

MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious) 这句就是多头入场条件的判断,可以看到2个技巧,1、交叉的数学意思是“前面再下后面在上”或反之 2、MA向上趋势 的数学意思是当前K线的MA大于上一K线的

mt4只做ea的教程

MA数值

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green); 这是入场语句记得一定要判断入场是否成功,因为很多服务器由于滑点或者服务器价格变动而不能入场成功,所以,要判断入场不成功后作出提示。ticket就是定单入场是否成功的标记。

if(ticket>0) 大于0说明入场成功

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); }

else Print("Error opening BUY order : ",GetLastError()); 入场不成功,输出不成功的系统原因。

return(0); 这里为什麽使用了返回呢。因为一种情况是入场成功,那末直接返回等待下一个价格到来的时候再执行start函数,另一种情况是入场不成功,则返回也是等待下一个价格到来的时候在此执行入场操作。

}

下面就是空单入场的判断了,大家自己对照观看即可

// check for short position (SELL) possibility

if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&

MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);

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);

}

return(0);

}

华丽的分割线

===================================================================================

EA中文注释2

#property copyright "Copyright ?2007, 520FX Corp." //指标版权信息

#property link "指标联系的网站链接

//=====可调参数部分==============

#define Magic 20090101 //预定义的常量 Magic用于后面程序里的开仓动作时标记在订单里面的一个符号,用于区别其他EA程序下的单 防止混乱

extern int N=50; //参数 后面程序里用它作为N根K线的数量

extern int SL=100;//参数 后面程序里下单的时候用这个设置的点数作为入场时订单的止损价格。

extern int TrailingStop=30;//参数 后面程序里用这个作为移动止损的点数设置

extern double 每单手数=0.1;//参数 表示后面下单的仓位的大小

extern int 滑点偏移点数=3;//参数 表示下单时 服务器端的价格与当前看到的价格相差的范围,如果在此范围内,则允许以服务器端的价格成交

//----全局变量===================

int Tick;//用于记录订单的唯一编号

mt4只做ea的教程

double StopLost;//用于记录止损

//========主函数部分开始============

int start()//主函数 没来一个价格这个函数就运行一次

{

int Ticket; //局部变量 用于记录每次下单后的状态,用于判断下单动作是否成功,如果不成功则做相应处理和提示 int OrderTypeNow=GetOrderTypeHolding();//通过自定义函数得到当前持仓单的交易类型 买 卖

//自定义函数中做了处理,如果没有发现当前有持仓 则返回-1

if (OrderTypeNow==-1)//空仓阶段 -1表示没有持仓的状态 {

if (TradeOrNo(1))//多单入场条件 自定义函数TradeOrNo(1)参数1 表示针对多单的方向进行判断是否满足入场条件 {

Ticket=OrderSend(Symbol(),OP_BUY,每单手数,Ask,滑点偏移点数,Ask-SL*Point,0,"",Magic,0,0);//多单入场 //Ticket表示入场动作的执行结果,如果小于0表示入场动作失败

if …… 此处隐藏:3469字,全部文档内容请下载后查看。喜欢就下载吧 ……

ea简明教程收集以及修改(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/97647.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)