mt4创建智能化交易系统的步骤_第1页
mt4创建智能化交易系统的步骤_第2页
mt4创建智能化交易系统的步骤_第3页
mt4创建智能化交易系统的步骤_第4页
mt4创建智能化交易系统的步骤_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、范文范例参考以MQL4语言程序为原理展示一个以标准 MACD指标为根底简单的智能交易系统 的创立.在这个智能交易中,我们将看到一些特性的例如,像赢利水平的设定, 追踪止损的设置等等.在我们的范例中,通过开仓和治理仓位来完成交易.交易原理: Long (BUY) entry - MACD旨标在零以下,从下至上并且穿过低端的信-MACD指标在零以上,从上至下并且穿过顶端的信完美Word格式整理版MACD的信号)°MACD的信号)°追踪止损的执行或当穿过 线(MACD指标在零以上,从上至下并且穿过顶端的信号线* Short exit -赢利上限的执行,追踪止损的执行或当穿过 线(

2、MACD指标在零以下,从下至上并且穿过低端的信号线重要提示:从我们的分析上排除一些 MACD指标微缺乏道的变化(图表上的小 山丘'),我们介绍一种补充检测山丘大小的方法如下 :指标的大小应该在最 低价的最后 5 个单元(5*Point,对于 USD/CHF = 0.0005 和 USD/JPY = 0.05).步骤1-编写智能交易的描述IMACD5+ 刨逹口Inrl设定快提髏闵Online library卷 Moving 目定刘詡 +©卿本+:攬术扌擁在智能交易的导航窗口处,点击鼠标右 键并且选择在菜单中的“创立新智能交 易.创立智能交易的初始提醒将会询 问你进入数据中央.在

3、显示窗口,填写 智能交易的名称名称-MACD Sample, 作者作者-指出你的名字,链接连 接-你网页的链接,注解注解- MACD根本智能交易的测试范例.步骤2 -创立程序的根本结构测试智能交易的源代码将只占据一点位置, 但是还是有些量经常很难抓住,特别 是我们不是专业的编成工作者-另外,我们不需要这些描述,不是吗?:一个标准智能交易的结构设想,让我们看看以下局部的描述 :1. 初始变量2. 初始数据检测o检测图表,图表中的柱数o检测外部变量值:标准手,S/L, T/P, T/S3. 对于快速数据通道设置内部变量4. 检测交易终端-是无效的吗?如果是:o 检测:账户上的可用保证金 o可能是看

4、涨仓位BUY?开设看涨仓位并退出5. 可能是卖空仓位SELL?o开设卖空仓位并退出退出智能交易周期循环检验先前开仓o如果是看涨仓位应该平仓?应该重新设定追踪止损?*如果是卖空仓位o 应该平仓?o应该重新设定追踪止损?返回的结果很简单,只有4种.现在让我们尝试一步一步地区完成列出的方案:1. 初始变量所有使用在智能交易程序中的变量必须根据MetaQuotes Language 4要求的指定.这就是为什么我们在程序的开始插入初始变量的原因exter n double TakeProfit = 50; exter n double Lots = 0.1;exter n double Traili n

5、gStop = 30; extern double MACDOpe nLevel=3; extern double MACDCIoseLevel=2; extern double MATre ndPeriod=26;MetaQuotes语言4是需要“外部变量辅助的.外部变量可以从外部设 定,在智能交易程序源代码设定之后不可以修改. 提供一个额外的灵活性. 在我们的程序中,MATre ndPeriod变量作为外部变量指定.在程序开始 我们插入这个变量.extern double MATre ndPeriod=26;2. 检测初始数据该代码局部通常使用在所有的智能交易中.由于是一个标准的检测:/初

6、始数据检测/确认智能交易运行正常非常重要/图表和用户设置不能出现任何错误/ 变量(Lots, StopLoss, TakeProfit,/ TrailingStop)我们的情况需要检测TakeProfit/图表中少于100柱if(Bars<100)Print(" 少于 100 柱");return(0);if(TakeProfit<10)Print(" 赢利少于10");return(0); /检测 TakeProfit3. 对于数据的快速通道设置内部变量在源代码中经常需要注意指标值或计算值.简化代码和数据放置在内部变量中.4. int st

7、art()5. 6. double MacdCurre nt, MacdPrevious, Sign alCurre nt;7. double Sig nalPrevious, MaCurre nt, MaPrevious;8. int ent, ticket, total;9.9. /简化代码10. /数据放置在内部变量中11. MacdCurre nt=iMACD(NULL,0,12,26,9,PRICE_CL0SE,M0DE_MAIN,0);12. MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);14.Sig nalC

8、urre nt=iMACD(NULL,0,12,26,9,PRICE_CL0SE,M0DE_SIGNAL,0);15.Sig nalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);16.MaCurre nt=iMA(NULL,0,MATre ndPeriod,0,MODE_EMA,PRICE_CLOSE,0);MaPrevious=iMA(NULL,0,MATre ndPeriod,0,MODE_EMA,PRICE_CLOSE,1);现在,用 iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,

9、代替,您可 以在源代码中使用 MacdCurre nt.17.检测交易终端 -是空的吗?如果是:在我们的智能交易中,我们仅使用开单和操作挂单.不过,使更平安,我们来熟悉一种对于先前定单交易终端检测:total=OrdersTotal();if(total<1)o 检测:账户上的可用保证金 在分析市场状况之前,检测你的账户上可用的自由保证金可以开 仓.if(Accou ntFreeMargi n() v(1000*Lo ts)Print("没有资金.自由保证金=",Accou ntFreeMargi n();return(0);o可能是看涨仓位(BUY)?进入看涨仓位的

10、条件:MACD低于零,向上并且穿过信号线向下 这就是我们在MQL4中描述的(注意我们在指标上的业务值保存 在先前的变量中):/尽可能检测看涨仓位(BUY)if(MacdCurre nt<0 && MacdCurre nt>Sig nalCurre nt && MacdPreviousMathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurre nt>MaPrevious)ticket=OrderSe nd(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+Tak

11、ePro fit*Poi nt,"macd sample",16384,0,Gree n);if(ticket>0)if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES) Prin t("BUY开单:",OrderOpe nPrice();else Prin t("错误 ope ning BUY order :",GetLastError();return(0);附加的检验山丘的大小上面已经给出了描述.MACDOpe nLevel变量是一个用户指定变量,它不可能改变程序文本,但是却

12、有很大 的灵活性.在程序开始我们插入这个变量的描述.能交易示范22021年02月18日 星期四10:15可能是卖空仓位(SELL)?进入卖空仓位的条件:MACD高于零,向上并且穿过信号线向下.注解如下 /尽可能的检测卖空仓位(SELL)if(MacdCurre nt>0 && MacdCurre ntSig nalPrevious &&MacdCurre nt>(MACDOpe nLevel*Poi nt) && MaCurre ntticket=OrderSe nd(Symbol(),OP_SELL,Lots,Bid,3,0,Bid

13、-TakeProfit*Poi nt,"macd sample",16384,0,Red);if(ticket>0) if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)Prin t("SELL开单:",OrderOpe nPrice();else Prin t("错误 SELL定单开仓:",GetLastError();return(0);return(0);周期循环检验先前开仓/进入市场的正确性非常重要/但是更重要的是平安退出for(c nt=0;cntOrderSelect

14、(cnt, SELECT_BY_POS, MODE_TRADES);if(OrderType()<=OP_SELL && /检验开仓OrderSymbol()=Symbol() /检验货币对"cnt"-"是一个循环的变量必须在程序开始指定如下:int cnt = 0;如果是看涨仓位if(OrderType()=OP_BUY) /翻开看张仓位o 应该平仓吗?退出看涨仓位的条件:MACD穿过信号线,MACD高于零,向上并 穿过信号线向下.if(MacdCurre nt>0 && MacdCurre ntSig nalPrev

15、ious && MacdCurre nt>(MACDCloseLevel*Poi nt) OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); /平仓return(0); / 退出o应该重设追踪止损马?我们设定追踪止损只有在仓位盈利已经超过追踪水平点,并且新的 止损水平点好于先前的水平./检测追踪止损if(Traili ngStop>0) if(Bid-OrderOpe nPrice()>Poi nt*Traili ngStop)if(OrderStopLoss()OrderModify(OrderTicket

16、(),OrderOpe nPrice(),Bid-Poi nt*Trai lin gStop,OrderTakeProfit(),0,Gree n);return(0);我们停止操作符.如果是卖空仓位else / 卖空仓位*应该平仓吗?退出卖空仓位的条件:MACD穿过信号线,MAC低于零,向上并且穿过信 号线向下.if(MacdCurre nt<0 && MacdCurre nt>Sig nalCurre nt && MacdPrevious(MACDCIoseLevel*Poi nt) OrderClose(OrderTicket(),OrderL

17、ots(),Ask,3,Violet); /平仓return(0); / 退出应该重设追踪止损吗?我们设定追踪止损只有在仓位盈利已经超过追踪水平点,并且新的止损水 平点好于先前的水平./检测追踪止损if(Traili ngStop>0)if(OrderOpe nPrice()-Ask)>(Poi nt*Traili ngStop)if(OrderStopLoss()>(Ask+Point*TrailingStop) | (OrderStopLoss()=0)OrderModify(OrderTicket(),OrderOpe nPrice(),Ask+Poi nt*Trail

18、i ngSt op,OrderTakeProfit(),0,Red);return(0);关闭所有残留开仓.return(0);这样一步一步地编写我们的智能交易智能交易示范32021年02月18日 星期四10:16步骤3 -集中程序的结果代码让我们翻开智能交易的设定:使用按钮翻开"属性"菜单.在窗口内指定运行 参量的外部设定:从先前局部集中全部代码:+|MACDSample.mq4|Copyright? 2005, MetaQuotes Software Corp. | :/ metaquotes. net/|/+ +exter n double TakeProfit =

19、50;exter n double Lots = 0.1;exter n double Traili ngStop = 30; extern double MACDOpe nLevel=3; extern double MACDCloseLevel=2; extern double MATre ndPeriod=26;/+/|+int start()double MacdCurre nt, MacdPrevious, Sign alCurre nt;double Sig nalPrevious, MaCurre nt, MaPrevious;int ent, ticket, total;/检测

20、初始化数据/确定智能交易在图表中运行正常非常重要/用户在外部变量交易中不会产生任何错误/外部变量(标准手数,止损,赢利,/追踪止损)在这种情况下,我们检测图表中赢利水平要小于100柱if(Bars<100)Print(" 少于 100 柱");return(0);if(TakeProfit<10)Print("赢利少于10");return(O); /检测赢利水平/简化代码和加速通道/数据被放置在内部变量中MacdCurre nt=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);MacdPrevio

21、us=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);Sig nalCurre nt=iMACD(NULL,O,12,26,9,PRICE_CLOSE,MODE_SIGNAL,O);Sig nalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);MaCurre nt=iMA(NULL,0,MATre ndPeriod,0,MODE_EMA,PRICE_CLOSE,0);MaPrevious=iMA(NULL,0,MATre ndPeriod,0,MODE_EMA,PRICE_CLOSE,

22、1);total=OrdersTotal();if(total<1)/没有指定开单if(Accou ntFreeMargi n() <(1000*Lots)Print("没有资金.自由保证金=", AccountFreeMargin();return(0);/尽可能检测看涨仓位(BUY)if(MacdCurre nt<0 && MacdCurre nt>Sig nalCurre nt &&MacdPreviousvSig nalPrevious &&MathAbs(MacdCurrent)>(MA

23、CDOpenLevel*Point) &&MaCurre nt>MaPrevious)ticket=OrderSe nd(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Poi nt,"m acd sample",16384,0,Gree n);if(ticket>0) if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)Prin t("BUY 定单开仓:",OrderOpe nPrice();else Prin t("错误 B

24、UY定单开仓:",GetLastError();return(0);/尽可能检测卖空仓位(SELL)if(MacdCurre nt>0 && MacdCurre nt<Sig nalCurre nt &&MacdPrevious>Sig nalPrevious &&MacdCurre nt>(MACDOpe nLevel*Poi nt) && MaCurre ntvMaPrevious) ticket=OrderSe nd(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-Tak

25、eProfit*Poi nt," macd sample",16384,0,Red);if(ticket>0) if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)Prin t("SELL 定单开仓:",OrderOpe nPrice();else Prin t("错误 SELL定单开仓:",GetLastError();return(0);return(0);/正确进入市场很重要,/但正确退出市场更重要for(c nt=0;c nt<total;cnt+)OrderSel

26、ect(c nt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && /检测开仓OrderSymbol()=Symbol() /检测货币对if(OrderType()=OP_BUY) /看涨仓位开仓/需要平仓吗?if(MacdCurre nt>0 && MacdCurre nt<Sig nalCurre nt &&MacdPrevious>Sig nalPrevious &&MacdCurre nt>(MACDCloseLevel*Poi nt)OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);/平仓return(O); /退出/检测追踪止损if(Traili ngStop>0)if(Bid-OrderOpe nPrice()>Poi nt*Traili ngStop) if(OrderStopLoss()<Bid-Poi nt*Traili ngStop)OrderModify(OrderTicket(),OrderOpe nPrice(),B

温馨提示

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

评论

0/150

提交评论