Индикаторы: Calculation the future day

 

Calculation the future day:

Индикатор для определения Max & Min дня по значеням бара предыдущего дня.

Author: Belokrylov Vladimir

 

На форуме были вопросы по развертке индикатора в интрадей график.
Если все сделал правильно - мне кажется работает плохо, неоднозначно - уж точно:

//+------------------------------------------------------------------+
//| DailyLevels. mq4 |
//| Дневные Min Max Middle по Парамону + сопр./подержка по пред.дню |
//| Bookkeeper, 2005, yuzefovich@gmail.com |
//+------------------------------------------------------------------+
#property copyright ""
#property link ""

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Orchid
#property indicator_color2 Orchid
#property indicator_color3 Orchid
#property indicator_color4 Red
#property indicator_color5 Red
#property indicator_color6 Green
#property indicator_color7 Green
//---- indicator parameters
int prevBars=0, shift;
bool first=true;
double prevC=0, prevH=0, prevL=0, Lw=0, Hgh=0, Mdl, Cls=0, DayliOpen;
//---- indicator buffers
double Lw_Buffer[];
double Hgh_Buffer[];
double Mdl_Buffer[];
double Resistance1[];
double Resistance2[];
double Support1[];
double Support2[];
//----
//+------------------------------------------------------------------+
//| System of reference points " on Paramon " |
//+------------------------------------------------------------------+
int init()
{
int draw_begin;
string short_name;
//---- drawing settings
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_LINE);
SetIndexStyle(2,DRAW_LINE,STYLE_DOT);
SetIndexStyle(3,DRAW_LINE);
SetIndexStyle(4,DRAW_LINE);
SetIndexStyle(5,DRAW_LINE);
SetIndexStyle(6,DRAW_LINE);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- indicator buffers mapping
SetIndexBuffer(0, Lw_Buffer);
SetIndexBuffer(1, Hgh_Buffer);
SetIndexBuffer(2, Mdl_Buffer);
SetIndexBuffer(3, Resistance1);
SetIndexBuffer(4, Resistance2);
SetIndexBuffer(5, Support1);
SetIndexBuffer(6, Support2);
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
void deinit()
{
Comment("");
}
//+------------------------------------------------------------------+
int start()
{
int curPeriod=0, i, j, n, m;
if (curPeriod!=Period()) first=True;
// Не надо менять период - терминал виснет без пересчета
if (first==true)
{
shift=Bars-1;
Lw=Close[shift];
Hgh=Close[shift];
while(TimeDay(Time[shift])==TimeDay(Time[shift+1]))
{
shift--;
if(Lw>Low[shift]) Lw=Low[shift];
if(Hgh<High[shift]) Hgh=High[shift];
if(shift<=2) return(-1);
}
Lw=Low[shift];
Hgh=High[shift];
first=false;
prevBars=Bars;
MMMfirst();
}
if(Bars==prevBars) return(0);
if((Bars-prevBars)==1)
{
prevBars=Bars;
MMMcount();
}
else
{
first=true;
return(0);
}
//---- done
return(0);
}
//+------------------------------------------------------------------+
void MMMfirst()
{
int i, j, n;
while(shift>0)
{
Lw_Buffer[shift]=Lw;
Hgh_Buffer[shift]=Hgh;
Mdl_Buffer[shift]=(Lw+Hgh)/2;
Resistance1[shift] = (((prevL+prevH+prevC)/3)*2-prevL);
Support1[shift] = (((prevL+prevH+prevC)/3)*2-prevH);
Resistance2[shift] = (prevL+prevH+prevC)/3-
(((prevL+prevH+prevC)/3)*2-prevH) +
(((prevL+prevH+prevC)/3)*2-prevL);
Support2[shift] = (prevL+prevH+prevC)/3 +
(((prevL+prevH+prevC)/3)*2-prevH) -
(((prevL+prevH+prevC)/3)*2-prevL);
shift--;
if(shift==0) break;
if(TimeDay(Time[shift])==TimeDay(Time[shift+1]))
{
if(Lw>Low[shift]) Lw=Low[shift];
if(Hgh<High[shift]) Hgh=High[shift];
}
else
{
prevL=Lw;
prevH=Hgh;
prevC=Close[shift+1];
Lw=Low[shift];
Hgh=High[shift];
DayliOpen=Open[shift];
}
}
// Comment("DayMinMax "+DoubleToStr((Hgh-Lw)/Point,0)+"п."+" DayMiddle="+DoubleToStr((Lw+Hgh)/2, 0));
}
//+------------------------------------------------------------------+
void MMMcount()
{
if(TimeDay(Time[1])==TimeDay(Time[2]))
{
if(Lw>Low[1]) Lw=Low[1];
if(Hgh<High[1]) Hgh=High[1];
}
else
{
prevL=Lw;
prevH=Hgh;
prevC=Close[2];
Lw=Low[1];
Hgh=High[1];
DayliOpen=Open[1];
}
Lw_Buffer[1]=Lw;
Hgh_Buffer[1]=Hgh;
Mdl_Buffer[1]=(Lw+Hgh)/2;
Resistance1[1] = (((prevL+prevH+prevC)/3)*2-prevL);
Support1[1] = (((prevL+prevH+prevC)/3)*2-prevH);
Resistance2[1] = (prevL+prevH+prevC)/3-
(((prevL+prevH+prevC)/3)*2-prevH) +
(((prevL+prevH+prevC)/3)*2-prevL);
Support2[1] = (prevL+prevH+prevC)/3 +
(((prevL+prevH+prevC)/3)*2-prevH) -
(((prevL+prevH+prevC)/3)*2-prevL);


// Comment("DayMinMax "+DoubleToStr((Hgh-Lw)/Point,0)+"п."+" DayMiddle="+DoubleToStr((Lw+Hgh)/2, 4));
}
//+------------------------------------------------------------------+


Что-то кнопка MQL перестала работать (?)

 
Bookkeeper:


...Если все сделал правильно - мне кажется работает плохо, неоднозначно - уж точно...



БЕРУ СВОИ СЛОВА ОБРАТНО :), в большенстве случаев все-таки работает!
Причина обращения: