找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 5|回复: 0

【双线macd指标】MT4里macd是单线,此源码为双线

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-20 19:16:00 | 显示全部楼层 |阅读模式





#property copyright   "chenxiangcic"

#property description "Moving Averages of Oscillator"

#property strict


#include <MovingAverages.mqh>


//--- indicator settings

#property  indicator_separate_window

#property  indicator_buffers 3

#property  indicator_color1  clrGreen

#property  indicator_color2  clrRed

#property  indicator_color3  clrYellow

#property  indicator_width1  1

//--- indicator parameters

input int InpFastEMA=12;   // Fast EMA Period

input int InpSlowEMA=26;   // Slow EMA Period

input int InpSignalSMA=9;  // Signal SMA Period

//--- indicator buffers

double ExtmacdBuffer[];

double ExtdifBuffer[];

double ExtdeaBuffer[];

//--- right input parameters flag

bool   ExtParameters=false;

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

//| Custom indicator initialization function                         |

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

int OnInit(void)

  {

//--- 2 additional buffers are used for counting.

   IndicatorBuffers(3);

//--- drawing settings

   SetIndexStyle(0,DRAW_HISTOGRAM);

   SetIndexDrawBegin(0,InpSignalSMA);

   IndicatorDigits(Digits+1);

//--- 3 indicator buffers mapping

   SetIndexBuffer(0,ExtmacdBuffer);

   SetIndexBuffer(1,ExtdifBuffer);

   SetIndexBuffer(2,ExtdeaBuffer);

//--- name for DataWindow and indicator subwindow label

   IndicatorShortName("MACD("+IntegerToString(InpFastEMA)+","+IntegerToString(InpSlowEMA)+","+IntegerToString(InpSignalSMA)+")");

   SetIndexLabel(0,"macd");

   SetIndexLabel(1,"dif");

   SetIndexLabel(2,"dea");

//--- check for input parameters

   if(InpFastEMA<=1 || InpSlowEMA<=1 || InpSignalSMA<=1 || InpFastEMA>=InpSlowEMA)

     {

      Print("Wrong input parameters");

      ExtParameters=false;

      return(INIT_FAILED);

     }

   else

      ExtParameters=true;

//--- initialization done

   return(INIT_SUCCEEDED);

  }

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

//| Moving Average of Oscillator                                     |

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

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;

//---

   if(rates_total<=InpSignalSMA || !ExtParameters)

      return(0);

//--- last counted bar will be recounted

   limit=rates_total-prev_calculated;

   if(prev_calculated>0)

      limit++;

//--- macd counted in the 1-st buffer

   for(i=0; i<limit; i++)

      ExtdifBuffer=iMA(NULL,0,InpFastEMA,0,MODE_EMA,PRICE_CLOSE,i)-

                    iMA(NULL,0,InpSlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

//--- signal line counted in the 2-nd buffer

   SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtdifBuffer,ExtdeaBuffer);

//--- main loop

   for(i=0; i<limit; i++)

      ExtmacdBuffer=ExtdifBuffer-ExtdeaBuffer;

//--- done

   return(0);

  }
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-10 15:54 , Processed in 0.106451 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表