Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Ich habe einen kleinen Stresstest durchgeführt. Ich habe das Internet ausgeschaltet, den Indikator mit dem Panel auf dem Chart gestartet. Die Parameter habe ich bereits oben angegeben. Dann habe ich das Internet wieder eingeschaltet und folgendes Ergebnis erhalten:
Der Indikator stürzte ab.
Mir ist auch etwas Seltsames aufgefallen. M15-Chart auf USDCHF.
Wenn wir uns den USDCHF-Chart ansehen, oder besser gesagt die rote Kurve des MA(USDCHF, H1)-Indikators, dann ist in den letzten 7 Stunden der Übergang zum nächsten Wert 5 Mal um 00 Minuten erfolgt. Ich habe es mit roten Vertikalen hervorgehoben. Und nur für die letzten 2 Stunden ist alles normal. Blaue Vertikalen. Imho ein klarer Fehler mit Pufferfüllung....
Ich habe einen kleinen Stresstest durchgeführt. Ich habe das Internet ausgeschaltet, den Indikator mit dem Panel auf dem Chart gestartet. Die Parameter habe ich bereits oben angegeben. Dann schaltete ich das Internet ein und erhielt das folgende Ergebnis:
Der Indikator stürzte ab.
Ich habe auch einige seltsame Dinge bemerkt. M15-Chart für USDCHF.
Wenn wir uns den USDCHF-Chart ansehen, oder besser gesagt die rote Kurve des MA(USDCHF, H1)-Indikators, dann ist in den letzten 7 Stunden der Übergang zum nächsten Wert 5 Mal um 00 Minuten erfolgt. Ich habe es mit roten Vertikalen hervorgehoben. Und nur für die letzten 2 Stunden ist alles normal. Blaue Vertikalen. Imho ein klarer Fehler mit Pufferfüllung....
Ich habe einen kleinen Stresstest durchgeführt. Ich habe das Internet ausgeschaltet, den Indikator mit dem Panel auf dem Chart gestartet. Die Parameter habe ich bereits oben angegeben. Dann schaltete ich das Internet ein und erhielt das folgende Ergebnis:
Der Indikator stürzte ab.
In Zeile 211 an Cursorposition 34 wird auf das vordefinierte Array time[] zugegriffen:
DrawData(mouse_bar_index,time[mouse_bar_index]);Es stellt sich heraus, dass der dem Array übergebene Index falsch ist.
Er kann kaum größer als rates_total-1 sein, höchstwahrscheinlich ist er gleich -1, weil er seine Werte im OnChartEvent-Handler von der Funktion iBarShift() erhält, die -1 zurückgeben kann:
In DrawData() wird ein ungültiger Indexwert durch den Aufruf von CopyRates() behandelt, der keine Daten erhält, wenn der Index negativ ist, und dann DrawData() beendet:
Bevor Sie also auf das time[]-Array zugreifen, müssen Sie den dem Array übergebenen Taktindex überprüfen (in Zeile 211):
Im Allgemeinen - Theorie. Ich habe es nicht getestet, da ich damit beschäftigt bin, die Fortsetzung des Themas zu entwickeln (farbige Puffer von Multi-Indikatoren und so weiter). Nach Erscheinen des nächsten Artikels zu diesem Thema werde ich es prüfen und testen (wenn Sie es nicht vor mir mit Änderungen in S.211 testen).
In Zeile 211 wird an der Cursorposition 34 auf das vordefinierte Array time[] zugegriffen:
Es scheint, dass der Index des Arrays falsch übergeben wird.
Er kann kaum größer als rates_total-1 sein, höchstwahrscheinlich ist er gleich -1, denn er erhält seine Werte im OnChartEvent-Handler durch die Funktion iBarShift(), die -1 zurückgeben kann:
In DrawData() wird ein ungültiger Indexwert durch den Aufruf von CopyRates() behandelt, der keine Daten erhält, wenn der Index negativ ist, und DrawData() dann beendet:
Bevor Sie also auf das time[]-Array zugreifen, müssen Sie den an das Array übergebenen Taktindex überprüfen (in Zeile 211):
Im Allgemeinen - Theorie. Ich habe es nicht getestet, da ich mit der Entwicklung der Fortsetzung des Themas beschäftigt bin (farbige Puffer von Multi-Indikatoren und so weiter). Nach Erscheinen des nächsten Artikels zu diesem Thema werde ich es prüfen und testen (wenn Sie es nicht vor mir mit Änderungen in S.211 testen).
Artem, der Taktindex kann aktuell sein, iBarShift() gibt 0 zurück. Aber man kann nicht weniger als 1 in CopyRates() eingeben. Deshalb sollten wir wahrscheinlich iBarShift()+1 in jeder Variante schreiben, da die Taktnummer und die Anzahl der Takte nicht gleich sind.
Artem, der Taktindex kann aktuell sein, iBarShift() gibt 0 zurück. Aber Sie können nicht weniger als 1 in CopyRates() eingeben. Daher sollten wir wahrscheinlich iBarShift()+1 in jeder Variante schreiben , da die Taktnummer und die Anzahl der Takte nicht gleich sind.
In diesem Zusammenhang: Der Index ist die Taktnummer
In diesem Zusammenhang: Der Index ist die Taktnummer
Artem, Index - ja, er kann Null sein. Aber die Anzahl der kopierten Elemente
kann nicht gleich Null sein.
Genau wie die Anzahl der Elemente und der Index in der Liste der Elemente...
Artem, der Index - ja, er kann Null sein. Aber die Anzahl der kopierten Elemente
kann nicht gleich Null sein.
Genau wie die Anzahl der Elemente und der Index in der Liste der Elemente...
Genau hier:
Wohin zeigt der Index?
Es ist genau hier:
Wohin zeigt der Index?
Das war's, ich halte die Klappe. Ich habe mir den Code der Funktion DrawData(mouse_bar_index,time) nicht angeschaut; deshalb habe ich mich geirrt...
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Diskussion über den Artikel "Vorbereitung von Multisymbol-Multiperioden-Indikatoren"
Artyom Trishkin, 2023.11.01 04:46 AM
...Nach der Veröffentlichung des nächsten Artikels zu diesem Thema, werde ich prüfen und testen (wenn Sie mich nicht vorher mit Änderungen in S.211 testen ).
Um etwas zu testen, muss man im Paradigma dessen sein, was vor sich geht ))
Ich habe gemerkt, dass es für mich einfacher ist, meine eigene Version zu skizzieren, da ich mit dem derzeitigen Ansatz nicht vertraut bin. Insbesondere scheint es mir, dass die Klasse CIndMSTF eine Art Superklasse ist. Auf ihrer Basis werden dann eine Reihe von Indikatorklassen erstellt. Unheimlich - die Datei IndMSTF.mqh besteht aus 4 Tausend Zeilen Code )) Ich bin den Weg gegangen, eine Instanz der Klasse CIndicators als Indikatorensammlung zu verwenden . Das ist sehr praktisch. Man braucht kein Fahrrad zu erfinden.
Warum sollte die Klasse CIndMSTF dann Daten in Puffern (SBuffer m_buffers[]) speichern? Wir haben sie einmal in OnCalculate() berechnet, und das reicht aus. D.h. als Parameter per Referenz akzeptiert, berechnet und gegeben....
Ich werde später mehr darüber schreiben, womit ich nicht einverstanden bin, sobald ich meine Version fertiggestellt habe....
Ja, ich finde es gut, dass es diesen Mechanismus gibt:
...При работе с данными не текущего графика для исключения "освобождения" таймсерии, необходимо не реже. чем раз в две минуты обращаться к этой таймсерии. В этом случае будет происходить "удержание" таймсерии, что ускорит к ней обращение (не нужно будет каждый раз дожидаться синхронизации данных)...
Artem, eine Sache noch. Wenn Artikel als Handbuch geschrieben werden, das man studieren möchte, dann gibt es imho nicht genug Schemata für die Beziehungen der Klassen, die der Entwickler erstellt....
Warum sollte man dann den Code aller Indikatoren in das Material des Artikels aufnehmen? Ich meine diesen Abschnitt - "Eine vollständige Liste aller Erbenklassen der Basisklasse des Multisymbol-Multiperioden-Indikators". Ich habemir angesehen, wie viele Codezeilen das sind.
Hier ist der Anfang:
Und hier ist das Ende:
Fast 2.000. Wow!