Problème de d'unité de temps élévé dans les indicateurs

 

Bonjour,

Il y a une erreur que je ne comprends pas. Peut-être que je le fais mal.

J'aimerais avoir un indicateur qui me renvoie les valeurs ADX dans une plus grande unité de temps.

 input int    PeriodADX= 14 ;
input int    ADXTrendLevel= 22 ;
input ENUM_TIMEFRAMES HTF = PERIOD_H1 ;
//---------------------------------------------------------------------
double       TrendBuffer[];
//---------------------------------------------------------------------
int          indicator_handle= 0 ;
int          indicator_Tempo= 0 ;
//---------------------------------------------------------------------
//      Initialization event handler:
//---------------------------------------------------------------------
int OnInit ()
  {
//      Displayed indicator buffer:
   SetIndexBuffer ( 0 ,TrendBuffer, INDICATOR_DATA );
   PlotIndexSetInteger ( 0 , PLOT_DRAW_BEGIN ,PeriodADX* 2 );
   PlotIndexSetString ( 0 , PLOT_LABEL , "ADXTrendDetector( " +( string )PeriodADX+ " )" );

//      Create external indicator handle for future reference to it:
   ResetLastError ();
   indicator_handle= iCustom ( Symbol (), PERIOD_CURRENT , "Examples\\ADX" ,PeriodADX);
   if (indicator_handle== INVALID_HANDLE )
     {
       Print ( "ADX initialization error, Code = " , GetLastError ());
       return (- 1 );   // return nonzero code - initialization was unsuccessful
     }
   indicator_Tempo= iADX ( Symbol (),HTF,PeriodADX);
   if (indicator_Tempo== INVALID_HANDLE )
     {
       Print ( "ADX initialization error, Code = " , GetLastError ());
       return (- 1 );   // return nonzero code - initialization was unsuccessful
     }
   return ( 0 );
  }

quand je veux utiliser indicatorTempo, il renvoie 0...

int TrendDetector(int _shift)
  {
   int      trend_direction=0;
   double   ADXBuffer[1];
   double   PlusDIBuffer[1];
   double   MinusDIBuffer[1];

//	Copy ADX indicator values to buffers:
/*
   CopyBuffer(indicator_handle,0,_shift,1,ADXBuffer);
   CopyBuffer(indicator_handle,1,_shift,1,PlusDIBuffer);
   CopyBuffer(indicator_handle,2,_shift,1,MinusDIBuffer);
*/   
   datetime timeArray[];
   CopyTime(_Symbol,PERIOD_CURRENT,_shift,1,timeArray);
   int maPosition = iBarShift(_Symbol,HTF,timeArray[0],false);
   
   // je récupere la date et heure -> variable maPosition : Ok
   // je veux ensuite récuperer l'état de l'indicateur à la période HTF pour la date donnée ? 
   CopyBuffer(indicator_Tempo,0,maPosition,1,ADXBuffer);
   CopyBuffer(indicator_Tempo,1,maPosition,1,PlusDIBuffer);
   CopyBuffer(indicator_Tempo,2,maPosition,1,MinusDIBuffer);   
   
//	If ADX value is considered (trend strength):
   if(ADXTrendLevel>0)
     {
      if(ADXBuffer[0]<ADXTrendLevel)
        {
         return(trend_direction);
        }
     }

//	Check +DI and -DI positions relative to each other:
   if(PlusDIBuffer[0]>MinusDIBuffer[0])
     {
      trend_direction=1;
     }
   else if(PlusDIBuffer[0]<MinusDIBuffer[0])
     {
      trend_direction=-1;
     }

   return(trend_direction);
  }

Ici ADXBuffer[0] = 0 ...

Je ne comprends pas mon erreur... Pouvez-vous m'aider ?

Merci d'avance.

Dossiers :
 
Patoche90:

Bonjour,

Il y a une erreur que je ne comprends pas. Peut-être que je le fais mal.

J'aimerais avoir un indicateur qui me renvoie les valeurs ADX dans une plus grande unité de temps.

quand je veux utiliser indicatorTempo, il renvoie 0...

Ici ADXBuffer[0] = 0 ...

Je ne comprends pas mon erreur... Pouvez-vous m'aider ?

Merci d'avance.

Et quelle est la valeur retournée par la fonction CopyBuffer() ? Il faut toujours vérifier cela en premier, et voir le code d'erreur le cas échant.
 
Alain Verleyen #:
Et quelle est la valeur retournée par la fonction CopyBuffer() ? Il faut toujours vérifier cela en premier, et voir le code d'erreur le cas échant.

Bonsoir,

la valeur retournée est -1, j'ai pas de code erreur , je dois surement le programmer, je regarde.

Mise à jour : erreur 4806.... (https://www.mql5.com/en/forum/322393) mais cela ne m'avance pas beaucoup parce que j'ai bien définit un "handle" dans oninit...

Je ne sais pas trop quoi faire....

Error 4806 Requested data not found when CopyBuffer
Error 4806 Requested data not found when CopyBuffer
  • 2019.09.16
  • www.mql5.com
Hi Traders/Devs, I am trying to create quite a complex indicator that pulls data from the 28 major pairs and I keep getting error 4806 when I try t...
 
Patoche90 #:

Bonsoir,

la valeur retournée est -1, j'ai pas de code erreur , je dois surement le programmer, je regarde.

Mise à jour : erreur 4806.... (https://www.mql5.com/en/forum/322393) mais cela ne m'avance pas beaucoup parce que j'ai bien définit un "handle" dans oninit...

Je ne sais pas trop quoi faire....

Cela veut dire que les données pour ce "timeframe" ne sont pas disponibles. Cela arrive régulièrement quand on travaille en multi-symboles ou multi-timeframes. Vous devez en tenir compte dans votre code, il y a plusieurs possibilités pour cela :

attendre le tick suivant, utiliser un timer pour essayer un peu plus tard, utilisez une boucle de temporisation (non recommandé)...

 
Alain Verleyen #:

Cela veut dire que les données pour ce "timeframe" ne sont pas disponibles. Cela arrive régulièrement quand on travaille en multi-symboles ou multi-timeframes. Vous devez en tenir compte dans votre code, il y a plusieurs possibilités pour cela :

attendre le tick suivant, utiliser un timer pour essayer un peu plus tard, utilisez une boucle de temporisation (non recommandé)...

Merci de votre réponse.
Raison: