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
Natürlich sollte es, sie sind alle nur ganze Zahlen, nicht ein separater Typ.
Ein kleiner Tipp.
Natürlich ist es wünschenswert, die Strategie nicht für den Tester umzuschreiben, denn einmal geschrieben, sollte die Strategie im Tester und ohne ihn (in der realen Welt) funktionieren.
Dies kann mit Hilfe von Bibliotheken geschehen.
1. Alle Funktionen im Zusammenhang mit dem Handel, ändern Sie ihre Namen ein wenig (meine... - nicht sehr gut, vielleicht besser _....).
2. Erstellen Sie 2 Bibliotheken. Der erste enthält Code zum Testen (ohne tatsächlich Aufträge zu senden), der zweite dupliziert lediglich Parameter in Aufrufen von Standardfunktionen. Die Umstellung von Work/Testing erfolgt einfach durch den Austausch der Bibliothek.
Natürlich könnten wir alles in einer Bibliothek zusammenfassen und einen globalen Parameter zum Umschalten einführen, aber das ist wahrscheinlich unnötig.
Und es wäre wunderbar, in MT eine weitere Funktion einzuführen, die imho das Schreiben eines solchen Testers radikal vereinfachen würde - die Funktion, den aktuellen letzten Takt zu setzen.
Nehmen wir an, wir haben 1000 Balken in der Historie, die wir testen wollen.
Definieren wir 200 Bar als den letzten und verwenden wir Close[200] anstelle von Close[0]. Diese Funktion sollte in allen eingebauten Funktionen funktionieren.
Der Tester sieht dann aus wie eine Schleife über die Taktnummer, in der dieser Wert gesetzt wird (der letzte Takt im Test), und den Aufruf der Startfunktion in der Strategie.
Tatsächlich ist es nicht so einfach :))
Ich brauche noch ein paar Punkte ...
Ist die Formulierung "Code für das Testen" ein Tester-Code oder ein EA-Code? Seien Sie genauer.
Auch das
Wir definieren 200 Balken als den letzten, dann verwenden wir anstelle von Close[0] überall Close[200].
Und dieser Fic sollte in allen Inline-Funktionen funktionieren (wirken).
Jeder EA-Code lässt sich leicht in Code für einen Indikator umwandeln:
Wir nehmen den start()-Block des EA und fügen ein Konstrukt for (testerconter=Bars;testerconter>=0;testerconter--)
{
mit einer Klammer am Ende abschließen
}
Ersetzen Sie alle Stellen, die Referenzen verwenden, durch [testerconter+reference].
Hier ist ein Beispiel aus dem eingebauten MACD_sample.mq4 Expert Advisor .
Quellcode:
Geändert
Wie Sie sehen können, gibt es überhaupt kein Problem. Wenn Sie möchten, können Sie jederzeit testerconter=0 neu definieren, wenn
Der Code wird im Body des Expert Advisors ausgeführt, nicht im Body des Expert Advisors.
In der ersten Bibliothek ist die Funktion
emuliert die Auftragsausführung im Tester, d. h. er fügt sie der Liste der Aufträge im Tester hinzu und sendet den Auftrag nicht an den Server.
In der zweiten Bibliothek ruft diese Funktion einfach die eingebettete Funktion
Wir nehmen den start()-Block des EA und fügen ein Konstrukt for(testerconter=Bars;testerconter>=0;testerconter--)
{
mit einer Klammer am Ende abschließen
}
Ersetzen Sie alle Stellen, die Referenzen verwenden, durch [testerconter+reference]
Das ist es, was ich meine.
Es wäre einfacher, die Funktion aufzurufen, die den Wert der Variablen testerconter in MT setzt (standardmäßig 0), anstatt sie zu ersetzen, und diese Ersetzung ([testerconter+reference]) würde in MT selbst erfolgen.
Dann bräuchten wir diese Ersetzungen in der Strategie selbst nicht vorzunehmen.
Bitte ersetzen Sie pre durch. vor, um in "z.B. sagen wir, wir haben 1000 Balken in ..." zu zitieren.
sonst ist die Seite wieder weg.
über
Meine Schlussfolgerung: Es scheint, dass wir über dieselbe Sache sprechen. Wir können die aktuelle Anfrage für den letzten Takt vorerst vergessen.
Ich muss versuchen, es auf diese Weise zu tun.
Für jetzt nur neu zu definieren Standard-Handelsfunktionen, das Präfix _. ist es noch respektabler :)
Ich vermute, dass Sie "mit viel Blut" getestet haben, d. h. Sie haben die Handelsfunktionen nicht neu definiert. Und jeder neue Test
Für jeden neuen Test muss ein neuer Tester-Indikator geschrieben werden. Aber Sie brauchen es nur einmal zu tun - und es gibt keine Probleme.
Wenn ich falsch liege - poste die Funktionen - sei nicht knauserig.
Es scheint, dass wir dieStartfunktion nicht direkt aus dem Expert Advisoraufrufen können.
Daher wäre es besser, den Code des Expert Advisors in einer Bibliothek zu schreiben und dort die Funktionen _init, _deinit und _start zu haben.
Im Expert Advisor werden wir Folgendes schreiben
Es ist allerdings etwas unklar, was die Parameter sind.
So wie es in Omega gemacht wird:
Das ist zwar nicht sehr hübsch, aber es wird funktionieren.
Im Allgemeinen wird ein selbstgebautes Ereignisverarbeitungssystem funktionieren :))
Er verarbeitet diesen Code - fügt alle Arten von Include-, Arbeits-Arrays für Balance, Equity, etc. ein,
benennt die Variablen Lots in _Lots (und andere) um. Im Allgemeinen erledigt sie die grobe Arbeit.
Ich muss nur noch die Ausgabe abheften und loslegen. :)
Einfache Fördermethode.
Ich vermute, dass Sie "mit viel Blut" getestet haben, d. h. Sie haben die Handelsfunktionen nicht neu definiert. Und für jeden neuen Test mussten Sie einen neuen Tester-Indikator schreiben. Aber Sie brauchen es nur einmal zu tun - und dann gibt es keine Probleme mehr. Wenn ich falsch liege, können Sie Funktionen angeben - seien Sie nicht geizig.
Völlig richtig. "Großes Blut". Es gab keine Auswechslungen. Ich habe solche Tester schon in MT3.x gemacht. MQL4 ist von MQL2 so verschieden wie der Himmel von der Erde. Allerdings habe ich die Vorteile von MQL4 nicht genutzt. Ich habe einen psychologischen Stupor. Ich hätte erst nachdenken und dann arbeiten sollen.
Der Frau wurde geraten: "Erst denken, dann sprechen". Die Frau antwortete: "Wie kann ich über etwas nachdenken, was ich noch nicht gesagt habe".