OnDeinit in Indikatoren - Seite 2

 
eevviill:

Nein, das tut es nicht. Ich schalte das Terminal normal aus.

Wenn Deinit in Init gesetzt wird, funktioniert es auch nicht.

Nur die benutzerdefinierte Funktion zum Löschen von Objekten half.

Nun, wenn es sich nicht löschen lässt, wer weiß, was Sie da getan haben :)

 
keekkenen:

Nun, wenn es nicht entfernt wird, wer weiß, was Sie damit gemacht haben :)

Das macht Sinn. Aber wenn ich den Indikator einfach aus dem Diagramm lösche, werden die Zonen gelöscht. Wenn ich das Terminal ausschalte, sind sie es nicht. Wenn ich die Funktion in init verwende, die Zonen löscht (es ist die gleiche Funktion in deinit).

Ich habe verstanden, dass deinit für alle funktioniert. Und wann soll sie beim Schließen oder Öffnen des Terminals ausgelöst werden?

 
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:

Das macht Sinn. Aber wenn ich den Indikator einfach aus dem Diagramm entferne, werden die Zonen entfernt. Nicht, wenn das Terminal ausgeschaltet ist. Nur wenn ich meine eigene Funktion zum Löschen von Zonen in init einfüge (dieselbe Funktion in deinit).

Ich habe verstanden, dass deinit für alle funktioniert. Aber wann sollte es funktionieren, wenn das Terminal geschlossen oder geöffnet ist?

Ja, es funktioniert, wenn das Terminal geschlossen ist...

Vielleicht haben Sie schon seit langem eine gewisse Logik?

in dem Sinne, dass im Moment des Herunterfahrens Indikator unheimlich etwas berechnet und das Terminal erwartet es ganz schief und / oder unterbricht, dass OnDeinit nicht funktioniert ?

Ich glaube, der Weg zum Helpdesk...

 
keekkenen:

ja, wenn Sie das Terminal schließen, funktioniert es...

Vielleicht haben Sie eine Art von Logik der langen Spielzeit?

in dem Sinne, dass im Moment des Herunterfahrens Indikator ist etwas schrecklich berechnet und Terminal erwartet, dass alles schief und / oder unterbricht, dass OnDeinit nicht funktioniert ?

Ich glaube, der Weg zum Helpdesk...

Wenn es für Sie funktioniert, dann ist es in Ordnung. Ich schaue mir meine an.
 

Es hat sich nichts geändert und es ist noch mehr hinzugekommen.

Puffer-Indikator. Betrieb: Karte geöffnet - M1-Indikator angeschlossen - Terminal geschlossen - in ein paar Minuten geöffnet. Das Ergebnis ist in Screenshots zu sehen.

Und das, obwohl ich auch in den Code geschrieben habe

//////////////////////////////////////////////////////////////////
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];
}

 

Entwickler, werden Sie das Problem in den Griff bekommen?

Hier ist ein Indikator für Sie. Versuchen Sie, was ich im obigen Beitrag getan habe.

Ichhabe die Karte geöffnet, den M1-Indikatorangebracht, das Terminal geschlossen und es nach ein paar Minuten wieder geöffnet.

Dateien:
 
eevviill:

Entwickler, werden Sie das Problem in den Griff bekommen?

Hier ist ein Indikator für Sie. Versuchen Sie, was ich im obigen Beitrag getan habe.

Ichhabe die Karte geöffnet, den M1-Indikator angebracht, das Terminal geschlossen und es nach ein paar Minuten wieder geöffnet.

Das Problem mit Ihrem Indikator ist gelöst.

Die Sache ist die, dass der Indikator nicht nur bei der Ankunft von Ticks berechnet wird, sondern auch bei der ersten Zeichnung und bei der Ankunft der fehlenden Geschichte.

1. Ein neuer Tick kommt an - der Indikator wird berechnet.

2. Die fehlende Historie trifft ein, die die Lücke zwischen den letzten Daten vom letzten Terminalstart und dem letzten Tick schließt. Der Indikator wird berechnet. Aber gleichzeitig gibt es keinen neuen Zustand der Bar!

Um dieses Problem zu lösen, müssen Sie die Anzahl der Balken überprüfen. Ungefähr so

   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:

Das Problem mit Ihrem Indikator ist gelöst.

Die Sache ist die: Der Indikator wird nicht nur auf die Ankunft der Ticks berechnet, sondern auch auf die erste Zeichnung und auf die Ankunft der fehlenden Geschichte.

1. Ein neuer Tick kommt an - der Indikator wird berechnet.

2. Die fehlende Historie trifft ein, die die Lücke zwischen den letzten Daten vom letzten Terminalstart und dem letzten Tick schließt. Der Indikator wird berechnet. Aber gleichzeitig gibt es keinen neuen Zustand der Bar!

Um dieses Problem zu lösen, müssen Sie die Anzahl der Balken überprüfen. Wie diese

Ich danke Ihnen.

Aber es ist nicht nur in meinem Indikator. Ich dachte, Sie würden dieses Problem von Ihrer Seite aus lösen.

Zum Beispiel beim Schließen des Terminals Deinit in allen Programmen zu laufen.

 
eevviill:

Ich danke Ihnen.

Aber das liegt nicht nur an meinem Indikator. Ich dachte, Sie würden dieses Problem von Ihrer Seite aus lösen.

Zum Beispiel beim Schließen des Terminals, deinit in allen Programmen.

Eigentlich wird deinit in allen Programmen aufgerufen, wenn das Terminal geschlossen wird.

Es gibt sogar einen speziellen Code für den Grund von deinit. REASON_CLOSE