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

【MACD】变色MACD

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-23 16:29:00 | 显示全部楼层 |阅读模式
//+------------------------------------------------------------------+

//|                                                       macdbs.mq4 |

//|                        Copyright 2021, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

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

#property  indicator_separate_window

#property  indicator_buffers 3

#property  indicator_color1  Black

#property  indicator_color2  Green

#property  indicator_color3  Red

//--- buffers

double     ExtMacdBuffer[];

double     ExtUpBuffer[];

double     ExtDnBuffer[];

//---

#define PERIOD_FAST  12

#define PERIOD_SLOW 26

//--- bars minimum for calculation

#define DATA_LIMIT  34

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

//| Custom indicator initialization function                         |

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

void OnInit(void)

  {

//--- drawing settings

   SetIndexStyle(0,DRAW_NONE);

   SetIndexStyle(1,DRAW_HISTOGRAM);

   SetIndexStyle(2,DRAW_HISTOGRAM);

   IndicatorDigits(Digits+1);

   SetIndexDrawBegin(0,DATA_LIMIT);

   SetIndexDrawBegin(1,DATA_LIMIT);

   SetIndexDrawBegin(2,DATA_LIMIT);

//--- 3 indicator buffers mapping

   SetIndexBuffer(0,ExtMacdBuffer);

   SetIndexBuffer(1,ExtUpBuffer);

   SetIndexBuffer(2,ExtDnBuffer);

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

   IndicatorShortName("MACD");

   IndicatorShortName("MACD("+IntegerToString(PERIOD_FAST)+","+IntegerToString(PERIOD_SLOW)+")");

   SetIndexLabel(1,NULL);

   SetIndexLabel(2,NULL);

  }

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

//| Awesome 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=rates_total-prev_calculated;

   double prev=0.0,current;

//--- check for rates total

   if(rates_total<=DATA_LIMIT)

      return(0);

//--- last counted bar will be recounted

   if(prev_calculated>0)

     {

      limit++;

      prev=ExtMacdBuffer[limit];

     }

//--- macd

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

      ExtMacdBuffer=iMA(NULL,0,PERIOD_FAST,0,MODE_EMA,PRICE_CLOSE,i)-

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

//--- dispatch values between 2 buffers

   bool up=true;

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

     {

      current=ExtMacdBuffer;

      if(current>prev)

         up=true;

      if(current<prev)

         up=false;

      if(!up)

        {

         ExtDnBuffer=current;

         ExtUpBuffer=0.0;

        }

      else

        {

         ExtUpBuffer=current;

         ExtDnBuffer=0.0;

        }

      prev=current;

     }

//--- done

   return(rates_total);

  }

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

本版积分规则

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

GMT+8, 2026-10-12 15:44 , Processed in 0.101899 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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