//+------------------------------------------------------------------+
//| MACD Signal.mq4 |
//| Copyright © 2011, Khlystov Vladimir |
//| http://cmillion.narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, cmillion@narod.ru"
#property link "http://cmillion.narod.ru"
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 Black
#property indicator_color2 Gray
#property indicator_color3 Green
#property indicator_color4 Red
#property indicator_color5 Blue
#property indicator_color6 Red
#property indicator_width7 2
extern int FastEMA = 12;
extern int SlowEMA = 26;
extern int SignalSMA = 9;
double MacdBuffer[];
double MacdBufferRed[];
double MacdBufferBlue[];
double SignalBuffer[];
double SignalBufferRed[];
double SignalBufferBlue[];
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int init()
{
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexStyle(1,DRAW_LINE);
SetIndexDrawBegin(1,SignalSMA);
IndicatorDigits(Digits+1);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexStyle(3,DRAW_HISTOGRAM);
SetIndexStyle(4,DRAW_ARROW,0,2);
SetIndexArrow(4,233);
SetIndexStyle(5,DRAW_ARROW,0,2);
SetIndexArrow(5,234);
SetIndexBuffer(0,MacdBuffer);
SetIndexBuffer(1,SignalBuffer);
SetIndexBuffer(2,MacdBufferRed);
SetIndexBuffer(3,MacdBufferBlue);
SetIndexBuffer(4,SignalBufferRed);
SetIndexBuffer(5,SignalBufferBlue);
IndicatorShortName("MACD("+FastEMA+","+SlowEMA+","+SignalSMA+")");
SetIndexLabel(0,"MACD");
SetIndexLabel(1,"Signal");
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0) return(-1);
if(counted_bars > 0) counted_bars--;
int limit = Bars - counted_bars;
if(counted_bars==0) limit-=1+1;
for(int i=0; i<limit; i++)
MacdBuffer[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
for(i=0; i<limit; i++)
SignalBuffer[i]=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);
for(i=0; i<limit; i++)
if(MacdBuffer[i+1]<MacdBuffer[i]) MacdBufferRed[i]=MacdBuffer[i];
else MacdBufferBlue[i]=MacdBuffer[i];
for(i=0; i<limit; i++)
{
if(SignalBuffer[i+1]<MacdBuffer[i+1]&& SignalBuffer[i]>MacdBuffer[i]) SignalBufferBlue[i]=SignalBuffer[i];
if(SignalBuffer[i+1]>MacdBuffer[i+1] && SignalBuffer[i]<MacdBuffer[i]) SignalBufferRed[i]=SignalBuffer[i];
}
return(0);
}
//+------------------------------------------------------------------+
если вы сказали не надо доделывать, править не буду
<code>//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 10.06.2008 | //| Описание : Возвращает количество баров между двумя последними фракталами. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" или NULL - текущий символ) | //| tf - таймфрейм ( 0 - текущий ТФ) | //+----------------------------------------------------------------------------+ int BarsBetweenLastFractals(string sy="", int tf=0) { double fu=0, fd=0; int i, nu=0, nd=0; if (sy=="" || sy=="0") sy=Symbol(); for (i=2; i<100; i++) { fu=iFractals(sy, tf, MODE_UPPER, i); if (fu!=0) { if (nu==0) nu=i; } fd=iFractals(sy, tf, MODE_LOWER, i); if (fd!=0) { if (nd==0) nd=i; } if (nu>0 && nd>0) return(MathAbs(nu-nd)); } Print("BarsBetweenLastFractals(): Фракталы не найдены"); return(-1); } </code>
alex30774