在MT4上使用双线MACD指标源码

在MT4上使用双线MACD指标源码MACD指标是股票交易中经典的一款技术分析指标,该指标由两条曲线和柱线组成。基本用法:MACD金叉:DIFF由下向上突破DEA,为买入信号。MACD死叉:DIFF由上向下突破DEA,为卖出信号。MACD绿转红:MACD值由负变正,市场由空头转为多头。MACD红转绿:MACD值正转负,市场多头转空头。DIFF与DEA均为正值,即都在零轴线以上时,大势属于多头市场,DIFF向上突破DEA,可以做买入信号。DIFF与DEA均为负值,即都在零轴线以下时,大势属于空头市场,DIFF向下跌破DEA,可做卖出信号。DE

大家好,又见面了,我是你们的朋友全栈君。

MACD指标是股票交易中经典的一款技术分析指标,该指标由两条曲线和柱线组成。

基本用法:MACD金叉:DIFF由下向上突破DEA,为买入信号。MACD死叉:DIFF由上向下突破DEA,为卖出信号。MACD绿转红:MACD值由负变正,市场由空头转为多头。MACD红转绿:MACD值正转负,市场多头转空头。DIFF与DEA均为正值,即都在零轴线以上时,大势属于多头市场,DIFF向上突破DEA,可以做买入信号。DIFF与DEA均为负值,即都在零轴线以下时,大势属于空头市场,DIFF向下跌破DEA,可做卖出信号。DEA在盘整局面失误率高,配合RSI及KDJ指标可以适当弥补缺点。

效果如下:
在这里插入图片描述
源代码:

#property copyright "Copyright 2021,EATrader."

#property link "https://www.mql5.com/"

#property description "关注公众号:从零开始学EA交易"

                       "\n微信号:XQH20200705"

#property icon "\\Images\\001.ico"

#property version "1.00"

#property strict

#property indicator_separate_window

#property indicator_buffers 4

#property indicator_plots 4

//--- plot DIF

#property indicator_label1 "DIF"

#property indicator_type1 DRAW_LINE

#property indicator_color1 clrSilver

#property indicator_style1 STYLE_SOLID

#property indicator_width1 1

//--- plot DEA

#property indicator_label2 "DEA"

#property indicator_type2 DRAW_LINE

#property indicator_color2 clrYellow

#property indicator_style2 STYLE_SOLID

#property indicator_width2 1

//--- plot macd hist+

#property indicator_label3 "Macd+"

#property indicator_type3 DRAW_HISTOGRAM

#property indicator_color3 clrRed

#property indicator_style3 STYLE_SOLID

#property indicator_width3 1

//--- plot macd hist-

#property indicator_label4 "Macd-"

#property indicator_type4 DRAW_HISTOGRAM

#property indicator_color4 clrAqua

#property indicator_style4 STYLE_SOLID

#property indicator_width4 1





input int FastEMA = 12;

input int SlowEMA = 26;

input int MACDEMA = 9;





//--- indicator buffers

double         DIFBuffer[];

double         DEABuffer[];

double         MacdHistBuffer[];

double         MacdHistBuffer1[];

double w=0;

double w1=0;

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

int OnInit()

  { 
   

//--- indicator buffers mapping

   SetIndexBuffer(0,DIFBuffer);

   SetIndexBuffer(1,DEABuffer);

   SetIndexBuffer(2,MacdHistBuffer);

   SetIndexBuffer(3,MacdHistBuffer1);



   SetIndexEmptyValue(2,EMPTY_VALUE);

   SetIndexEmptyValue(3,EMPTY_VALUE);



   for(int i=0; i<4; i++)

      SetIndexDrawBegin(i,SlowEMA+MACDEMA);



   IndicatorDigits(Digits);



   IndicatorShortName("MACD("+(string)FastEMA+","+(string)SlowEMA+","+(string)MACDEMA+")");



   if(FastEMA<0 || SlowEMA<0 || MACDEMA<0)

      return(INIT_FAILED);



   w = 2.0/(MACDEMA + 1);

   w1= 1.0-w;



//---

   return(INIT_SUCCEEDED);

  }

//+------------------------------------------------------------------+

//| Custom indicator iteration function |

//+------------------------------------------------------------------+

int OnCalculate(const int rates_total,

                const int prev_calculated,

                const datetime &time[],

                const double &open[],

                const double &high[],

                const double &low[],

                const double &close[],

                const long &tick_volume[],

                const long &volume[],

                const int &spread[])

  { 
   

//---

   int i,limit=0;

   if(rates_total<=0) return(0);

   if(prev_calculated<=0) limit=rates_total-1;

   else limit=rates_total-prev_calculated+1;

   double hst=0.0;

   for(i=limit; i>=0; i--)

     { 
   

      if(i==rates_total-1) continue;

      DIFBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

      DEABuffer[i]=w*DIFBuffer[i]+w1*DEABuffer[i+1];

      hst = 2.0*(DIFBuffer[i]-DEABuffer[i]);

      if(hst>=0)

        { 
   

         MacdHistBuffer[i]=hst;

         MacdHistBuffer1[i]=EMPTY_VALUE;

        }

      else

        { 
   

         MacdHistBuffer1[i]=hst;

         MacdHistBuffer[i]=EMPTY_VALUE;

        }



     }



//--- return value of prev_calculated for next call

   return(rates_total);

  }

//+------------------------------------------------------------------+

工欲善其事,必先利其器,交易最重要的是遵守规则,严格执行。关注公众号,学习MQL入门到精通EA教程,学习更多EA编程,畅写属于自己的EA,锻造属于自己的神兵利器。
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/139285.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据挖掘十大算法–Apriori算法

    数据挖掘十大算法–Apriori算法一、Apriori算法概述Apriori算法是一种最有影响力的挖掘布尔关联规则的频繁项集的算法,它是由RakeshAgrawal和RamakrishnanSkrikant提出的。它使用一种称作逐层搜索的迭代方法,k-项集用于探索(k+1)-项集。首先,找出频繁1-项集的集合。该集合记作L1。L1用于找频繁2-项集的集合L2,而L2用于找L2,如此下去,直到不能找到

    2022年5月28日
    33
  • IDEA20.3.1激活码(最新序列号破解)

    IDEA20.3.1激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    174
  • 0001.Latex中中文双引号和单引号的写法「建议收藏」

    0001.Latex中中文双引号和单引号的写法「建议收藏」0001.Latex中中文单引号和双引号的写法如何在Latex或者Ctex中输入中文双引号or单引号?在Latex中,查看Tab键上面的键,在英文状态下连续输入两个“,然后输入Enter键左边的单引号’’,输入两次,也是英文状态下哦。可以将一个矩阵$“\cdot$”按列拉直成一个向量注意引号与$符号的位置。同样的,中文单引号如下输入可以将一个矩阵$`\Gamma$’按列拉直成一个向量…

    2022年6月25日
    89
  • proteus仿真之DS1302+LCD1602显示试验[通俗易懂]

    proteus仿真:DS1302LCD1602显示试验

    2022年4月6日
    48
  • 关于OpenProcessToken「建议收藏」

    关于OpenProcessToken「建议收藏」OpenProcessToken  要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限。可是,就算我们用Administrator帐号对一个系统安全进程执行OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID)还是会遇到“访问拒绝”的错误。什么原因呢?原来在默认的情况下进程的一些访问权限

    2022年6月25日
    23
  • 玩转并理解linux中的文件/目录的rwx权限

    玩转并理解linux中的文件/目录的rwx权限linux是一个相对安全的系统,其中的权限更是无处不在。在本文中,我们来谈谈linux中的文件/目录的rwx权限。为了简便起见,我们仅仅以文件owner的rwx为例。一.文件的rwx权限分别是什么意思?1.r权限:可读权限,验证如下:[taoge@localhostlearn_c]$ls-ltotal0[t

    2022年5月29日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号