Исправить индикатор

 
#property strict
#property version "2.0"

#property indicator_chart_window
#include <stdlib.mqh>
#property indicator_buffers 2
#property indicator_color1 Lime
#property indicator_width1 2 
#property indicator_color2 Red
#property indicator_width2 2


//+------------------------------------------------------------------
//| Common External variables                                        
//+------------------------------------------------------------------


//+------------------------------------------------------------------
//| External variables                                               
//+------------------------------------------------------------------

double nPips = 0.004;
extern bool Alerts = true;
extern bool Notifications = true;
extern string Message = "";
extern int SignalDelay = 1;

//+------------------------------------------------------------------
//| Special Convertion Functions                                     
//+------------------------------------------------------------------


int LastTradeTime;
double ExtHistoBuffer[];
double ExtHistoBuffer2[];

void SetLoopCount(int loops)
{
}

void SetIndexValue(int shift, double value)
{
  ExtHistoBuffer[shift] = value;
}

void SetIndexValue2(int shift, double value)
{
  ExtHistoBuffer2[shift] = value;
}

//+------------------------------------------------------------------
//| End                                                              
//+------------------------------------------------------------------


//+------------------------------------------------------------------
//| Initialization                                                   
//+------------------------------------------------------------------


int OnInit(void)
{
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, ExtHistoBuffer);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID);
   SetIndexArrow(1, 234);
   SetIndexBuffer(0, ExtHistoBuffer);
   SetIndexBuffer(1, ExtHistoBuffer2);
   return(INIT_SUCCEEDED);
}

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[])
  {
//+------------------------------------------------------------------
//| Local variables                                                  
//+------------------------------------------------------------------

int shift = 0;
double cnt = 0;
double TrStopLevel = 0;
double PREV = 0;
double pass = 0;
static datetime dt;
SetLoopCount(0);
// loop from first bar to current bar (with shift=0)
for(shift=Bars-2;shift>=0 ;shift--){ 
SetIndexValue(shift, 0);
SetIndexValue2(shift, 0);

if( (Close[shift] == PREV) ) 
{
TrStopLevel=PREV;

}
else 
{
if( (Close[shift+1])<PREV && (Close[shift]<PREV)  ) 
{
TrStopLevel=MathMin(PREV,Close[shift]*(1+nPips));
}

      else 
      {
            if( ((Close[shift+1])>PREV) && (Close[shift]>PREV) ) 
            {
            TrStopLevel=MathMax(PREV,Close[shift]*(1-nPips));
            }


            else 
                  {
                  if( (Close[shift]>PREV) ) 
                  {                   
                  TrStopLevel=Close[shift]*(1-nPips);
                  }

                        else TrStopLevel=Close[shift]*
(1+nPips);
                  }
      }
}


if( Close[shift] > TrStopLevel &&  Close[shift+1]<PREV && PREV != 
0 ) 
{
//SetOrder(OP_BUY,1,ask,2,0,ask+TakeProfit*Point,blue);
//Alert("Buy");
SetIndexValue(shift, Low[shift]);
}


if( Close[shift] < TrStopLevel &&  Close[shift+1]>PREV  && PREV != 
0  ) 
{
//SetOrder(OP_SELL,1,bid,2,0,bid-TakeProfit*Point,Red);
SetIndexValue2(shift, High[shift]);
//Alert("Sell");
}


PREV=TrStopLevel;
//Alert(TrStopLevel);
} 

if ((ExtHistoBuffer[SignalDelay]!=EMPTY_VALUE)&&(dt!=Time[0])){dt=Time[0];
 if(Alerts)Alert(Message+" "+Symbol()+" BUY");if(Notifications)SendNotification(Message+" "+Symbol()+" BUY");}else
if ((ExtHistoBuffer2[SignalDelay]!=EMPTY_VALUE)&&(dt!=Time[0])){dt=Time[0];
 if(Alerts)Alert(Message+" "+Symbol()+" SELL");if(Notifications)SendNotification(Message+" "+Symbol()+" SELL");}
//}


   return(rates_total);
}

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

Всем привет.

Проблема следующая: индикатор подает сигналы при пробое уровней поддержки и сопротивлений, при пробое появляется стрелка, но пока свеча не закрылась стрелка то появляется то исчезает, в зависимости от движений цены. Как сделать чтобы в анализе участвовали только закрытые свечи? Помогите пожалуйста кто знает. Код индикатора прилагаю. 

 
Вы как понимаю не сами его писали ..тут покапайтесь if( (Close[shift+1])<PREV && (Close[shift]<PREV)  ) 
 
azfaraon:
Вы как понимаю не сами его писали ..тут покапайтесь if( (Close[shift+1])<PREV && (Close[shift]<PREV)  ) 
Да уж, не сам)
 
Alexander Cherkeev:
Да уж, не сам)
Просто если сами писали бы сразу бы поняли что и почему .А тут исчезает и появляется потому,что используете  нулевой бар .Попробуйте использовать  1 и 2 .Правда будет как бы запаздывать сигнал иногда .
 

Добрый день Всем!

У меня просьба переделать индикатор(прикладываю) DayOpen в MonthOpen и YearsOpen  для МТ4 и можно для МТ5, может кому и пригодится.

-------------------------------------------

Я очень извиняюсь, память подвела, я уже просил как то это сделать и мне это выполнили, прикладываю эти 2 индикатора может кому пригодиться.

Файлы:
DayOpen.mq4  3 kb
DayOpen.ex4  6 kb
WeekOpen.mq4  3 kb
WeekOpen.ex4  7 kb
MonthOpen.mq4  3 kb
MonthOpen.ex4  7 kb
 
bar:

Добрый день Всем!

У меня просьба переделать индикатор(прикладываю) DayOpen в MonthOpen и YearsOpen  для МТ4 и можно для МТ5, может кому и пригодится.

-------------------------------------------

Я очень извиняюсь, память подвела, я уже просил как то это сделать и мне это выполнили, прикладываю эти 2 индикатора может кому пригодиться.

Прямо как в том анекдоте...

Прапорщик - "Эй, вы трое... Ну-ка оба ко мне."

Причина обращения: