OnDeinit dans les indicateurs - page 5

 
mql5:
Je vais essayer d'expliquer à nouveau (sur mes doigts) :
  1. Le terminal a démarré X fois après le dernier démarrage.
  2. Initialisation du téléchargement de l'historique, qui est manquant (le terminal a été inactif pendant X minutes)
  3. Appelé OnCalculate pour l'indicateur sur l'historique disponible prevtime = dernier historique connu, taille du tampon de l'indicateur N barres
  4. Pendant que l'historique est téléchargé du serveur, un tic-tac se produit
  5. Appelé OnCalculate de l'indicateur, où Time[0] est un tick time, l'indicateur le mémorise comme prevtime, la taille du buffer de l'indicateur est N+1 barres (entre N et N+1 barres il y a un gap dans l'historique).
  6. Après le téléchargement de l'historique, OnCalculate est appelé de nouveau, mais cette fois il n'y a pas de trou dans l'historique, mais prevtime a la même date que Time[0] - pas de nouvelle barre (respectivement, pas de vidage des tampons dans l'indicateur), la taille du tampon des barres de l'indicateur N+X/Timeframe et IndBuffer[0] ne sont pas les mêmes qu'à l'étape 5



Quel est le rapport avec le temps passé ?

Je demande pourquoi cela ne fonctionne pas.

/////////////////////////////////////
void OnDeinit(const int reason)
{
 ArrayInitialize(body_up,EMPTY_VALUE);
ArrayInitialize(body_down,EMPTY_VALUE);
ArrayInitialize(shadow_up,EMPTY_VALUE);
ArrayInitialize(shadow_down,EMPTY_VALUE);
  ArrayInitialize(yell_body_up,EMPTY_VALUE);
ArrayInitialize(yell_body_down,EMPTY_VALUE);
ArrayInitialize(yell_shadow_up,EMPTY_VALUE);
ArrayInitialize(yell_shadow_down,EMPTY_VALUE);


}
 
eevviill:

Qu'est-ce que cela a à voir avec prevtime ?

Je demande pourquoi ça ne marche pas.

Et comment savez-vous que ça ne marche pas ? Comment vérifiez-vous ?

Et pourquoi initialiser les tampons de l'indicateur avant de le décharger ? C'est déjà déchargé, n'est-ce pas ?

Lestampons des indicateurs doivent être initialisés lorsque toutes les valeurs des indicateurs sont entièrement recalculées :

int OnCalculate(..)
{
   ...
   if (<необходимо пересчитать все значения индикатора, например, если limit == Bars - 1>)
   {
      ArrayInitialize(...);
   }
   ...
}
 
eevviill:

Ici. Je fais une mise à zéro du tampon pour cela. Inite a déjà dit que vous ne pouviez pas faire ça.

Je veux déinir. Mais ça ne marche pas là non plus. Pourquoi ?

Quel est le rapport entre init() et deinit() ? L'opération est nécessaire dans un endroit tout à fait différent. Je vais le répéter encore une fois. Après le calcul, l'histoire a été chargée.

J'ai fait une version qui fonctionne.

Dossiers :
 
Scriptong:

Comment savoir si ça ne marche pas ? Comment vérifiez-vous ?


https://forum.mql4.com/ru/65066/page2#1015138
 
Vinin:

Qu'est-ce que init(), deinit() ont à voir avec ça ? L'opération est nécessaire ailleurs. Je vais répéter. Après le calcul, l'historique a été chargé.

J'ai créé une version fonctionnelle.

J'ai quand même réussi du premier coup grâce à votre recommandation.

Je me demande pourquoi le deinit ne fonctionne pas pour remettre à zéro les tableaux ?

 
eevviill:
https://forum.mql4.com/ru/65066/page2#1015138

Vous avez donné un lien vers un code qui fonctionne dans OnCalculate. J'ai demandé comment vous savez que l'initialisation dans DeInit ne fonctionne pas. Je précise, au cas où, qu'après OnDeinit() rien du code de l'indicateur ne fonctionne (ni OnInit(), ni OnCalculate()). Par conséquent, vous pouvez vérifier la mise à zéro des tableaux uniquement dans OnDeinit() lui-même.

 
Scriptong:

Vous avez donné un lien vers un code qui fonctionne dans OnCalculate. J'ai demandé comment vous savez que l'initialisation dans DeInit ne fonctionne pas. Je précise, au cas où, qu'après OnDeinit() rien du code de l'indicateur ne fonctionne (ni OnInit(), ni OnCalculate()). Par conséquent, vous ne pouvez vérifier la mise à zéro des tableaux que dans OnDeinit() lui-même.

J'ai fourni un lien vers

OpérationOuverture de la carte - fixation de l' indicateur M1 - fermeture du terminal - ouverture en quelques minutes. Le résultat est sur les captures d'écran.

C'est ainsi que je le teste.

 
eevviill:

J'ai quand même réussi du premier coup sur votre recommandation.

Je me demande pourquoi deinit ne fonctionne pas avec la mise à zéro des tableaux ?

Ou est-ce que deinit ne fonctionne pas lorsque le terminal est fermé?
 
eevviill:
Ou est-ce que deinit ne fonctionne pas lorsque le terminal est fermé ?
C'est le cas, mais il est inutile de vider les tampons des indicateurs - ils ne sont pas sauvegardés.
 
mql5:
Cela fonctionne, mais il est inutile de vider les tampons des indicateurs - ils ne sont pas sauvegardés.

Pourquoi ?

Pourquoi la valeur du tampon 0 est remplie, sauvegardée mais pas mise à zéro ?

Raison: