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
ArrayInitialize funktioniert nicht Code beigefügt ist, wenn wir unkommentieren die Schleife, alles ist gut.
Und wenn Variablen in der Klasse und Indikatoren auf globaler Ebene mit demselben Namen deklariert werden, erscheint eine Warnung.
Am Wochenende, als es noch keine Ticks gab, habe ich den Indikator auf Demokonten getestet, indem ich ihn auf dem letzten Build von zwei Instanzen des MT5-Terminals laufen ließ, allerdings von verschiedenen Unternehmen: MetaQuotes und EGlobal. Die Einstellungen sind überall gleich. Um sicherzugehen, habe ich es offline überprüft, so dass der Tick-Faktor ausgeschlossen ist.
Das Problem ist, dass der einfachste Code des "Unterindikators" (ganz zu schweigen vom vollwertigen und komplexeren Indikator) auf den verschiedenen Terminals der verschiedenen Unternehmen eine unterschiedliche Anzahl von Ergebnissen anzeigt:
1) EGlobal. 2. MetaQuotes.
Ich habe beide Terminals vollständig entladen (mit dem Task-Manager nach Speicherprozessen überprüft), sie wieder geladen und beide Codes vorsichtshalber neu kompiliert. Letztendlich gab es keine Änderungen.
MathRound() funktioniert in 4 und 5 unterschiedlich, sollte aber gleich sein.
4p's Code:
5-Sekunden-Code:
MathRound() funktioniert in 4 und 5 unterschiedlich, sollte aber gleich sein.
4-Sekunden-Code:
5-Sekunden-Code:
Das Problem liegt hier:
Dieser Wert wird in 4 und 5 unterschiedlich gerundet.
Das ist keine Überraschung, so sollte es auch sein.
Warum speichert MT5 die Orderhistorie usw. nicht, wenn der Test unterbrochen wird? In MT4 wurde es gespeichert.
Es gibt auch keine Positionierung in der Auftragshistorie des Testcharts - es war bequem, Aufträge im Bereich großer Drawdowns durch Anklicken des Charts anzuzeigen.
Guten Abend.
Können Sie mir bitte erklären, wie die Methode SLeep() funktioniert?
Es sollte den Expert Advisor für eine bestimmte Zeit unterbrechen, oder liege ich da falsch?
{for (int sleep=0;sleep<10000;sleep++)
wenn(BarsCalculated(Handle)>=o_bars_reoptimizate)
{ Print(BarsCalculated(Handle)); break; } else Sleep(100);}
Für diesen Code erwarte ich das Ergebnis - wenn die Anzahl der für einen bestimmten Indikator berechneten Balken größer als ein bestimmter Wert ist, wird die Schleife unterbrochen; andernfalls gibt es eine Verzögerung von 100 ms bei der weiteren Codeausführung. Die mögliche Gesamtverzögerung beträgt 100*10000ms....Das ist genug Zeit für die Berechnung des Indikators. Warum läuft der Code dann weiter? (der diesem Zyklus folgt) Oder im Tester funktioniert diese Funktion nicht, wie ich vermute. Vielen Dank im Voraus für die Klarstellung.
Guten Abend.
Können Sie mir bitte erklären, wie die Methode SLeep() funktioniert?
Es sollte den Expert Advisor für eine bestimmte Zeit unterbrechen, oder liege ich da falsch?
{for (int sleep=0;sleep<10000;sleep++)
wenn (BarsCalculated(Handle)>=o_bars_reoptimizate)
{ Print(BarsCalculated(Handle)); break; } else Sleep(100);}
Für diesen Code erwarte ich das Ergebnis - wenn die Anzahl der für einen bestimmten Indikator berechneten Balken größer als ein bestimmter Wert ist, wird die Schleife unterbrochen; andernfalls gibt es eine Verzögerung von 100 ms bei der weiteren Codeausführung. Die mögliche Gesamtverzögerung beträgt 100*10000ms....Das ist genug Zeit für die Berechnung des Indikators. Warum läuft der Code dann weiter? (der diesem Zyklus folgt) Oder im Tester funktioniert diese Funktion nicht, wie ich vermute. Vielen Dank im Voraus für die Klarstellung.
Die Dokumentation z.B. von CopyBuffer sorgt für Kopfzerbrechen: "Wenn Sie ein teilweises Kopieren von Indikatorwerten in ein anderes Array (nicht den Indikatorpuffer) vornehmen wollen, sollten Sie zu diesem Zweck das Zwischenarray verwenden, in das die gewünschten Werte kopiert werden. Und schon von diesem Zwischenfeld aus wird Element für Element die erforderliche Anzahl von Werten an die richtigen Stellen des empfangenden Feldes kopiert. "
Wenn ausdrücklich aufbuffer_num verwiesen wird, ist die Notwendigkeit einer vorherigen Bindung des empfangenden Arrays an den Indikatorpuffer mit der einen oder anderen Sequenznummer durch SetIndexBuffer sicherlich impliziert. Aber,"wenn wir einige Werte des Indikators in ein anderes Array (nicht den Indikatorpuffer) kopieren wollen", können wir nicht überbuffer_num sprechen, weil es kein Indikator ist und wir ihn per Definition mit nichts verbunden haben.
Ein Widerspruch?
Zweideutigkeit?
Oder bin ich vielleicht komplett programmiert?
Ich habe versucht, eine eindeutige Definition eines Indikatorpuffers zu finden und bin gescheitert. Ist es wirklich jeder Puffer über SetIndexBuffer verknüpft oder ist es nicht genug und es sollte ein Array mit dem INDICATOR_DATA-Bezeichner sein ?