Benutzerdefinierte Symbole. Fehler, Bugs, Fragen, Vorschläge. - Seite 12

 
fxsaber:

Fehler 16.

Zuvor erzeugte CustomTicksAdd Balken aus Ticks, die sich auf den aktuellen Tag bezogen. Dies ist auch jetzt nicht der Fall.

Dieser Fehler scheint mit Fehler #14 zusammenzuhängen.

Die Entfernung des Symbols aus der Marktübersicht ist aus folgendem Grund möglich. Der aufeinanderfolgende Aufruf von CustomSymbolCreate - CustomSymbolDelete - CustomSymbolCreate mit demselben benutzerdefinierten Symbolnamen führte dazu, dass die Symbol-ID getroffen wurde. Daher wurde bei der Prüfung, ob ein Symbol aus der Marktübersicht entfernt werden kann, die Grafik dieses Symbols nicht gefunden (die Kennung ist beschädigt), und das Symbol wurde sicher entfernt. Dies wurde behoben.

Bei der Anwendung eines Ticks auf ein Diagramm ist das Gleiche möglich - die Suche nach dem Diagramm über die Symbolkennung ergab kein Ergebnis

 
fxsaber:

Fehler 15.

Wir lassen den folgenden Indikator auf das Symbol dieses EAs laufen (ohne ChartSetSymbolPeriod-row)

Er produziert nur Nullen.

Das stimmt.

Der Aufruf von CustomRatesUpdate setzt alle Änderungszähler zurück und berechnet die Indikatoren von Null an neu

 
Slava:

Und das völlig zu Recht.

Wenn Sie CustomRatesUpdate aufrufen, werden alle Änderungszähler zurückgesetzt und die Indikatoren werden von Null an neu berechnet.

Was ist die Logik hinter dieser Entscheidung? Schließlich gibt es auf der linken Seite unveränderte Balken.

 
fxsaber:

Was ist die Logik hinter dieser Lösung? Immerhin gibt es auf der linken Seite unveränderliche Balken.

prev_calculated enthält einen Wert, der beim vorherigen OnCalculate-Aufruf zurückgegeben wurde

Der Indikator kann auf der Grundlage seiner eigenen Logik einen beliebigen Wert zurückgeben. Es macht daher keinen Sinn, alle Indikatoren durchzugehen und den Wert von prev_calculated in seinen eigenen berechneten Wert zu ändern , wobei der Zeitrahmen berücksichtigt wird. Und sie ist ressourcenintensiv, vielleicht sogar unangemessen ressourcenintensiv.

Es ist viel ehrlicher, den Wert auf 0 zu setzen, wie am Anfang, als noch nichts gezählt wurde.

 
Slava:

prev_calculated enthält den Wert, der beim letzten Aufruf von OnCalculate zurückgegeben wurde

Der Indikatorschreiber kann auf der Grundlage seiner eigenen Logik jeden beliebigen Wert zurückgeben. Es macht daher keinen Sinn, alle Indikatoren durchzugehen und den Wert von prev_calculated in seinen eigenen berechneten Wert zu ändern , wobei der Zeitrahmen berücksichtigt wird. Und sie ist ressourcenintensiv, vielleicht sogar unangemessen ressourcenintensiv.

Es ist viel ehrlicher, den Wert auf 0 zu setzen, wie am Anfang, als noch nichts gezählt wurde.

Was ist dann zu tun, wenn Indikatoren für ein benutzerdefiniertes Symbol nach jedem Tick-Rollover aufgrund dieses Nullwerts komplett neu berechnet werden?

Die Indikatoren sind speziell dafür geschrieben, das Terminal nicht zu verlangsamen, und hier beginnt es im Gegenteil.

 
fxsaber:

Was ist dann, wenn bei einem benutzerdefinierten Symbol nach jedem Tick-Rollover die Indikatoren aufgrund dieses Nullwerts vollständig neu berechnet werden?

Das sollte nicht der Fall sein. Siehe

 
Slava:

So sollte es nicht sein. Siehe

Lassen Sie mich klarstellen, dass es sich nicht nur um CustomTicksAdd, sondern auch um RatesUpdate handelt, das ein Tick-Through aus der Vergangenheit ist. Sogar das funktionierende TicksAdd hat die Balken nicht vor dem aktuellen Tag gebildet. Wir müssen sie selbst gestalten. Und deshalb bekommen wir null prev_calculated.

 
fxsaber:

Lassen Sie mich klarstellen, dass der Tick-Rollover aus der Vergangenheit nicht nur CustomTicksAdd, sondern auch RatesUpdate ist. Sogar das funktionierende TicksAdd hat die Balken nicht vor dem aktuellen Tag gebildet. Wir müssen sie selbst erzeugen. Und deshalb bekommen wir null prev_calculated.

In jedem Fall werden beim Ersetzen, Aktualisieren oder Löschen von Balken alle Indikatoren von Null an neu errechnet. Das kommt nicht in Frage.

Das Hinzufügen von Ticks sollte wie gewohnt funktionieren, d.h. Ticks sind frische, aktuelle Ticks, aber nicht Ticks von gestern/vorgestern.

Ich habe Ihren Expert Advisor aus der Bug 11 Beschreibung ausgeführt und dann den Indikator mit einem Druck auf jedem OnCalculate ausgeführt

Hier sind die Protokolle.

2019.06.07 08:11:34.240 CustomHistoryTick (EURUSD,H1)   CustomSymbolCreate(Name,NULL,_Symbol) = true
2019.06.07 08:11:34.243 CustomHistoryTick (EURUSD,H1)   CustomRatesDelete(Name,0,0) = 0
2019.06.07 08:11:34.243 CustomHistoryTick (EURUSD,H1)   SymbolSelect(Name,false) = true
2019.06.07 08:11:34.243 CustomHistoryTick (EURUSD,H1)   CustomSymbolDelete(Name) = true
2019.06.07 08:11:34.243 CustomHistoryTick (EURUSD,H1)   CustomSymbolCreate(Name,NULL,_Symbol) = true
2019.06.07 08:11:34.321 CustomHistoryTick (EURUSD,H1)   CopyTicksRange(_Symbol,Ticks,COPY_TICKS_INFO,(TimeCurrent()-3600)*1000) = 1114
2019.06.07 08:11:46.158 Custom Moving Average (EURUSD11608,M1)  13  prev_calculated=0  begin=0  data=1.126668940063615
2019.06.07 08:11:46.173 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=13  begin=0  data=0.2989269387755102
2019.06.07 08:11:46.209 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989283673469387
2019.06.07 08:11:46.228 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989297959183673
2019.06.07 08:11:46.246 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989312244897959
2019.06.07 08:11:46.271 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989312244897959
2019.06.07 08:11:46.305 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989283673469387
2019.06.07 08:11:46.399 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989269387755102
2019.06.07 08:11:46.427 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989255102040816
2019.06.07 08:11:46.460 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989269387755102
2019.06.07 08:11:46.494 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989255102040816
2019.06.07 08:11:46.521 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989269387755102
2019.06.07 08:11:46.561 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989283673469387
2019.06.07 08:11:46.586 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989283673469387
2019.06.07 08:11:46.614 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989297959183673
2019.06.07 08:11:46.645 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989283673469387
2019.06.07 08:11:46.676 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989297959183673
2019.06.07 08:11:46.708 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989283673469387
2019.06.07 08:11:46.775 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989283673469387
2019.06.07 08:11:46.803 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989269387755102
2019.06.07 08:11:46.835 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989283673469387
2019.06.07 08:11:46.869 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989269387755102
2019.06.07 08:11:46.898 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989255102040816
2019.06.07 08:11:46.930 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989255102040816
2019.06.07 08:11:46.972 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.298924081632653
2019.06.07 08:11:46.993 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989226530612245
2019.06.07 08:11:47.024 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.298924081632653
2019.06.07 08:11:47.050 Custom Moving Average (EURUSD11608,M1)  14  prev_calculated=14  begin=0  data=0.2989255102040816
2019.06.07 08:11:47.085 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=14  begin=0  data=0.4171804373177843
2019.06.07 08:11:47.116 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171790087463557
2019.06.07 08:11:47.175 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.198 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171790087463557
2019.06.07 08:11:47.215 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171790087463557
2019.06.07 08:11:47.242 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.270 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171761516034985
2019.06.07 08:11:47.302 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.335 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171790087463557
2019.06.07 08:11:47.370 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171761516034985
2019.06.07 08:11:47.398 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171804373177843
2019.06.07 08:11:47.434 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171790087463557
2019.06.07 08:11:47.466 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.494 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.528 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.586 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.617 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.646 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.41717472303207
2019.06.07 08:11:47.679 Custom Moving Average (EURUSD11608,M1)  15  prev_calculated=15  begin=0  data=0.4171775801749271
2019.06.07 08:11:47.716 Custom Moving Average (EURUSD11608,M1)  16  prev_calculated=15  begin=0  data=0.5185379258642233
2019.06.07 08:11:47.740 Custom Moving Average (EURUSD11608,M1)  16  prev_calculated=16  begin=0  data=0.5185364972927947

Es bedeutet, dass alles in einer normalen Situation ordnungsgemäß funktioniert (Zecken sind heute, wie immer, von Bedeutung). Die Häkchen werden hinzugefügt, und der Indikator wird sparsam eingesetzt

 
Slava:

In jedem Fall werden beim Ersetzen, Aktualisieren oder Löschen von Balken alle Indikatoren von Grund auf neu errechnet. Das kommt nicht in Frage.

Das Hinzufügen von Zecken sollte wie üblich funktionieren, d.h. die Zecken sind frisch, also von heute, nicht von gestern - von vorgestern.

Führen Sie Ihren Expert Advisor aus der Beschreibung des Fehlers 11 aus, dann führen Sie den Indikator mit dem Druck auf jedem OnCalculate

Hier sind die Protokolle.

Es bedeutet, dass alles in einer normalen Situation ordnungsgemäß funktioniert (Zecken sind heute, wie immer, von Bedeutung). Die Häkchen werden hinzugefügt, und der Indikator wird sparsam eingesetzt

Ist dies eine korrekte Aussage?

Klicken Sie auf das Bild, um die Animation zu sehen.


Wenn es 00:00:01 ist, können wir außerdem nicht CustomTicksAdd verwenden, um einen Balken umzuformen, der erst vor zwei Sekunden war.

 
fxsaber:

Ist diese Aussage richtig?

Für einen Prüfer ist der Tick von vorgestern frisch, der heutige Tick von vorgestern.

Ich verstehe, was Sie meinen. Ihre Übung mit den benutzerdefinierten Tics von vor sechs Monaten hat eindeutig Testercharakter. Ihre Situation ist nicht normal (im Sinne der normalen Praxis)

Grund der Beschwerde: