INDICADOR DANDO SINAL NO MEIO DA ABERTURA DA VELA - COMO CONFIGURAR PARA DAR O SINAL NA ABERTURA EXATA? OU NA VELA ANTERIOR.

 

Olá...estou com esse código de indicador. Ela da o sinal na abertura da vela, mas as vezes o sinal só aparece no meio ou no termino da vela. Não entendo muito de programação, então não consegui ajusta-lo para dar entrada na abertura, ou mesmo na vela anterior, de forma que eu consiga aproveitar toda a vela na operação.

Segue abaixo o Código.



//======================================================================================================================================================//

#property indicator_chart_window

#property indicator_buffers 2

#property indicator_color1 clrAquamarine

#property indicator_color2 clrKhaki

#property indicator_width1 2

#property indicator_width2 2

//======================================================================================================================================================//

input int  BarsCount=400;

input int  ATRperiod=14;

input bool AlertMode=true;

input bool ControlChart_EURUSD_M5=false;

//======================================================================================================================================================//

double Buffer_0[];

double Buffer_1[];

string SymExt;

int LastSignalBuy=0;

int LastSignalSell=0;

string ObjName4="Label4";

int PositionX=5;

int PositionY=65;

//======================================================================================================================================================//

int OnInit(void)

  {

//--------------------------------------------------------------------------------

   if(StringLen(Symbol())>6)

      SymExt=StringSubstr(Symbol(),6);

   if(ObjectFind(ObjName4)==-1)

      Objects(ObjName4,"i4 Indicator: No Signal",PositionX,PositionY,clrYellow);

//---

   SetIndexStyle(0,DRAW_ARROW);

   SetIndexArrow(0,SYMBOL_ARROWUP);

   SetIndexArrow(0,233);

   SetIndexStyle(1,DRAW_ARROW);

   SetIndexArrow(1,SYMBOL_ARROWDOWN);

   SetIndexArrow(1,234);

   SetIndexBuffer(0,Buffer_0);

   SetIndexBuffer(1,Buffer_1);

   IndicatorDigits((int)MarketInfo(Symbol(),MODE_DIGITS)+1);

   IndicatorShortName("i4("+IntegerToString(ATRperiod)+")");

   SetIndexLabel(0,"i4 Uptrend");

   SetIndexLabel(1,"i4 Dntrend");

   return(INIT_SUCCEEDED);

//--------------------------------------------------------------------------------

  }

//======================================================================================================================================================//

void OnDeinit(const int reason)

  {

//--------------------------------------------------------------------------------

   if(ObjectFind(ObjName4)>-1)

      ObjectDelete(ObjName4);

//--------------------------------------------------------------------------------

  }

//======================================================================================================================================================//

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[])

  {

//--------------------------------------------------------------------------------

   if(ControlChart_EURUSD_M5==false)

     {

      if((ChartSymbol()!="EURUSD"+SymExt) || (ChartPeriod()!=PERIOD_M5))

        {

         Print("Indicator i4 set chart symbol: "+"EURUSD"+SymExt+" and Period: M5");

         ChartSetSymbolPeriod(0,"EURUSD"+SymExt,PERIOD_M5);

         return(0);

        }

     }

//--------------------------------------------------------------------------------

   double DistanceArrow=10.0*Point;

   double ATRcount;

   int i;

   double CurrATR=iATR(NULL,0,ATRperiod,1);

//--------------------------------------------------------------------------------

   int ExtCountedBars=BarsCount;//IndicatorCounted();

   if(ExtCountedBars>Bars-1)

      ExtCountedBars=Bars-1;

   if(ExtCountedBars<0)

      return(-1);

   if(ExtCountedBars>0)

      ExtCountedBars--;

   int Limit=ExtCountedBars;

//--------------------------------------------------------------------------------

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

     {

      ATRcount=iATR(NULL,0,ATRperiod,i+1);

      //---Buy arrow

      if((High[i]>High[i+1]+ATRcount) && (High[i]>High[i+2]+ATRcount) && (Open[i]<Close[i+1]+ATRcount) && (Open[i]<Close[i+2]+ATRcount))

        {

         Buffer_0[i]=Low[i]-DistanceArrow;

        }

      //---Sell arrow

      if((Low[i]<Low[i+1]-ATRcount) && (Low[i]<Low[i+2]-ATRcount) && (Open[i]>Close[i+1]-ATRcount) && (Open[i]>Close[i+2]-ATRcount))

        {

         Buffer_1[i]=High[i]+DistanceArrow;

        }

     }

//--------------------------------------------------------------------------------

//--Buy alert

   if((High[0]>High[0+1]+CurrATR) && (High[0]>High[0+2]+CurrATR) && (Open[0]<Close[0+1]+CurrATR) && (Open[0]<Close[0+2]+CurrATR))

     {

      if(AlertMode && (iBars(NULL,0)!=LastSignalBuy) && (Volume[0]>1.0))

        {

         if(IsVisualMode())

            Buffer_0[0]=Low[0]-DistanceArrow;

         Alert(WindowExpertName(),": Signal BUY @ ",Symbol()," ",Ask," || Time: ",TimeToStr(TimeCurrent()|TIME_SECONDS));

         LastSignalBuy=iBars(NULL,0);

        }

      if(ObjectFind(ObjName4)>-1)

         ObjectDelete(ObjName4);

      if(ObjectFind(ObjName4)==-1)

         Objects(ObjName4,"i4 Indicator: UP Trend",PositionX,PositionY,clrDodgerBlue);

     }

   else

      //--Sell alert

      if((Low[0]<Low[0+1]-CurrATR) && (Low[0]<Low[0+2]-CurrATR) && (Open[0]>Close[0+1]-CurrATR) && (Open[0]>Close[0+2]-CurrATR))

        {

         if(AlertMode && (iBars(NULL,0)!=LastSignalSell) && (Volume[0]>1.0))

           {

            if(IsVisualMode())

               Buffer_1[0]=High[0]+DistanceArrow;

            Alert(WindowExpertName(),": Signal SELL @ ",Symbol()," ",Bid," || Time: ",TimeToStr(TimeCurrent()|TIME_SECONDS));

            LastSignalSell=iBars(NULL,0);

           }

         if(ObjectFind(ObjName4)>-1)

            ObjectDelete(ObjName4);

         if(ObjectFind(ObjName4)==-1)

            Objects(ObjName4,"i4 Indicator: DN Trend",PositionX,PositionY,clrRed);

        }

      else

        {

         if(ObjectFind(ObjName4)>-1)

            ObjectDelete(ObjName4);

         if(ObjectFind(ObjName4)==-1)

            Objects(ObjName4,"i4 Indicator: No Signal",PositionX,PositionY,clrYellow);

        }

//-----------------------------------------------------------------------------------

   ChartRedraw();

//-----------------------------------------------------------------------------------

   return(rates_total);

//-----------------------------------------------------------------------------------

  }

//======================================================================================================================================================//

void Objects(string ObjName,string ObjText,int PosX,int PosY,color ObjColor)

  {

//--------------------------------------------------------------------------------

   if(ObjectCreate(ObjName,OBJ_LABEL,0,0,0))

     {

      ObjectSet(ObjName,OBJPROP_XDISTANCE,PosX);

      ObjectSet(ObjName,OBJPROP_YDISTANCE,PosY);

      ObjectSet(ObjName,OBJPROP_CORNER,1);

      ObjectSetText(ObjName,ObjText,10,"Arial Black",ObjColor);

     }

//--------------------------------------------------------------------------------

  }

//======================================================================================================================================================//


Nikolaos Pantzos
Nikolaos Pantzos
  • 2021.04.26
  • www.mql5.com
Trader's profile
Razão: