MACD Sample智能交易解说.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
//+------------------------------------------------------------------+ //| MACD Sample.mq4 | //| ... [/quote] extern double TakeProfit = 50;?? 盈利目标点数 extern double Lots = 0.1; ?? ?? 每单入场的手数 extern double TrailingStop = 30; 追踪止损的点数 extern double MACDOpenLevel=3; MACD开仓的参考位置 extern double MACDCloseLevel=2; MACD出场的参考位置 extern double MATrendPeriod=26; 条件中使用的MA均线的周期数 程序最上面extern开始的这些数据都是程序参数,也就是在使用者调用的时候可以修改的部分。 这个EA是个常见的技术指标条件入场,条件出场 同时又移动止损功能的完成示意,很适合初学者研究。 先总结这个程序的基本条件的意思 以方便大家对号入座,尽快理解。 多头入场条件: ?? MACD小于0 并且 小于指定的参数MACDOpenLevel?? 并且 MACD讯号下穿基准线(死叉) 并且 MA向上趋势 多头出场条件: ?? MACD大于0 并且 大于指定的参数MACDCloseLevel 并且 MACD信号线上传基准线(金叉) 空头入场条件: MACD大于0 并且 大于指定的参数MACDOpenLevel并且 MACD讯号线上穿基准线(金叉) 并且 MA向下趋势 空头出场条件: MACD小于0 并且 小于制定的参数MACDCloseLevel?? 并且 MACD讯号线下穿基准线(死叉) ============================================================= 有了以上的初步了解,下面开始进行EA程序基本结构的分析: 1、start()函数是最重要的执行部分,价格只要变动, 此函数都自动执行一次,所以主要的逻辑结构都在这个函数里 2、程序的基本流程都是按照以下步骤进行,我们先牢牢记住这个结构,然后再对号入座去理解程序。 先判断当前自身的仓位状态,因为start函数式循环运行的,所以中间的每个步骤都会使用start函数,因此,当函数开始的时候我们首先要通过MT4的仓位操作函数获得当前的仓位状态,并进一步根据状态进行不同分支的计算。 程序开始的以下两个部分不重要 简单说一下: if(Bars100) ??? { ?? Print(bars less than 100); ?? return(0);?? ??? } 以上是说如果当前图形的K线个数少于100 则不进行运算 直接返回。这种情况一般不会出现,所以我们自己写程序的时候可以不写这部分。 if(TakeProfit10) ??? { ?? 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,则说明是空仓状态,那末就进行

文档评论(0)

fc86033 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档