Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 102

 
STARIJ:

Preis im Diagramm auf der vertikalen Achse von unten nach oben und Zeit und Balkennummerierung auf der horizontalen Achse nach rechts

Der Null-Balken ist der letzte aktuell verfügbare Balken. Die folgenden Balken sind in der Historie vorhanden, aber für den Prüfer nicht verfügbar. Später, wenn dieser Balken berechnet ist, geht der Prüfer zum nächsten Balken über, der für ihn zu Null wird.


Verstehe ich das richtig, wird der Eröffnungskurs des nächsten Balkens, sobald er im Testgerät erscheint, zu null[0]. Und wenn der Indikator so gestaltet ist, dass er 500 Balken vor dem aktuellen [0]-Balken berechnet wird, bedeutet dies, dass der Tester den Indikator für ~ 2 Jahre (500 D1-Balken) vor dem aktuellen [0]-Balken berechnet...

Dies wirft die folgende Frage auf:

Jetzt basiert der Indikator auf der Start() -Ereignisverarbeitung - alte Version. Ich habe das Gefühl, dass während des Testens in jedem Aufruf von iCustom() der Indikator auf den vorherigen 500 Bars berechnet wird, die 1600 Testerläufe wurden für eineinhalb Stunden berechnet.
Wir können den Indikator auf OnCalculate()-Ereignisverarbeitung aufbauen, was es ermöglicht, nur die nicht berechneten Balken vor dem nächsten OnCalculate() zu berechnen - aber es ist möglich, es auf einem realen Datenfluss in einer aktuellen Zeit zu tun - wie ich von der MQL4 Referenz verstanden habe.
In der Testversion wird die Anzahl der berechneten Balken bei jedem Aufruf von iCustom() ?

 
MikeZv:

So habe ich richtig verstanden, sobald Open nächsten Bar Preis erschien in der Tester - es wird null[0]. Und wenn der Indikator so gestaltet ist, dass er 500 vor dem aktuellen [0]-Balken zu berechnen beginnt, bedeutet dies, dass der Tester den Indikator für ~ 2 Jahre (500 Balken D1) vor dem aktuellen [0]-Balken berechnet...

Dies wirft die folgende Frage auf:

Jetzt basiert der Indikator auf der Start() -Ereignisverarbeitung - alte Version. Wie Sie spüren, wird der Indikator während der Tests bei jedem Aufruf von iCustom() auf der Grundlage der vorangegangenen 500 Balken berechnet. 1600 Testläufe wurden für eineinhalb Stunden berechnet.
Wir können den Indikator auf OnCalculate()-Ereignisverarbeitung aufbauen, was die Berechnung nur der nicht berechneten Balken vor dem nächsten OnCalculate() ermöglicht - aber es ist möglich, es auf einem realen Datenfluss in einer aktuellen Zeit zu tun - wie ich von der MQL4-Referenz verstanden habe.
In der Testversion wird die Anzahl der berechneten Balken bei jedem Aufruf von iCustom() ?


Der Indikator ist einfach schief geschrieben, daher ist er langsam, ich brauche eine professionelle Überarbeitung, dann wird er die ganze Geschichte lesen und sehr schnell... das ist alles...

 
Nikolay Ivanov:


Der Indikator ist einfach schief geschrieben, also langsam, man braucht eine professionelle Überarbeitung, dann liest sich die ganze Geschichte sehr schnell... das ist alles...


Bereits umgeschrieben ... :)

 

Ich habe einen neuen Indikator [onCalculate()] geschrieben, der auf dem alten Indikator [onStart()] basiert; die obige Frage wurde gestellt.
Ich lasse ein Skript laufen, das die Werte für 5 Jahre (Zeitraum D1) miteinander vergleicht - eins zu eins stimmen alle Werte überein.
Ich habe dieselbe ICustom() in den Expert Advisor kopiert und beimTesten des Expert Advisors in eine Datei ausgegeben.
Die alten Indikatorwerte werden wie im Skript angezeigt, die neuen Indikatorwerte sind alle anders !!!
Warum gibt iCustom() in einem Expert Advisor für einen Indikator bei Start() die gleichen Werte wie im Skript aus,
, aber für einen Indikator bei OnCalculate() unterscheidet sich die Ausgabe im Expert Advisor von der Ausgabe im Skript?


 

Hallo zusammen.

Leute, könnt ihr mir einen Rat geben, wer das schon mal erlebt hat?

Bei einigen Binärbrokern, wie z.B. Grand Capital, wird das Konto nicht durch den Gewinn aus einem Handel, sondern durch Einnahmen aus dem/den Guthaben des Kontos belastet.


Ich habe mehrere alternative Arbeitsmöglichkeiten, wie man das Ergebnis eines Geschäfts herausfinden kann, aber die korrekteste ist immer noch, den Wert der Bilanzzeile und den Betrag der Gewinne/Verluste abzulesen.

Die Frage ist also: Wie kann dies "im Moment", aber über die gesamte Transaktionshistorie hinweg geschehen? Das heißt, ich interessiere mich für eine (in MQL4 enthaltene) Funktion, die alle Bilanzdatensätze durchsucht und den Kommentar und den Wert selbst liest. Dies ist das erste Mal, dass ich mich in mehreren Jahren der Programmierung mit einer solchen Aufgabe konfrontiert sehe.

 
MikeZv:

Ich habe einen neuen Indikator [bei OnCalculate()] geschrieben, der auf dem alten Indikator [bei Start()] basiert; dieses Problem wurde oben angesprochen.
Ich lasse das Skript laufen, das sie für 5 Jahre (Zeitraum D1) miteinander vergleicht - eins-zu-eins, alle Werte stimmen überein.
Ich habe dieselbe ICustom() in den Expert Advisor kopiert und lasse sie in einer Datei anzeigen, wenn ichden Expert Advisor teste.
Die alten Indikatorwerte werden wie im Skript angezeigt, die neuen Indikatorwerte sind alle anders !!!
Warum gibt iCustom() in einem Expert Advisor für den Indikator bei Start() die gleichen Werte aus wie im Skript?
und für den Indikator auf OnCalculate() die Ausgabe im Expert Advisor ist anders als die Ausgabe im Skript?


Es kann lange dauern, bis man es erraten kann.

Ich würde den Code auf falsche Datentypkonvertierung, Verdoppelung von Variablennamen (d.h. im alten Code werden Namen verwendet, die jetzt reserviert sind) überprüfen - als Ergebnis erhält die Variable nicht die Werte, die sie erhalten sollte (überprüfen Sie zunächst die Variablennamen, die in OnCalculate verwendet werden - open, high, low, close, etc. - In altem Code findet man sie recht häufig).
Und was iCustom betrifft, so handelt es sich um die einfachste Variante, und Fehler können hier höchstwahrscheinlich auf falsch übergebene Parameter zurückzuführen sein (wiederum aus den oben genannten Gründen).

Drucken Sie alle Werte aus, oder führen Sie den Debug-Modus aus und prüfen Sie, wo eine Diskrepanz besteht.
 
Artyom Kuraev:

Es kann lange dauern, bis man es erraten kann.

Ich würde den Code auf fehlerhafte Datentypkonvertierung, doppelte Variablennamen (d.h. alter Code verwendet Namen, die jetzt reserviert sind) überprüfen - als Ergebnis nimmt die Variable falsche Werte auf, die sie erhalten sollte (überprüfen Sie zunächst die Variablennamen, die in OnCalculate verwendet werden - open, high, low, close, etc. - In altem Code sind sie oft zu finden).
Und was iCustom betrifft, so handelt es sich um die einfachste Variante, und Fehler können hier höchstwahrscheinlich mit falsch übergebenen Parametern zusammenhängen (wiederum aus den oben genannten Gründen).

Drucken Sie alle Werte aus, oder führen Sie die Suche im Debug-Modus durch und prüfen Sie, wo die Diskrepanz auftritt.
Die Ausgabe der beiden Indikatoren im Skript ist gleich.

Expert hat Zeilen mit iCustom() aus dem Skript zusammengearbeitet. Es werden die gleichen Parameter übergeben.

 
MikeZv:

Der Experte KOPIERT die Zeilen mit iCustom() aus dem Skript. Es werden die gleichen Parameter übergeben.

Die Tatsache, dass sie kopiert werden, kann zu Fehlern führen. Ich habe nur mögliche Ursachen vorgeschlagen und was ich zuerst überprüfen würde.

Der zweite Punkt, und das ist wahrscheinlich die offensichtlichste Antwort, ist, dass der Indikator selbst überteuert ist und einen Wert liefert, wenn er auf die Historie angewandt wird, und einen anderen, wenn er im Strategietester-Modus arbeitet. Ich habe einmal darüber geschrieben, Sie können es auf zwei Bildern sehen .

Ich bestehe nicht auf irgendetwas, und meine Antwort wird auf meiner Erfahrung beruhen. Wenn Sie sich sicher sind, dass keine der von mir vorgeschlagenen Optionen geeignet ist, warten Sie einfach auf weitere Antworten oder geben Sie mehr Hintergrundinformationen :)

 
Artyom Kuraev:

Hallo zusammen.

Leute, könnt ihr mir einen Rat geben, wer das schon mal erlebt hat?

Einige Binärbroker, wie z.B. Grand Capital, berechnen Einnahmen und belasten das Konto nicht durch den Gewinn aus einem Handel, sondern als Einnahmen auf/von dem/den Guthaben des Kontos.


Ich habe mehrere alternative Arbeitsmöglichkeiten, wie man das Ergebnis eines Geschäfts herausfinden kann, aber die korrekteste ist immer noch, den Wert der Bilanzzeile und den Betrag der Gewinne/Verluste abzulesen.

Die Frage ist also: Wie kann dies "im Moment", aber über die gesamte Transaktionshistorie hinweg geschehen? Das heißt, ich interessiere mich für eine (in MQL4 enthaltene) Funktion, die alle Bilanzdatensätze durchsuchen und den Kommentar und den Wert selbst lesen würde. Dies ist das erste Mal, dass ich in mehreren Jahren der Programmierung vor einer solchen Aufgabe stehe.


#define  OP_BALANCE 6
#define  OP_CREDIT  7

Plus

OrdersHistoryTotal
StringFind(OrderComment(),txt,0)
 
Taras Slobodyanik:

plus

DANKESCHÖN!

Es hat alles geklappt!
Grund der Beschwerde: