Valeur du tick précédent - page 3

 
PreviousTick = CurrentTick;

CurrentTick =   Bid;

if ( CurrentTick < PreviousTick )

       {

difference = PreviousTick - Bid;

TotalDescent = TotalDescent + difference;

descentarray[0]=TotalDescent;

       }


ce code fait planter le graphique mt4. qu'est-ce qui ne va pas avec lui ?

différence, TotalDescent sont déclarés comme double, avec une valeur de départ de 0. descentarray est déclaré comme un tableau 1d sans nombre maximum d'éléments. il y a une déclaration if pour filtrer le cas previousTick = 0, et la contrepartie TotalAscent fonctionne bien.

Il fonctionne jusqu'à ce que le premier tick de décrémentation arrive, puis il s'arrête.

 

Veuillez utiliser le bouton </> pour insérer votre code.


 
J.P.Satrio:


ce code fait planter le graphique mt4. qu'est-ce qui ne va pas avec lui ?

différence, TotalDescent sont déclarés comme double, avec une valeur de départ de 0. descentarray est déclaré comme un tableau 1d sans nombre maximum d'éléments. il y a une déclaration if pour filtrer le cas previousTick = 0, et la contrepartie TotalAscent fonctionne bien.

Il fonctionne jusqu'à ce que le premier tick de décrémentation arrive, puis il se plante. Y a-t-il quelque chose que j'ai manqué ?

Est-ce que vous dimensionnez le tableau ?

 
Keith Watford:

Est-ce que vous dimensionnez le tableau ?

Non, car je ne sais pas quelle taille serait nécessaire. Comme je l'ai dit, le côté ascensionnel fonctionne bien avec le tableau sans taille fixe.
 
J.P.Satrio:
Non, puisque je ne suis pas sûr de la taille nécessaire. Comme je l'ai dit, le côté ascensionnel fonctionne bien avec le tableau sans taille fixe.

Vous devez dimensionner le tableau. Si vous n'êtes pas sûr de la taille nécessaire, chaque fois que vous voulez lui donner un élément supplémentaire, augmentez la taille d'une unité.

 
Keith Watford:

Vous devez dimensionner le tableau. Si vous n'êtes pas sûr de la taille nécessaire, chaque fois que vous voulez lui donner un élément supplémentaire, augmentez la taille d'une unité.

Je vais essayer pour sûr, merci. Cependant, j'ai vu de nombreux cas où les codeurs n'ont pas fixé de taille pour les tableaux. Je ne sais toujours pas pourquoi ce cas est différent.
Si je devais vérifier s'il est nécessaire d'augmenter et de redimensionner mon tableau à chaque tick, cela rendrait les choses beaucoup plus complexes, donc je pense que je vais fixer une taille suffisamment grande pour gérer la quantité de données. Que se passe-t-il si un tableau est plein ? (Cela ne m'est jamais arrivé) se plante à nouveau ?
 
J.P.Satrio:
Je vais essayer pour sûr, merci. Cependant, j'ai vu de nombreux cas où les codeurs n'ont pas défini de taille pour les tableaux. Je ne sais toujours pas pourquoi ce cas est différent.
Si je devais vérifier s'il est nécessaire d'augmenter et de redimensionner mon tableau à chaque tick, cela rendrait les choses beaucoup plus complexes, donc je pense que je vais définir une taille suffisamment grande pour gérer la quantité de données. Que se passe-t-il si un tableau est plein ? (Cela ne m'est jamais arrivé) se plante à nouveau ?

Je ne pense pas que vous verrez jamais un cas où un tableau n'est pas dimensionné. Si vous essayez de mettre une valeur dans un élément qui n'existe pas, le code se plantera.

 
Keith Watford:

Je ne pense pas que vous verrez jamais un cas où un tableau n'est pas dimensionné. Si vous essayez de mettre une valeur dans un élément qui n'existe pas, le code se plantera.

Voilà, c'est fait. Merci !
 

Ce fil de discussion m'a aidé à développer un code qui m'indique la différence entre la demande précédente et la demande actuelle. Si la différence est nulle, il imprime 0,0, mais si la différence n'est pas nulle, il y a trop de chiffres, comme 1,000000000006551e-05. Y a-t-il un problème avec mon code ou y a-t-il un moyen de corriger cela ? Le symbole est EURUSD, si cela a de l'importance. C'est mon premier code mql, alors je m'excuse d'avance pour les lacunes. Merci.

/* Global Variables */
double ask_prev;
double ask_curr;
double ask_diff;
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   MqlTick tick_curr;
//---
   if(SymbolInfoTick(Symbol(),tick_curr))
     {
      ask_curr = tick_curr.ask;
      ask_diff = ask_curr - ask_prev;
      Print(ask_diff);
      ask_prev = tick_curr.ask;
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+
 
rdone:

Ce fil de discussion m'a aidé à développer un code qui m'indique la différence entre la demande précédente et la demande actuelle. Si la différence est nulle, il imprime 0,0, mais si la différence n'est pas nulle, il y a trop de chiffres, comme 1,000000000006551e-05. Y a-t-il un problème avec mon code ou y a-t-il un moyen de corriger cela ? Le symbole est EURUSD, si cela a de l'importance. C'est mon premier code mql, alors je m'excuse d'avance pour les lacunes. Merci !

Pourquoi ne pas simplement...

MqlTick tick_curr, tick_last;

void OnTick()
{
   tick_last = tick_curr;
   SymbolInfoTick(Symbol(),tick_curr);
}