//+------------------------------------------------------------------+ //| MACD 4H.mq4 | //| Copyright © 2006, lukas1 | //| MACD from old timeframe | //| v.10 enable for visual mode | //+------------------------------------------------------------------+ #property copyright "Copyright © 2006, lukas1" //---- indicator settings #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 MediumPurple #property indicator_color2 Red #property indicator_width1 2 //---- indicator parameters extern int FastEMA=12; extern int SlowEMA=26; extern int SignalSMA=9; extern int AppliedPrice = 0; // 0=PRICE_CLOSE; 1=PRICE_OPEN; 5=PRICE_TYPICAL extern int VarPeriod=240; //old timeframe //PERIOD_M5 5 5 minutes //PERIOD_M15 15 15 minutes //PERIOD_M30 30 30 minutes //PERIOD_H1 60 1 hour //PERIOD_H4 240 4 hours //PERIOD_D1 1440 1 day //PERIOD_W1 10080 1 week //PERIOD_MN1 43200 1 month //---- indicator buffers double MacdBuffer[],SignalBuffer[]; int p; // current period int k; // repetition factor old timeframe //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- drawing settings SetIndexStyle(0, DRAW_HISTOGRAM); SetIndexStyle(1, DRAW_LINE); SetIndexStyle(2, 12); SetIndexStyle(3, 12); SetIndexDrawBegin(0, SlowEMA); SetIndexDrawBegin(1, SlowEMA); IndicatorDigits(Digits + 1); //---- indicator buffers mapping SetIndexBuffer(0, MacdBuffer); SetIndexBuffer(1, SignalBuffer); //---- name for DataWindow and indicator subwindow label IndicatorShortName("MACD 4H (" + FastEMA + "," + SlowEMA + "," + SignalSMA + ", " + VarPeriod + "min)"); SetIndexLabel(0, "MACD 4H(" + VarPeriod + ")"); SetIndexLabel(1, "Signal 4H(" + VarPeriod + ")"); //---- initialization done return(0); } //+------------------------------------------------------------------+ //| Moving Averages Convergence/Divergence (MACD) for old timeframe | //+------------------------------------------------------------------+ int start() { int i, limit; int counted_bars = IndicatorCounted(); //---- check for possible errors if(counted_bars < 0) return(-1); if(counted_bars <= SlowEMA) limit = Bars - SlowEMA ; else limit = Bars - counted_bars; p = Period(); k = VarPeriod/p; // repetition factor old timeframe i=limit-1; while (i>=0) { int bb=HighBar(Symbol(), 0, i, VarPeriod); // definition of HighBar, having symbol, lowTF, // and bar's number in lowTF, calculated highTF; // (symbol, lowTF, bar's number, highTF) if (bb==-1) continue; MacdBuffer[i] =iMACD(Symbol(), VarPeriod, FastEMA, SlowEMA, SignalSMA, AppliedPrice, 0, bb); SignalBuffer[i]=iMACD(Symbol(),VarPeriod, FastEMA, SlowEMA, SignalSMA, AppliedPrice, 1, bb); i--; } //---- done return(0); } //+------------------------------------------------------------------+ int HighBar(string symbol,int TFLow,int BarLow,int TFHigh) // definition of HighBar, having symbol, lowTF, // and bar's number in lowTF, calculated highTF; // (symbol, lowTF, bar's number, highTF) { datetime BarTimeLow=iTime(symbol, TFLow, BarLow); // time's value of bar means in BarLow int error=GetLastError(); if(error==4066) return (-1); int res=iBarShift(symbol, TFHigh, BarTimeLow, false);// displacement of bar means in BarTimeLow error=GetLastError(); if(error==4066) return (-1); return (res); } //+------------------------------------------------------------------+