OnDeinit in Indikatoren - Seite 4

 
eevviill:
GUT. Deinit führt auch keinen Nullabgleich durch.

Sie haben immer noch nicht die Frage beantwortet, was Sie mit dem Nullsetzen der Puffer meinen.

Das Kundenterminal setzt den Inhalt der Anzeigepuffer nicht auf Null. Die Nullstellung muss vom Programmierer vorgenommen werden.

Die Puffer werden automatisch geleert, wenn der Indikator entladen wird.

 
stringo:

Sie haben immer noch nicht die Frage beantwortet, was Sie mit dem Nullsetzen der Puffer meinen.

Das Kundenterminal setzt den Inhalt der Anzeigepuffer nicht auf Null. Die Nullstellung muss vom Programmierer vorgenommen werden.

Puffer werden beim Laden eines Indikators automatisch gelöscht

 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);
Es funktioniert weder ininit noch deinit.
 
eevviill:
Es funktioniert weder in init noch in deinit.
Warum brauchen Sie es in deinit? Und warum sollte ein dynamisches Indikatorfeld initialisiert werden müssen?
 
eevviill:
Dies funktioniert weder bei init noch bei deinit.

Noch einmal.

Sie sollten das Feld nur vor der vollständigen Neuberechnung initialisieren. Und das auch nur, wenn Sie das Array selektiv und nicht Element für Element füllen

 
stringo:

Ein weiteres Mal.

Sie müssen nur das Array vor der Neuberechnung des Gesamtbetrags initialisieren. Und das auch nur, wenn Sie das Array selektiv füllen, nicht ein Element nach dem anderen

eevviill:
Dies funktioniert weder in init noch in deinit.

Warum brauchen Sie es in deinit? Und warum sollte ein dynamisches Indikatorfeld initialisiert werden müssen?

Haben Sie das Problem gelesen?

 
evillive:
Warum brauchen wir sie in deinit? Und warum wird das dynamische Array des Indikators initialisiert?

Denn irgendwo muss man ja hin. Inite sagt, Sie können das nicht.

Denn es wird nur 0 bar gezählt. Nach dem Schließen des Terminals und dem Öffnen nach ein paar Candlesticks wird der 0-Balken + ein weiterer Balken mit einem Offset für die Zeit, in der das Terminal geschlossen war, berechnet.

 
stringo:

Ein weiteres Mal.

Sie müssen nur das Array vor der vollständigen Neuberechnung initialisieren. Und das auch nur, wenn Sie das Array selektiv und nicht Element für Element in einer Reihe füllen

Sehr schön. Ich fülle nur das Element 0 aus.

Wenn Sie das Problem nicht verstehen, kann ich es noch einmal beschreiben.

 
eevviill:

Denn irgendwo muss man ja hin. Inite sagt, Sie können das nicht.

Denn es wird nur 0 bar gezählt. Nach dem Schließen des Terminals und dem Öffnen nach ein paar Candlesticks, stellt sich heraus, dass 0 bar berechnet wird + eine andere mit einer Verschiebung um die Zeit des Terminals geschlossen wurde.

Eigentlich wurde der Nullbalken korrekt berechnet, aber dann wurde die Historie geladen. Und es wurde ein neuer Null-Balken berechnet.
 
Vinin:
Eigentlich wurde der Nullbalken korrekt berechnet, aber dann wurde der Verlauf geladen. Und es wurde ein neuer Null-Balken berechnet.

Hier. Ich führe dazu einen Puffer-Nullabgleich durch. Inite hat bereits gesagt, dass Sie das nicht tun können.

Ich möchte deinitieren. Aber auch dort funktioniert es nicht. Und warum?

 
Ich werde versuchen, es noch einmal zu erklären (auf meinen Fingern):
  1. Das Terminal wurde X Mal nach dem letzten Start hochgefahren
  2. Download der Historie eingeleitet, die nicht vorhanden ist (Terminal war X Minuten lang inaktiv)
  3. Aufruf von OnCalculate für den verfügbaren Verlauf prevtime= letzter bekannter Verlaufszeitpunkt, Indikatorpuffergröße N Takte
  4. Während die Historie vom Server heruntergeladen wird, erscheint ein Häkchen
  5. Aufruf von OnCalculate des Indikators, wobei Time[0] eine Tickzeit ist, die der Indikator als prevtime speichert, die Größe des Indikatorpuffers ist N+1 Bars (zwischen N und N+1 Bars gibt es eine Lücke in der Historie)
  6. Nachdem die Historie heruntergeladen wurde, wird OnCalculate erneut aufgerufen, aber dieses Mal gibt es kein Loch in der Historie, aber prevtime hat das gleiche Datum wie Time[0] - kein neuer Balken (bzw. kein Löschen der Puffer im Indikator), die Puffergröße der N+X/Timeframe-Balken des Indikators und IndBuffer[0] sind nicht die gleichen wie in Schritt 5
Grund der Beschwerde: