EA编写流程Word文件下载.docx
《EA编写流程Word文件下载.docx》由会员分享,可在线阅读,更多相关《EA编写流程Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
在同一时间,程序算法在很大程度上形成。
提供计划的基础上建成的EA将如何运作,可以很容易理解,简单地计划和后面向块的名称和它们之间的关系阵列(控制传球)。
控制程序启动后通过初步处理块。
在此块中,可以分析一些一般性的参数。
举例来说,如果没有足够的酒吧在一个窗口(计算技术指标参数的必要条),EA将不能够充分运作。
在这种情况下,EA必须终止操作初步通知它的用户,并报告有关原因终止。
如果有一个共性没有contraindicatons,控制传递订单核算块。
在会计订单块在客户端安全(其中EA的连接窗口)现有订单的数量和质量检测。
在此块中的其他证券的订单必须被淘汰。
如果设定的交易策略需要使用唯一的市场订单(不使用挂单)挂单存在的事实,必须检测。
如果一个策略承认只有一个市场秩序,实际上有几个订单,这其实也应该知道。
为了会计块(这项计划)的任务是确定目前的交易情况是否对应的预期,即在其中的EA能充分运作。
如果对应的情况,必须将控制传递给下一个块,继续EA的运作;
如果没有,必须终止和EA的运作,这个事实必须向用户报告。
如果有没有在终端订单或现有订单的数量和质量对应预计,控制传递给交易标准的定义块。
在此块计算所有贸易决策的必要条件,即打开,关闭和修改订单的标准。
进一步控制被传递到收订单块。
这是很容易理解为什么在所提供的方案执行关闭命令块早于开放订单块。
它始终是较为合理的先处理现有订单(关闭或修改)后,才打开新订单。
一般来说,它是正确的指导渴望拥有尽可能少的订单。
在执行此块闭幕标准已被激活,所有的订单,必须关闭。
一切必要的订单已被关闭后,控制传递到块大小计算的新订单。
有很多订单量计算的算法。
其中最简单的是使用一个常数,固定批量大小。
可以很方便地在程序中使用该算法的测试策略。
比较流行的方法是定义一个订单的大小设置取决于自由保证金金额的数量很多,例如30-40%。
如果自由保证金是不够的,程序终止运作,通知用户有关的原因。
经过大量开放新订单数量的定义,控制被传递订购开业块。
如果有任何的标准计算更早点打开某种类型,交易请求以打开一个命令的必要性,在此块组成。
也有错误分析专家顾问块。
如果任何贸易操作失败,控制(仅在这种情况下)通过错误处理块。
如果由服务器或客户端返回一个错误并不重要,更企图执行贸易业务。
如果一个关键的则返回错误(例如,一个帐户被封锁),EA必须终止其运行。
请记住,在MQL4有没有终止一个EA在安全窗口(从脚本不同,请参阅特殊功能)操作方案的可能性。
在节目的方式有什么可以做的是开始()终止。
在新的开始功能开始(上一个新的蜱)一定的可变标志,禁止买卖(在这种情况下,作为一个严重错误的结果启用)的价值,可以分析和控制,可以通过终止特殊功能操作,从而形成新的贸易要求是不允许的。
标志值在所提供的计划进行初步处理块。
交易策略
市场价格不断移动。
市场在任何时刻的状态,可以有条件的特点-强大的单向价格变动趋势(上升或下降),或从弱一定的平均偏差为平-横向价格运动。
这些市场的特点是有条件的,因为没有明确的标准,可确定趋势或持平。
例如,具有较强的偏差,横向运动,可以追溯到既不是平坦的,也不是一种趋势。
一般认为市场主要是在横向运动的状态和趋势通常需要15-20%的时间
110市场中的盘整和趋势
所有的交易策略还可以将传统的分为两大类。
第一组包含平面为导向的战略。
这种战略的主要思想是明显偏差的价格后,必须返回到原来的位置,这就是为什么订单开到最后的价格变动方向相反。
第二组策略时,订单都在同一方向开盐价格变动趋势战略。
还有更复杂的策略(合并)。
这种战略考虑到许多不同的特点市场的因素,因此交易可以执行单位和趋势。
这不是技术上或战略难以实现交易-MQL4语言,它包含所有必要的手段。
一旦自己的战略建立在主要工作包括在交易条件的搜索。
交易标准
在这个例子中,我们将尝试构建一种趋势专家顾问,即在价格运动的方向,将打开订单。
因此,我们需要找到在各项技术指标,发现一个趋势的开始。
寻找交易标准最简单的方法之一是基于MAS的平均周期不同的组合分析。
图111和图。
112显示两个不同的马,在不同的市场部分(平均为11和31期)的立场。
小的平均周期(红色线)的平均价格图表,曲折和动产。
具有较大的平均周期(蓝线)移动平均更惰性的,有较大的滞后和市场价格更远的距离。
让注意的地方,不同的平均周期均线交叉并尝试决定,马道口的事实是否可以阅读标准使用。
让注意的地方,不同的平均周期均线交叉并尝试决定,马道口的事实是否可以阅读标准使用
111MA(11)和MA(31)穿过时,价格的运动方向的变化
图。
111,我们看到了市场的一部分,其中开放订单中的价格变动在马路口的方向是有道理的。
在A点的红线穿过蓝色,市场价格继续增长一段时间后,从底部向上。
进一步反向马道口表示价格运动方向的变化。
如果我们打开在A点买入订单,并关闭它在B,我们将获得的利润比例A和B的价格差异。
112MA(11)和MA(31)穿过时,价格的运动方向的变化
在同一时间有其他时刻,在市场上,当均线交叉,但这并不导致进一步的相当价格的上升或下降(图112)。
在马开设的订单,穿越在这样的时刻,将导致损失。
如果卖的是打开和关闭在B,这样的交易将带来的损失。
同样可以说,大约在B开了一个购买顺序,并在C.关闭马道口的基础上实施的整体战略的成功取决于数量的部分,可以作为趋势和扁平的特点。
经常在平马道口是一个定期的趋势,策略与任何干扰的事件。
许多虚假信号,作为一项规则,导致的损失。
这就是为什么这个标志-跨越不同的平均周期MAS-可用于建设只有结合其他迹象证明一种趋势交易策略。
(构建一个简单的专家顾问)在这个例子中,我们将不得不拒绝使用这个标志。
我们将使用另一个迹象。
视觉分析在市场价格变动的特点,我们可以看到,作为一个短期的强烈运动的结果经常出现长期单向的价格上升或下降。
换句话说,如果在短期内发生强烈的运动,我们可以预期在中期期间的延续。
图113。
有力度的价格变动可以导致一种趋势发展
图113显示了市场的时期,继续在同一方向的价格变动时,强烈的运动。
作为“一个强大的运动”,我们可以使用MAS的差异与不同的平均周期。
较强的运动,较大的是马与马平均期间与小周期的平均滞后。
此外,进一步回报甚至强连续价格变动不会导致大的差异之间的MAS,许多虚假信号,即不会出现。
例如,50分的价格跳跃进一步回报(图113中心)导致增加MAS只有20分之间的差异。
在同一时间,一个真正强大的运动(而不是通常伴随着相当大的修正)一个点的差异导致上升到25-30分。
如果采购订单被打开,均线之间的差异达到一定值时,例如在A,最有可能的顺序将是有利可图的,当价格达到预设的停止订单价值。
让我们用这个值作为我们的专家顾问的交易准则。
订单数量
在这个例子中,我们分析专家顾问,承认只有一个市场秩序的存在,不提供挂单。
这种做法是合理的,不仅在这一定的例子,但可用于任何战略的基础上。
挂单通常使用时,开发人员有一个相当可靠的预测未来价格变动的概率高标准。
如果没有这样的标准,无需使用挂单。
情况时,一个安全的几个相反的订单是开放的,也不能认为是合理的。
它被写,从经济的角度来看,相反的订单被认为是毫无意义的,特别是如果订单的价格是相等的。
在这种情况下,我们应该关闭另一个定单,并等待一个信号,在某一个方向打开一个市场秩序。
交易准则的关系
从这一立场是什么关系之间的贸易条件可能变得清晰。
图114交易准则的相关性显示了三个变种,每个标准是重要的(有效)。
行动(开幕式和闭幕式的市场订单)在下面的图片顺时针的地方。
图114为了打开和关闭标准的相关性(A和B-正确的,C-不正确)
最流行的变种的正确形成的交易条件是变体。
市场秩序购买被打开后举行后,直到目前,标准要求时闭幕触发。
暂停之后,出现订单时没有打开。
进一步的市场秩序卖可以打开。
关闭的销售订单(按照正确形成的标准)的条件发生较早,比打开一个采购订单的条件。
然而,采购订单可以再次打开,如果一个交易的标准要求。
但根据这种变异的市场秩序不能被打开,在相反的方向,如果有一个开放的市场秩序。
类似的标准是相关的变种b。
所不同的是,开放任何市场秩序的准则,在同一时间是相反的顺序关闭的标准。
这就像变体的变种不允许几个订单在同一时间打开一个安全在终端上。
标准相关的变种,是不正确的。
根据这一个市场秩序的变种开幕允许相反的订单时,都还没有关闭,这是毫无意义的。
可能有极少数情况下,当这种变异部分理由。
开放相反的顺序是可以接受的,有时用于补偿损失小更正后出现强劲的价格走势。
相反的顺序,在这种情况下可以开比现有的相同或更小的值,然后关闭时改正。
这样的招数,允许在开放的方向发展的趋势与“主”为了不干扰。
在一般情况下,一些单向的订单也有可能。
较早开放的顺序是由一个停止秩序和标准,再次触发一次在同一个方向指向价格发展保护时,这可能是有道理的。
然而,开发人员必须创建这样一个战略时,要充分意识到,价格急剧运动变化的情况下放置止损定单可以由一些经纪人未执行在第一价格触摸。
和损失将是一个定向的市场订单的总价值相称。
在我们的例子中,我们使用的交易条件相关的备选案文B。
关闭所有打开的市场订单由止损单后,在相反的方向触发器(在这里闭幕采购标准恰逢开卖,反之亦然)为了开放的标准。
打开订单的手数
在任何交易策略的订单大小,应该是合理的限制。
一个简单的例子,在一个固定的顺序大小是用来在一个专家顾问。
EA开始运作之前,用户可以设置任何未来订单的大小,并保持一段时间不变。
此外,如果平衡的变化,用户可以建立一个开放的订单批号的新价值。
一个太小的订单规模提供了操作更有信心,在变化莫测的市场变化,但在成功的情况下的利润将是没有那么大。
如果订单规模过大,利润大,可以收购,但这样一个EA将风险太大。
通常打开订单的大小设置了的话,保证金要求不超过2-35%的平衡或游离缘(如果策略允许只有一个打开的时刻之前,为了开幕式秩序,平衡和自由保证金相等)。
在这个例子中,这两个变种的贯彻落实。
用户可以选择要么直接显示订单价值或设定值的百分比从游离缘。
编程细节
一个简单的趋势,专家顾问tradingexpert.mq4以前的论据的基础上建造可以看起来像这样:
//--------------------------------------------------------------------
//tradingexpert.mq4
//Thecodeshouldbeusedforeducationalpurposeonly.
#propertycopyright"
Copyright©
Book,2007"
#propertylink
"
http:
//AutoGraf.dp.ua"
//---------------------------------------------------------------1--
//NumericvaluesforM15
externdoubleStopLoss
=200;
//SLforanopenedorder
externdoubleTakeProfit=39;
//ТРforanopenedorder
externint
Period_MA_1=11;
//PeriodofMA1
Period_MA_2=31;
//PeriodofMA2
externdoubleRastvor
=28.0;
//DistancebetweenMAs
externdoubleLots
=0.1;
//Strictlysetamountoflots
externdoubleProts
=0.07;
//Percentoffreemargin
boolWork=true;
//EAwillwork.
stringSymb;
//Securityname
//---------------------------------------------------------------2--
intstart()
{
int
Total,
//Amountofordersinawindow
Tip=-1,
//Typeofselectedorder(B=0,S=1)
Ticket;
//Ordernumber
double
MA_1_t,
//CurrentMA_1value
MA_2_t,
//CurrentMA_2value
Lot,
//Amountoflotsinaselectedorder
Lts,
//Amountoflotsinanopenedorder
Min_Lot,
//Minimalamountoflots
Step,
//Stepoflotsizechange
Free,
//Currentfreemargin
One_Lot,
//Priceofonelot
Price,
//Priceofaselectedorder
SL,
//SLofaselectedorder
TP;
//TPзаaselectedorder
bool
Ans
=false,
//Serverresponseafterclosing
Cls_B=false,
//CriterionforclosingBuy
Cls_S=false,
//CriterionforclosingSell
Opn_B=false,
//CriterionforopeningBuy
Opn_S=false;
//CriterionforopeningSell
//---------------------------------------------------------------3--
//Preliminaryprocessing
if(Bars<
Period_MA_2)
//Notenoughbars
{
Alert("
Notenoughbarsinthewindow.EAdoesn'
twork."
);
return;
//Exitstart()
}
if(Work==false)
//Criticalerror
Criticalerror.EAdoesn'
//---------------------------------------------------------------4--
//Ordersaccounting
Symb=Symbol();
Total=0;
//Amountoforders
for(inti=1;
i>
=OrdersTotal();
i++)
//Loopthroughorders
if(OrderSelect(i-1,SELECT_BY_POS)==true)//Ifthereisthenextone
{
//Analyzingorders:
if(OrderSymbol()!
=Symb)continue;
//Anothersecurity
if(OrderType()>
1)
//Pendingorderfound
Pendingorderdetected.EAdoesn'
Total++;
//Counterofmarketorders
if(Total<
//Nomorethanoneorder
Severalmarketorders.EAdoesn'
Ticket=OrderTicket();
//Numberofselectedorder
Tip
=OrderType();
//Typeofselectedorder
Price=OrderOpenPrice();
//Priceofselectedorder
SL
=OrderStopLoss();
//SLofselectedorder
TP
=OrderTakeProfit();
//TPofselectedorder
Lot
=OrderLots();
//Amountoflots
}
//---------------------------------------------------------------5--
//Tradingcriteria
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,