Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 157

 
Andrey Khatimlianskii:

Hallo!

Das Analogon zu den Offline-Charts von MT4 sind die Castum-Instrumente. Sie können jede beliebige Historie ausfüllen, auch wenn Sie 1 Balken = 1 Tick machen.

Aber wie bei MT4 muss sich jeder Balken mindestens eine Minute vom vorherigen unterscheiden, so dass es keine normale Zeitskala geben wird.

ps: es gibt einen fertigen Indikator hier - https://www.mql5.com/en/blogs/post/719145

In MT4 muss die Zeit eines Balkens einfach länger sein als die des vorherigen Balkens, dann zeigt MT4 den Balken an, d.h. in MT4 können Sie sekundengenaue Balken auf Offline-Charts zeichnen, ich habe einen Sekunden-Chart in QB

aber mit MT5 dies "wird nicht funktionieren", wenn Sie versuchen, das benutzerdefinierte Symbol 2 Bars mit der gleichen offenen Zeit zu senden, ohne Berücksichtigung der Sekunden, dann wird nur ein Bar angezeigt werden, das heißt, die Genauigkeit von weniger als M1 auf die benutzerdefinierte Charts von MT5 wird nicht funktionieren

 
fxsaber:

Hier gibt es ein Diagramm. Es funktioniert.

Ohne den TA zu bewegen? Funktioniert es jedes Mal? Nicht mehr als Glück.


fxsaber:

Wo liegt die Grenze der Perfektion, die toleriert werden kann/sollte? Was haben Regressionen und gelegentlich auftretende Requotes mit dem Tester zu tun?

Abgelehnte Bewerber haben damit nichts zu tun.

Ein Limit-Auftrag muss nicht zum letzten bekannten Preis ausgeführt werden, weder im Tester noch in Echtzeit. Der Preis kann während der Aussendung beliebig steigen.

Ein weiterer Punkt ist, dass der Tester im Modus der 0-ten Verzögerung (ideale Ausführung) so tun kann, als ob der Auftrag an den Makler gesendet und sofort ausgeführt worden wäre, aber ich sehe darin keinen Gewinn, denn ich wiederhole, es hat keinen Sinn, ideal zu testen, wenn in der realen Situation sowieso das Gegenteil passiert.

 
Igor Makanu:

In MT4 muss die Balkenzeit einfach länger als der vorherige Balken sein, dann zeigt MT4 den Balken an, d.h. in MT4 können Sie Balken auf Offline-Charts auf die Sekunde genau zeichnen, ich habe einen Sekunden-Chart in KB

Danke für den Hinweis, hatte ich schon vergessen. Früher gab es definitiv Fehler, wenn die Zeit nicht ein Vielfaches von Minuten war, dann schien es auch so zu funktionieren.

In der 5. Klasse kann man das definitiv nicht machen.

 
Andrey Khatimlianskii:

Hallo!

Das Analogon zu den Offline-Charts von MT4 sind die Castum-Instrumente. Sie können jede beliebige Historie ausfüllen, auch wenn Sie 1 Balken = 1 Tick machen.

Aber wie bei MT4 muss sich jeder Balken mindestens eine Minute vom vorhergehenden unterscheiden, so dass es keine normale Zeitachse gibt.

ps: es gibt einen fertigen Indikator hier - https://www.mql5.com/en/blogs/post/719145

Oh, die benutzerdefinierten Symbole sind genau das Richtige! Und die Zeckenzeit spielt für mich keine Rolle. Danke, das ist ein Anstoß in die richtige Richtung. )))

 
Andrey Khatimlianskii:

Ohne den TA zu bewegen? Funktioniert es jedes Mal richtig? Nicht mehr als Glück.

Nein, das ist natürlich nicht der Fall. Das ist der Grund für den Zyklus.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Merkmale der Sprache mql4, Feinheiten und Tricks

fxsaber, 2019.12.13 00:27

Die dringende Schließung einer Position erfolgt schematisch wie folgt
const double ClosePrice = OrderType() ? MathMin(OrderClosePrice(), Bid + MaxSpread * _Point) 
                                      : MathMax(OrderClosePrice(), Ask - MaxSpread * _Point);
    
OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), ClosePrice, 0); // StopLoss оставлен для истории
In der Schleife, versteht sich. Haben Sie noch andere Möglichkeiten?

Die Vorschriften haben damit nichts zu tun.

Der Limiter muss nicht zum letzten bekannten Preis ausgelöst werden, weder im Tester noch im wirklichen Leben. Der Preis kann sich während der Übermittlung beliebig verändern.

Ein weiterer Punkt ist, dass der Tester im Modus der 0-Verzögerung (ideale Ausführung) so tun kann, als ob der Auftrag an den Makler gesendet und sofort ausgeführt worden wäre, aber ich sehe darin keinen Gewinn, weil es wiederum keinen Sinn hat, ideal zu testen, wenn in der realen Welt ohnehin das Gegenteil passiert.

In Wirklichkeit handelt es sich entweder um eine vollständige (oder teilweise) Ausführung zum aktuellen Preis (oder besser) oder um eine Widerlegung. Das heißt, die Ausführung kann perfekt sein oder auch nicht.

Der Tester funktioniert also immer perfekt für einen Markt, aber nicht für eine Limit-Order.

 
fxsaber:

Das bedeutet, dass der Tester für einen Markt immer perfekt funktioniert, aber nicht für einen Begrenzer.

Ich würde lieber das nächste Häkchen für einen Markt machen. Es wäre besser, wenn der Tester einen Verlust ausweisen würde als einen echten Verlust. Es ist unwahrscheinlich, dass der Gral dadurch verloren geht.

 
Andrey Khatimlianskii:

Hier würde ich lieber die Ausführung des nächsten Ticks für die Märkte machen. Es ist besser, wenn ein Tester einen Absturz anzeigt als ein echter Absturz. Es ist unwahrscheinlich, dass der Gral dadurch verloren geht.

Der nächste Tick ist nicht korrekt, Ihr Markt sollte einen Tick generieren und zum nächstgelegenen Geld- oder Briefkurs ausgeführt werden, wobei das Volumen des Geschäfts berücksichtigt wird.
Limitaufträge sollten auch zu einem garantierten Preis auf der Grundlage des Volumens ausgeführt werden.
Alle anderen Algorithmen, die jetzt gemacht werden, nur irreführend, immer echte Ergebnisse.
Aus diesem Grund verwende ich das Prüfgerät überhaupt nicht. Es hat keinen Sinn, wenn bei den grundlegenden Aspekten eine Ersetzung der Ausführung erfolgt.

 
Roman:

Der nächste Tick ist nicht korrekt, Ihr Markt sollte einen Tick erzeugen und wird zum nächstgelegenen Geld- oder Briefkurs ausgeführt, wobei das Volumen des Geschäfts berücksichtigt wird.
Limitaufträge sollten auch zu einem garantierten Preis auf der Grundlage des Volumens ausgeführt werden.
Alle anderen Algorithmen, die jetzt gemacht werden, nur irreführend, immer echte Ergebnisse.
Aus diesem Grund verwende ich das Prüfgerät überhaupt nicht. Es hat keinen Sinn, wenn die grundlegenden Dinge durch eine andere Ausführung ersetzt werden.

Dazu benötigen Sie die Historie des Cups oder zumindest die Volumina der extremen Geld-/Briefkurse. Und die gibt es nicht.

Und ein Markt sollte keinen Tick im Tester erzeugen, da die Historie sonst von der getesteten Strategie abhängen würde.

 
Andrey Khatimlianskii:

Dazu benötigen Sie die Historie des Cups oder zumindest die Volumina der extremen Geld-/Briefkurse. Und die gibt es nicht.

Und der Markt sollte keinen Tick im Tester erzeugen, da sonst der Verlauf von der getesteten Strategie abhängt.

Wie einer der Moderatoren feststellte, wurde mt5 für Aktienmärkte entwickelt,
aber wenn man sich die Implementierung des Testers ansieht, wurde seine Entwicklung auf das gleiche Prinzip der Ausführung des Handels reduziert, sogar auf echte Ticks.

Wie kann man dann überhaupt testen? Auf der Grundlage welcher historischen Daten?
Und dann vertrauen Sie den Tests auf solche historischen Zitate?
:))

Natürlich brauchen Sie eine Zeckenanamnese und einen Test an echten Zecken.
Woher der Zeckenverlauf kommt, ist Sache des Nutzers: selbst sammeln, kaufen, von jemandem übernehmen, der ihn hat, usw.

Ja, ich stimme zu, dass Bände für bid asc jetzt nicht gespeichert werden, aber was hindert die Entwickler daran, drei Spalten hinzuzufügen!

  1. Volumen Spalte Fragen
  2. Spalte Volumen Gebot
  3. Spalte Letzte Handelsrichtung, Kauf oder Verkauf


Dann verschwinden automatisch alle Probleme, die mit der Korrektheit der Prüfung an echten Zecken zusammenhängen.
Die Ausführung von Börsenaufträgen im Testgerät wird wie gewünscht erfolgen.

Ja, die Generierung Tick, nicht so meinte ich, dass der Markt in der Tester sollte an der nächstgelegenen Bid Asks ausgeführt werden, Sammeln von Liquidität auf Preisebene.
Das heißt, wenn wir einen BuyMarket mit einem Volumen von 25 senden, wird der Ausführungskurs zwei Niveaus, 10 und 15, zusammenfassen und automatisch den Nettopreis der Position mitteln.

182,13 Ask1 15
182,12 Ask0 10
--------------------
182.11 Gebot0 5
182,10 Angebot1 8

Bei Limit-Aufträgen sollte das Volumen des letzten Geschäfts das Volumen Ihres Limit-Auftrags zu dem garantierten Preis, zu dem der Limit-Auftrag erteilt wurde, ausfüllen.
Das heißt, Ihr Limitauftrag sollte teilweise ausgeführt werden. Wenn Ihre Limit-Order mit einem Volumen von 25 platziert wird, dann wird der letzte Handel mit einem Volumen von 5 Ihre Limit-Order um 5 verringern.
Ihr Limit-Auftrag hat jetzt ein Volumen von 20, der nächste Last Trade wurde mit einem Volumen von 10 abgeschlossen, Ihr Limit-Auftrag hat jetzt ein Volumen von 10,
another Last trade passed with volume 10, your limit order is filled completely.
Wenn sich der Kurs umkehrt und nicht das gesamte Volumen Ihres Limit-Auftrags ausgeführt wird, handelt es sich um eine reale Situation, eine reale Ausführung.
Ihr verbleibendes Limit-Auftragsvolumen wartet weiter, bis Last es wieder aufgreift oder Sie den Auftrag selbst zurückziehen.

Die Art und Weise, wie der Algorithmus im Prüfgerät implementiert ist, hat also nichts mit der Realität zu tun.
Es ist wie ein Spielzeug zum Augenauswaschen.


 

Ich werde nicht an meinen POD-Strukturen herumfummeln, um ein Format zu öffnen. Es gibt viele Bereiche in den Strukturen. Einige Strukturen werden vererbt, andere haben private Felder.


Auf jeden Fall ist die Aufgabe entstanden, diese Strukturen zu zerlegen, um das untersuchte Format zu bearbeiten. Und nichts kommt wirklich heraus. Ich habe mich daher für diese Variante entschieden.

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16280

// Обнуление переменной.
template <typename T>
void ToNull( T &Value )
{
  uchar Bytes[sizeof(T)];
  ArrayInitialize(Bytes, 0);
  
  _W(Value) = Bytes;
}


Anwendung.

struct A
{
private:
  int i;
  
public:
  int j;  
};

void OnStart()
{
//  A a = {0};     // 'a' - cannot be initialized with initializer list
//  ZeroMemory(a); // 'a' - not allowed for objects with protected members or inheritance
  
  ToNull(a);
}


Eine Alternative ist willkommen.