OnDeinit dans les indicateurs - page 2

 
eevviill:

Non, ça ne l'est pas. J'éteins le terminal normalement.

Si Deinit est mis dans Init, cela ne fonctionne pas non plus.

Seule la fonction de suppression des objets personnalisés a aidé.

Eh bien, s'il ne supprime pas, qui sait ce que vous avez fait là :)

 
keekkenen:

Eh bien, si ça ne l'enlève pas, qui sait ce que vous lui avez fait :)

C'est logique. Mais si je supprime simplement l'indicateur du graphique, les zones sont supprimées. Lorsque j'éteins le terminal, ils ne le sont plus. Si j'utilise la fonction dans le init qui supprime les zones (c'est la même fonction dans le deinit).

J'ai compris que deinit fonctionne pour tous. Et quand doit-il être déclenché lors de la fermeture ou de l'ouverture du terminal ?

 
int deinit()
  {

deinit2();

return(0);
}

//////////////////////

void deinit2()

{

  for(int i=ObjectsTotal()-1;i>=0;i--)

  {

  if(StringFind(ObjectName(i),Highest_vol_zones_name)!=-1)

  ObjectDelete(ObjectName(i));

  }

 

}
 
eevviill:

C'est logique. Mais si je supprime simplement l'indicateur du graphique, les zones sont supprimées. Pas lorsque le terminal est éteint. Seulement si je mets ma propre fonction pour supprimer les zones dans le init (même fonction dans le deinit).

J'ai compris que deinit fonctionne pour tous. Mais quand cela devrait fonctionner lorsque le terminal est fermé ou ouvert ?

Oui, cela fonctionne lorsque le terminal est fermé...

peut-être avez-vous une sorte de logique qui dure depuis longtemps ?

dans le sens où, au moment de l'arrêt, l'indicateur calcule par hasard quelque chose et le terminal s'attend à ce que tout se passe mal et/ou s'interrompe, de sorte que OnDeinit ne fonctionne pas ?

Je pense que le chemin vers le service d'assistance...

 
keekkenen:

oui, lorsque vous fermez le terminal, cela fonctionne...

Peut-être avez-vous une sorte de logique de long jeu ?

dans le sens où, au moment de l'arrêt, l'indicateur est en train de calculer quelque chose de bizarre et le terminal s'attend à ce que tout se dérègle et/ou s'interrompe, de sorte que OnDeinit ne fonctionne pas ?

Je pense que le chemin vers le service d'assistance...

Si ça marche pour vous, alors c'est bon. Je vais regarder le mien.
 

Rien n'a changé et davantage a été ajouté.

Indicateur de tampon. Opération Carte ouverte-attaché l'indicateur M1-fermé le terminal-ouvert dans quelques minutes. Le résultat est dans les captures d'écran.

Et ce malgré le fait que j'ai aussi écrit dans le code

//////////////////////////////////////////////////////////////////
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[])
  {
    //new bar
if (Time[0] != prevtime) 
{
 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);


prevtime = Time[0];
}

 

Développeurs, allez-vous régler le problème ?

Voici un indicateur pour vous. Essayez ce que j'ai fait dans le post ci-dessus.

J'aiouvert la carte - j'ai attaché l'indicateur M1 - j'ai fermé le terminal - je l'ai ouvert après quelques minutes.

Dossiers :
 
eevviill:

Développeurs, allez-vous régler le problème ?

Voici un indicateur pour vous. Essayez ce que j'ai fait dans le post ci-dessus.

J'aiouvert la carte - j'ai attaché l'indicateur M1 - j'ai fermé le terminal - je l'ai ouvert après quelques minutes.

La situation avec votre indicateur a été résolue.

Le fait est que l'indicateur est calculé non seulement à l'arrivée des ticks, mais aussi au premier tirage et à l'arrivée de l'historique manquant.

1. Un nouveau tick arrive - l'indicateur est calculé.

2. L'historique manquant arrive, ce qui permet de boucher le trou entre les dernières données du début du terminal et le dernier tick. L'indicateur est calculé. Mais en même temps, il n'y a pas de nouvelle condition de bar !

Pour résoudre ce problème, vous devez vérifier le nombre de barres. A peu près comme ceci

   if(Time[0]!=prevtime || Bars!=prevbars)
     {
      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);

      prevtime=Time[0];
      prevbars=Bars;
     }
 
stringo:

La situation avec votre indicateur a été résolue.

Voilà le problème : l'indicateur est calculé non seulement à l'arrivée des ticks, mais aussi au premier tirage et à l'arrivée de l'historique manquant.

1. Un nouveau tick arrive - l'indicateur est calculé.

2. L'historique manquant arrive, ce qui permet de boucher le trou entre les dernières données du début du terminal et le dernier tick. L'indicateur est calculé. Mais en même temps, il n'y a pas de nouvelle condition de bar !

Pour résoudre ce problème, vous devez vérifier le nombre de barres. Comme ceci

Merci.

Mais ce n'est pas seulement dans mon indicateur. Je pensais que de votre côté vous alliez résoudre ce problème.

Par exemple lors de la fermeture du terminal Deinit dans tous les programmes à exécuter.

 
eevviill:

Merci.

Mais ce n'est pas seulement dans mon indicateur. Je pensais que vous alliez résoudre ce problème de votre côté.

Par exemple, en fermant le terminal, deinit dans tous les programmes.

En fait, deinit dans tous les programmes est appelé lorsque le terminal est fermé.

Il existe même un code spécial pour la raison de deinit. REASON_CLOSE