外汇MT4-EA智能系统MQ4编写详细举例_第1页
外汇MT4-EA智能系统MQ4编写详细举例_第2页
外汇MT4-EA智能系统MQ4编写详细举例_第3页
外汇MT4-EA智能系统MQ4编写详细举例_第4页
外汇MT4-EA智能系统MQ4编写详细举例_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、创建一简易的人工智能系统举例说明让我们将指标同获利能力、支撑移动止损位以及操作安全等因素结合起来考虑以创建人工智能系统。下面的例子是开立和控制一个单独的头寸。交易原则:做多(买入)信号一一即当指针是在轴在以下,为向上的趋势并与向下的信号线相交金叉)做空卖出)信号一一即当指针是在轴以上,为向下趋势并与向上的信号线相交死叉)多头平仓信号一一即执行限价平仓指令或移动止损指令以获得利润或者在指针与信号线相交指针在轴以上且为向下趋势并与向上趋势的信号线相交)时平仓空头平仓信号即执行限价平仓指令或移动止损指令以获得利润或者在指针与信号线相交指针在轴以下且为向上趋势并与向下趋势的信号线相交)时平仓重要提示在

2、我们分析指标时,为了排除指示中一些并不重要的变化情况即图表中的细微“小丘”),下面我们另外引荐一种控制“小丘”大小的方法指示范围至少为个最小单位点,即,第一步撰写人工智能系统说明将鼠标指在导航窗口的人工智能系统,点击鼠标右键在弹出的菜单中创建一个智能系统)命令正在初始化的会问你是否要输入数据在弹出的窗口中你得写下名字人工智能系统的名字)、作者、与你的网址链接、须知一人工智能系统的测试样本你也可以设定你想要的交易单位),止损点),平仓)和移动止损)的默认值第二步创立程序的初步结构测试系统的代码仅仅为几页纸,即使是这几页纸仍然是难以理解的,特别是在我们这些不是专业的程序员的眼里是非常难的不然,我们

3、也不必写下这段说明,不是吗为了了解标准的人工智能系统的结构,我们来看一下下面的解释初始资料检查检查图表,图表上棍的数量检查空外围部:变.数值设置为快速数据存取的内部变量检空查交:易3终端一是否有空间?如果有,然后检查空账户中的可用资金否可以做空(卖出)是否可以做多买入)围:建仓空卖围出:和.平仓若是多头合约是否要平仓点若是空头合约是否要平仓建仓买入和平仓是定期控制已开立的头寸围以是否空要围重以新.设定移动止损围以是否空要围重以新已设定移动止损点这是相对简单的样板,仅仅只有个主要单元现以在我空们围来以试着逐渐将结构表中的每一部分的代码做出来初空始围资以料1检查这一空块围的以数据通常是经过稍稍修改

4、后从一个系统移至另一系统的一这实际上是一单元检查收益小于点退出设置为快速数据存取的内部变量在程序代码中,有的是经常需要存取的指示值和操做的计算值已为了简化译码和加速存取,数据最初便在内部变数中嵌套进去现在我们以在程序中简单的写入字符代替晦涩难懂的所有的人工智能系统中的变量都依据语言进行基本的解释.语言还另外推出一种的用户自定义变量它可以在程序外设定而无须任何系统程序下的源程序正文的参考这个特点使程序更具灵活性变量就是一个这种类型的用户自定义变量因此我们在程序的开头加入这段说明.检查交易终端是否有空间如果有然后在我们的人工智能系统中我们只能使用现时头寸而不能操作延迟的买卖盘.为了安全起见,我们介

5、绍一种核对过去交易终端已下买卖盘的程序.检查账户的可用资金在分析市场状况之前最好先检查一下你的账户的资金情况以确保账户中有开立头寸的资金.-是否可以做多买入买入的条件信号:指标在轴以下,为向上趋势且与向下趋势的信号线相交。这就是我们在语言中如何描述它的(说明我们如何操作过去在变量中存入的指示值)前面我们提到了一种监控图表中所要显示“小丘”的大小的一种方法。变量是自定义变量,它可以不影响程序正本而改变同时,还确保了更多的灵活性。在程序的初始,我们加入一段这个变量的描述.是否可以做空卖出卖出的条件信号指标在轴以上,为向下趋势且与向上趋势的信号线相交符号如下定期控制已开立的头寸是周期变量是在程序之开

6、端进行描述的,方式如下若是买入合约是否需平仓?平仓的条件信号:指针与信号线相交指针在轴以上为向下趋势且与向上趋势的信号线相交是否需要重新设定移动止损点我们仅在持仓并已超过移动止损点数点还获利的情况下设定移动止损点即新的移动止损点比以前的更精确时才重设若是空头合约else/otherwiseitisashortposition.是否需平仓?平仓的条件信号:MACD指针与信号线相交,MACD指针在0轴以下,为向上趋势且与向下趋势的信号线相交.IfMacdCurrentSignalCurrentandMacdPrevious(MACDCloseLevel*Point)thenCloseOrder(O

7、rdervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_LOTS),Ask,3,Violet);Exit;/exitvBR;vBRvBR.是否需要重新设定移动止损点?我们仅在持仓并已超过移动止损点数点还获利的情况下设定移动止损点,即新的移动止损点比以前的更精确时才重设.IfTrailingStop0then/theuserhasputatrailingstopinhissettings/so,wesetouttocheckitIf(Ordervalue(cnt,VAL_OPENPRICE)-Ask)(Point*TrailingStop)thenIfOrder

8、value(cnt,VAL_STOPLOSS)=0orOrdervalue(cnt,VAL_STOPLOSS)(Ask+Point*TrailingStop)thenModifyOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_OPENPRICE),Ask+Point*TrailingStop,Ordervalue(cnt,VAL_TAKEPROFIT),Red);Exit;/end.Closingallthecurlybracketwhichremainopen.;vBRxBR;vBRxBR这样,跟着这套初学渐进程序,我们就学会了编写自己

9、的人工智能系统.第三步:将所有程序代码集合起来我们将前面所有的代码集合过来defines:MACDOpenLevel(3),MACDCloseLevel(2);defines:MATrendPeriod(56);var:MacdCurrent(0),MacdPrevious(0),SignalCurrent(0),SignalPrevious(0);var:MaCurrent(0),MaPrevious(0);var:cnt(0);/initialdatachecks/itisimportanttomakesurethattheExpertAdvisorrunsonanormalchartan

10、dthat/theuserhascorrectlysettheexternalvariables(Lots,StopLoss,/TakeProfit,TrailingStop)/inourcaseweonlychecktheTakeProfitIfBars200orTakeProfit10thenExit;/lessthan200barsonthechart/tosimplifyandspeeduptheprocedure,westorethenecessary/indicatordataintemporaryvariablesMacdCurrent=iMACD(12,26,9,0,MODE_

11、MAIN);MacdPrevious=iMACD(12,26,9,1,MODE_MAIN);SignalCurrent=iMACD(12,26,9,0,MODE_SIGNAL);SignalPrevious=iMACD(12,26,9,1,MODE_SIGNAL);MaCurrent=iMA(MATrendPeriod,MODE_EMA,0);MaPrevious=iMA(MATrendPeriod,MODE_EMA,1);/nowwehavetocheckthestatusofthetradingterminal./wearegoingtoseewhetherthereareanyprevi

12、ouslyopenedpositionsororders.IfTotalTrades1then/therearenoopenedorders/justtobeonthesafeside,wemakesurewehavefreefundsonouraccount./the1000valueistakenjustasanexample,usuallyitispossibletoopen1lotIfFreeMargin1000thenExit;/nomoney-weexit/checkingforthepossibilitytotakealongposition(BUY)IfMacdCurrentS

13、ignalCurrentandMacdPrevious(MACDOpenLevel*Point)andMaCurrentMaPreviousthenSetOrder(OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,RED);/executingExit;/exiting,sinceaftertheexecutionofatrade/thereisa10-secondtradingtimeout;/checkingforthepossibilityoftakingashortposition(SELL)IfMacdCurrent0andMacdCurrentMa

14、cdPreviousSignalPreviousandMacdCurrent(MACDOpenLevel*Point)andMaCurrentSetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED);/executingExit;/exiting;/herewecompletedthecheckforthepossibilityofopeningnewpositions./nonewpositionswereopenedandwesimplyexittheprogrammeusingtheExitcommand,as/thereisnoth

15、ingtoanalyzeExit;/wecomeovertoanimportantpartoftheExpertAdvisor-thecontrolofopenpositions/itisimportanttoenterthemarketcorrectly,butitisevenmoreimportanttoexitit.forcnt=1toTotalTradesifOrdervalue(cnt,VAL_TYPE)=OP_SELLand/isthisanopenposition?OP_BUYorOP_SELLOrdervalue(cnt,VAL_SYMBOL)=Symbolthen/doest

16、heinstrumentmatch?IfOrdervalue(cnt,VAL_TYPE)=OP_BUYthen/longpositionopened/wecheck-maybe,itsalreadytimetocloseit?IfMacdCurrent0andMacdCurrentMacdPreviousSignalPreviousandMacdCurrent(MACDCloseLevel*Point)thenCloseOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_LOTS),Bid,3,Violet);Exit;/exiting;/w

17、echeck-maybe,wealreadymayoritsalreadytimetosetatrailingstop?IfTrailingStop0then/theuserhasputatrailingstopinhissettings/so,wesetouttocheckitIf(Bid-Ordervalue(cnt,VAL_OPENPRICE)(Point*TrailingStop)thenIfOrdervalue(cnt,VAL_STOPLOSS)(Bid-Point*TrailingStop)thenModifyOrder(Ordervalue(cnt,VAL_TICKET),Ord

18、ervalue(cnt,VAL_OPENPRICE),Bid-Point*TrailingStop,Ordervalue(cnt,VAL_TAKEPROFIT),Red);Exit;else/otherwiseitisalongposition/wecheck-maybe,itsalreadytimetocloseit?IfMacdCurrentSignalCurrentandMacdPrevious(MACDCloseLevel*Point)thenCloseOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_LOTS),Ask,3,Vio

19、let);Exit;/exiting;/wecheck-maybe,wealreadymayoritsalreadytimetosetatrailingstop?IfTrailingStop0then/theuserhasputatrailingstopinhissettings/so,wesetouttocheckitIf(Ordervalue(cnt,VAL_OPENPRICE)-Ask)(Point*TrailingStop)thenIfOrdervalue(cnt,VAL_STOPLOSS)=0orOrdervalue(cnt,VAL_STOPLOSS)(Ask+Point*Trail

20、ingStop)thenModifyOrder(Ordervalue(cnt,VAL_TICKET),Ordervalue(cnt,VAL_OPENPRICE),T),Red);Ask+Point*TrailingStop,Ordervalue(cnt,VAL_TAKEPROFIExit;/theend.现在,我们只需给以下外部变量赋值就可以完成安装人工智能系统的全过程.LOTS=l,STOPLOSS(S/L)=0,TAKEPROFIT(T/P)=120(适用于一个小时的间vBR隔),TRAILINGSTOP(T/S)=30,当然你自己可以设定这些值.vBR按VERIFY按纽,若无别的错误就按

21、SAVE按纽.现在,我们来编辑人工智能系统在MQL编辑器点击顶端的VERIFY图示(像一张有检查标记的纸.)。vBRvBR第四步:检测人工智能系统的历史资料vBRxBRxBR我们已将人工智能系统编写完毕,现在我们已迫不及待地想用历史数据来对系统进行测试。让我们以EUR/USD的15分钟的间隔(大约4000棍)。为例,打开环球银行交易平台中的EUR/USD15分钟图,用ATTACHTOACHART命令将人工智能系统的MACD指针样本图粘贴在图表上(在导航窗口用鼠标选择MACD样本线,点击鼠标右键选择所弹出菜单的命令).然后,到系统设置里,在这我们可以改变预设变量和用户自定义变量,如LOTSSTO

22、PLOSSPROFIT.TRAILINGSTOP等.为了让人工智能系统不仅只起到建议的作用,还能在营业账户上自动进行实时操作,你需要击活ALLOWLIVETRADING按纽.现在,我们来进行历史数据的测试了,我们不改变设置,转接到STRATEGYTESTER标签,击活ALLOWSONTHECHART标记(要能在图表上看到箭头),然后,按START按纽开始测试.vBRvBRvBR人工智能系统所有代码在ReadyExpertAdvisors页都可找到。vBR当你对人工智能系统作出修改时必须紧记:vBR修改和测试环球银行交易平台的人工智能系统时必须注意以下细节:.在建立仓位之前,你必须检查你账户上可

23、用保证金的有效性。假如可用保证金不足时,则开仓请求将会失败。必须注意的是,为了达到测试的目的,可用保证金最少应在1000元,另一张单的测试价格也是1000元。vBRIfFreeMargin&It;1000ThenExit;/nofunds-exit当开仓、平仓或者修改已有部位或删除预先设定的部位(即是执行以下任何的操作:SetOrder,CloseOrder,ModifyOrderorDeleteOrder)时,建议使用人工智能系统的Exit语句来完成这部分的操作,这将有10秒钟的限定时间间隔来执行该项操作。注意,10秒钟的限定时间不适用于测试模式(你可以在一行中做几次交易),另外,假如不是用

24、Exit语句来完成人工智能系统的上述交易操作,人工智能系统的测试结果将和真实交易不同。SetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED);/executingvBRExit;/exiting为了防止在测试模式中用少于10秒的间隔来执行几项交易,你只需确保从上一次交易到下一次的交易已经超过10秒。makingsurethatthecurrenttimevalueisgreaterthan10secondssincetheexecutionofthelasttradeIfCurTimeLastTradeTime+10ThenBeginSetOrder(OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,RED);/executingExit;End;.历史数据可以用已引索的预设变量OPEN、CLOSE、HIGH、LOW、VOLUME来存取.在这种情况下,指数是指必须回头计算的周期数./iftheClos

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论