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
Im Allgemeinen habe ich es herausgefunden - die Server geben nicht immer die richtigen Werte zurück, so dass es ein Mischmasch gibt und es gibt keine Möglichkeit, es zu beheben, nur manuell die Art der Füllung zu ändern, ja. Hier im Forum gab es schon ähnliche Probleme mit Leuten.
Danke für das Finden des Fehlers!
Um ihn zu beheben, fügen Sie überall dort, wo sich diese beiden Zeilen im Code befinden.
Request.type_filling = ORDER_FILLING_RETURN;
fügen Sie zwei weitere hinzu, so dass es wie folgt aussieht
Request.type_filling = ORDER_FILLING_RETURN;
else if ((::SymbolInfoInteger(Request.symbol,SYMBOL_FILLING_MODE) & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
Request.type_filling = ORDER_FILLING_IOC;
Danke, dass Sie den Fehler gefunden haben!
Um ihn zu beheben, fügen Sie an der Stelle, an der sich diese beiden Zeilen im Code befinden
Request.type_filling = ORDER_FILLING_RETURN;
fügen Sie zwei weitere Zeilen hinzu, so dass es wie folgt aussieht
Request.type_filling = ORDER_FILLING_RETURN;
else if ((::SymbolInfoInteger(Request.symbol,SYMBOL_FILLING_MODE) & SYMBOL_FILLING_IOC) == SYMBOL_FILLING_IOC)
Request.type_filling = ORDER_FILLING_IOC;
Dort ist das Problem anders, in der Ausführung der Markise Füllung IOC :) und der Server gibt REQUEST auf die Anfrage, dh auf der Ebene der Server-Problem und es ist nicht in irgendeiner Weise verfolgt, um nur in den Einstellungen des Experten Fähigkeit, unabhängig zu ändern, wenn es nicht funktioniert setzen
Obwohl ... es funktioniert ... danke, aber die Ausführung ist MARKET in den Protokollen geschrieben, nicht EXCHANGE, es scheint, dass alles dort gemischt ist... oder in meinem Kopf ).
Welchen Sinn hat die Zwischenspeicherung im realen Handel? Haben Sie die Historie im MT4 zwischengespeichert? Beschleunigung ist notwendig, wenn Leistung wichtig ist - Tester.
Leistung kann auch im wirklichen Leben erforderlich sein. Die Tatsache, dass wir keine solchen Experten haben, macht den potenziellen Bedarf nicht zunichte.
Was ich nicht mehr verstehe, ist, warum grundsätzlich gesagt wurde, dass es möglich wäre, Caching für den Tester zu machen, aber nicht für die Realisten. Wieso ist das so unmöglich? Der Algorithmus sollte derselbe sein, und er sollte sowohl in der Testversion als auch in der realen Version funktionieren.
Leistung kann in der realen Welt erforderlich sein. Die Tatsache, dass wir keine solchen Experten haben, hebt den potenziellen Bedarf nicht auf.
Ich verstehe nicht mehr, warum grundsätzlich gesagt wurde, dass es möglich wäre, Caching für den Tester zu machen, aber nicht möglich für die realen Personen. Wieso ist das so unmöglich? Der Algorithmus sollte derselbe sein und sowohl im Tester als auch in der Realität funktionieren.
Denn zwischengespeicherte Daten können in der Realität irgendwann nicht mehr mit der Historie übereinstimmen - der Broker hat sie von Hand korrigiert. Aber im Tester wird niemand seine Hände bewegen. Außerdem treten auch ohne die Korrekturen des Brokers Probleme im realen Markt auf. Denn man kann zwei asynchrone Anfragen senden und eine Antwort von der ersten erhalten - die Historie wurde zwischengespeichert, und dann eine Antwort von der zweiten erhalten, die früher in die Historientabelle passt als die vorherige - die Historie ändert sich. Das ist, warum Cache ist nicht gut für echte.
Für den Tester ist der Cache sehr einfach gemacht, nur die Hände sind noch nicht erreicht. Allerdings wurde das Folgende gemacht (nicht veröffentlicht)
// Hinzufügen: Vollständige Synchronisierung von OrderSend mit der Handelsumgebung (Echtzeit und Historie) - wie in MT4.
// Fix: Füllungsflags werden korrekt gesetzt.
Das bedeutet, dass OrderSend die Synchronisierung mit der Handelsumgebung in kürzester Zeit garantiert.
Einige Leute im Forum beschwerten sich, dass sie nach MT5-OrderSend BUY die Parameter einer offenen Position nicht lesen konnten - die Handelsumgebung verzögerte sich um ~1 ms. Jetzt gibt es keine Probleme mehr mit diesem und ähnlichen Problemen, wenn Sie diese Bibliothek verwenden. Es ist wahrscheinlich die einzige öffentliche Bibliothek, die dies bisher tut.
Zum Beispiel ist es jetzt nicht relevant
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wie kann man im MT5 mit OrderSend richtig arbeiten?
fxsaber, 2016.11.10 10:00 AM
Wie kann man die Höhe der Kommission wissen, ohne eine Position auf dem Instrument zu eröffnen?
fxsaber, 2016.11.08 20:30
void OnStart()
{
const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);
Sleep(1000); // Warten auf die Aktualisierung der Geschichte
if (OrderSelect(Ticket, SELECT_BY_TICKET))
Alert(OrderCommission());
}
Wahrscheinlich ist ein solches Beispiel illustrativ.
Wenn Sie nicht schlafen, erhalten Sie oft die Situation, dass die Geschichte nicht Zeit hatte, nach OrderClose zu aktualisieren und OrderCommission den Wert zurückgibt, als ob OrderClose nicht gemacht wurde.
Beachten Sie, dass es sich hier um ein Skript handelt und es keine Ereignisereignisse geben kann. Der einzige Ausweg ist ein dummer Schlaf.
Wenn Sie dieses Skript mit SB neu schreiben, ändert sich nichts.
Jetzt gibt es keine dummen Ausrutscher mit undefinierten Verzögerungen. Der gleiche SB weiß nicht, wie man das macht.
Ich werde es zur Veröffentlichung einreichen, wenn ich die Geschichte für den Tester beschleunigt habe.
Nach Überprüfung durch einen Moderator wird ein Update verfügbar sein
// Hinzufügen: Vollständige Synchronisierung von OrderSend, OrderModify, OrderClose, OrderDelete mit der Handelsumgebung (Echtzeit und Historie) - wie in MT4.
// Die maximale Synchronisationszeit kann über MT4ORDERS::OrderSend_MaxPause in µs eingestellt werden. Die durchschnittliche Synchronisationszeit im MT5 beträgt ~1 ms.
// Standardmäßig ist die maximale Synchronisationszeit gleich einer Sekunde. MT4ORDERS::OrderSend_MaxPause = 0 - keine Synchronisierung.
// Hinzufügen: Da der SlipPage-Parameter (OrderSend, OrderClose) die Ausführung von Market Orders nur im Instant-Modus beeinflusst,
// dann ist es jetzt möglich, die Art der Ausführung auf der Waage einzustellen - ENUM_ORDER_TYPE_FILLING:
// ORDER_FILLING_FOK, ORDER_FILLING_IOC oder ORDER_FILLING_RETURN.
// Im Falle einer fehlerhaften Zuweisung oder wenn das Symbol die angegebene Ausführungsart nicht unterstützt, wird die Betriebsart automatisch ausgewählt.
// Beispiele:
// OrderSend(Symb, Type, Lots, Price, ORDER_FILLING_FOK, SL, TP) - sendet den entsprechenden Auftrag mit der Ausführungsart ORDER_FILLING_FOK
// OrderSend(Symb, Type, Lots, Price, ORDER_FILLING_IOC, SL, TP) - sendet die entsprechende Order mit der Ausführungsart ORDER_FILLING_IOC
// OrderClose(Ticket, Lots, Price, ORDER_FILLING_RETURN) - sendet die entsprechende Marktorder mit der Ausführungsart ORDER_FILLING_RETURN
// Hinzufügen: OrdersHistoryTotal() und OrderSelect(Pos, SELECT_BY_POS, MODE_HISTORY) werden zwischengespeichert - sie arbeiten so schnell wie möglich.
// Es gibt keine langsamen Implementierungen mehr in der Bibliothek .
Nur noch zwei Schritte bis zur vollständigen Fertigstellung und der eindeutigen Überlegenheit gegenüber SB.
// CloseBy-Momente - dazu hatte ich noch keine Zeit. Vielleicht in der Zukunft, wenn nötig.
// TP und SL von geschlossenen Positionen bestimmen - derzeit (Build 1470) weiß MQL5 nicht, wie das geht.
// Buchhaltung für DEAL_ENTRY_INOUT und DEAL_ENTRY_OUT_BY Transaktionen.
Im Moment können Sie mit MT4Orders alles auf Netting-Konten (Börse) tun, außer die Historie mit DEAL_ENTRY_INOUT-Trades zu lesen. Und alles auf Hedge-Konten, außer CloseBy-Momente.
Vorteile gegenüber SB
Nach der Überprüfung durch einen Moderator wird ein Update verfügbar sein
Sie sind gut! Ich freue mich auf das Update!
Und ich hoffe wirklich auf die Implementierung von CloseBy in naher Zukunft!
Nach Überprüfung durch einen Moderator wird eine Aktualisierung verfügbar sein
Verfügbar.
Vorteile gegenüber SB
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.
Wie man richtig in MT5 mit OrderSend arbeitet
fxsaber, 2016.11.15 14:14
Versuchen Sie, die folgende Funktion in Ihren EA zu schreiben
#property strict
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006
void Func( const string &Symbols[] )
{
const int Total = ArraySize(Symbols);
for (int i = 0; i < Total; i++)
{
const double Price = SymbolInfoDouble(Symbols[i], SYMBOL_ASK);
const int digits = (int)SymbolInfoInteger(Symbols[i], SYMBOL_DIGITS);
if (!OrderSelect(OrderSend(Symbols[i], OP_BUY, 1, Price, 100, 0, 0, DoubleToString(Price, digits)), SELECT_BY_TICKET) ||
(NormalizeDouble(Price - OrderOpenPrice(), digits) != 0)) // wenn die Eröffnung fehlgeschlagen ist oder es einen Ausrutscher gibt - exit.
break;
}
}
void OnStart() // OnTick
{
const string Symbols[] = {"EURUSD", "GBPUSD", "AUDUSD", "USDCAD", "USDJPY"};
Func(Symbols);
}
Es ist äußerst problematisch, selbst eine so einfache Handelslogik auf MT5 mit SB oder reinem MQL5 als Beispiel zu schreiben. Was im MT4 immer problemlos funktioniert, ist im MT5 nicht einfach fehlerfrei zu implementieren. Mit dieser Bibliothek können Sie es auf die gleiche Weise wie in MT4 machen. Es besteht keine Notwendigkeit, die Syntax der Bibliothek und ihre Funktionen zu studieren - es ist MT4 im Verhalten und MQL4 in der Syntax.
Es kann nützlich sein, sich mit den Ergebnissen der Portierung von MT4-Beratern unter den fünf (über SB) hier vertraut zu machen, so dass Sie beurteilen können, in welchem Stil die Umsetzung der gleichen Handelslogik Ihnen näher liegt.
In der neuen Datei aus irgendeinem Grund Zeilenumbrüche mit einem CR-Zeichen (offenbar von Mac), die sich von anderen Quellen ist.
Ich bin ein schwacher Benutzer (und nur vinda), so kann ich nicht sagen, wie es passiert ist. Ich habe gesehen, dass die meisten Strings mit zwei Bytes 0x0D enden. Es gibt auch 0x0D 0x0A. Es gibt eines - 0x0D.
Alle Editoren zeigen die Quelle normal an, also sollte es nicht stören, denke ich.