Ajuda com código - Abertura do dia Anterior

 

Ola pessoal,


Estou aqui na quarentena tentando pegar a abertura do dia anterior com base no código abaixo:

   else
      OpenDay=iOpen[1];

Não está correto, pois não pega o dia anterior.

Na parte completa do codigo, ele pega MAX, MIN e FECHAMENTO:

   double iHigh[],iLow[],iClose[],iOpen[],HighDay,LowDay,CloseDay,OpenDay;
   datetime shiftGMT=0;
   switch(InpPeriod)
     {
      case DAY:
         shift_end=int(PeriodSeconds(PERIOD_D1)/PeriodSeconds(_Period));
         if(InpTime==TIME_GMT) shiftGMT=(TimeTradeServer()-TimeGMT());
         break;
      case WEEKLY:
         shift_end=int(PeriodSeconds(PERIOD_W1)/PeriodSeconds(_Period));
         break;
      case MONTHLY:
         shift_end=int(PeriodSeconds(PERIOD_MN1)/PeriodSeconds(_Period));
         break;
     }
   datetime _start=Previous+shiftGMT;
   datetime _end=Current+shiftGMT-1;

   rates_total=CopyHigh(NULL,_Period,_start,_end,iHigh);
   if(rates_total<=0)
      return;
   else
      HighDay=iHigh[ArrayMaximum(iHigh,0,rates_total)];
   rates_total=CopyLow(NULL,_Period,_start,_end,iLow);
   if(rates_total<=0)
      return;
   else
      LowDay=iLow[ArrayMinimum(iLow,0,rates_total)];
   rates_total=CopyClose(NULL,_Period,_end,1,iClose);
   if(rates_total<=0)
      return;
   else
      CloseDay=iClose[0];
   rates_total=CopyOpen(NULL,_Period,_end+1,1,iOpen);
   if(rates_total<=0)
      return;
   else
      OpenDay=iOpen[1];

Para uso em um outro indicador de Pivot Point para compartilhar.


Obrigado.

 

Precisa passar três parâmetros na chamada da função.


 
Japa Trader Br:

Ola pessoal,


Estou aqui na quarentena tentando pegar a abertura do dia anterior com base no código abaixo:

Não está correto, pois não pega o dia anterior.

Na parte completa do codigo, ele pega MAX, MIN e FECHAMENTO:

Para uso em um outro indicador de Pivot Point para compartilhar.


Obrigado.

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

  {

   //---

      double PP=0,R1=0,R2=0,S1=0,S2=0;

      

      PP=(iHigh(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1)+iClose(NULL,PERIOD_D1,1))/3;

      S1=(PP*2)-iHigh(NULL,PERIOD_D1,1);

      R1=(PP*2)+iLow(NULL,PERIOD_D1,1);

      S2=PP-(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1));

      R2=PP+(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1));

      

      Comment("\nPP ",DoubleToStr(PP,Digits),"\n\nR1 ",DoubleToStr(R1,Digits),"\nR2 ",DoubleToStr(R2,Digits),

      "\n\nS1 ",DoubleToStr(S1,Digits),"\nS2 ",DoubleToStr(S2,Digits));

   //---      

   return(rates_total);

}    

 
Atila Ribeiro:

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

  {

   //---

      double PP=0,R1=0,R2=0,S1=0,S2=0;

      

      PP=(iHigh(NULL,PERIOD_D1,1)+iLow(NULL,PERIOD_D1,1)+iClose(NULL,PERIOD_D1,1))/3;

      S1=(PP*2)-iHigh(NULL,PERIOD_D1,1);

      R1=(PP*2)+iLow(NULL,PERIOD_D1,1);

      S2=PP-(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1));

      R2=PP+(iHigh(NULL,PERIOD_D1,1)-iLow(NULL,PERIOD_D1,1));

      

      Comment("\nPP ",DoubleToStr(PP,Digits),"\n\nR1 ",DoubleToStr(R1,Digits),"\nR2 ",DoubleToStr(R2,Digits),

      "\n\nS1 ",DoubleToStr(S1,Digits),"\nS2 ",DoubleToStr(S2,Digits));

   //---      

   return(rates_total);

}    

Bacana, mas gostaria apenas da abertura do dia anterior.

 
Samuel Manoel De Souza:

Precisa passar três parâmetros na chamada da função.


Blz, vou pesquisar melhor.

 
Japa Trader Br:

Bacana, mas gostaria apenas da abertura do dia anterior.

iOpen(NULL,PERIOD_D1,1);
 
Samuel Manoel De Souza:

Ola,


Pior que testei e não funcionou, dá erro de compilação.


Ao deixar no codigo acima como 

 OpenDay=iOpen[0];

Ele pega a abertura do ultimo candle, do dia anterior, mas se estiver no M15, pega a abertura do ultimo candle do M15 e não a abertura do candle D1.

 
Japa Trader Br:

Ola,


Pior que testei e não funcionou, dá erro de compilação.


Ao deixar no codigo acima como 

Ele pega a abertura do ultimo candle, do dia anterior, mas se estiver no M15, pega a abertura do ultimo candle do M15 e não a abertura do candle D1.

O Samuel respondeu ali em cima. Eu uso essa função e funciona perfeitamente.

 
Japa Trader Br:

Ola,


Pior que testei e não funcionou, dá erro de compilação.


Ao deixar no codigo acima como 

Ele pega a abertura do ultimo candle, do dia anterior, mas se estiver no M15, pega a abertura do ultimo candle do M15 e não a abertura do candle D1.


Você está passando essas funções como array a ser preenchido pelas funções CopyHigh, CopyLow, etc. Você precisa criar novas variáveis para isso e não usar funções como parâmetro.

   rates_total=CopyHigh(NULL,_Period,_start,_end,iHigh);
   if(rates_total<=0)
      return;
   else
      HighDay=iHigh[ArrayMaximum(iHigh,0,rates_total)];
   rates_total=CopyLow(NULL,_Period,_start,_end,iLow);
   if(rates_total<=0)
      return;
   else
      LowDay=iLow[ArrayMinimum(iLow,0,rates_total)];
   rates_total=CopyClose(NULL,_Period,_end,1,iClose);
   if(rates_total<=0)
      return;
   else
      CloseDay=iClose[0];
   rates_total=CopyOpen(NULL,_Period,_end+1,1,iOpen);
   if(rates_total<=0)
      return;
   else
      OpenDay=iOpen[1];
Razão: