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
Wobei sich fxsaber darüber aufregt, dass ich der Einzige bin, der diesen Fehler bemerkt hat, also braucht niemand die lib )). Es ist nur so, dass unsere Leute sehr aufmerksam sind.
Eine Anekdote aus dem Leben - ich leitete ein Webinar, ich wiederholte 10 Mal, dass es eine Aufzeichnung geben wird. Am Ende sage ich noch einmal, die Aufzeichnung gibt es morgen, wenn Sie Fragen haben - stellen Sie sie. Und nun erraten Sie die erste Frage ))))
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wie arbeitet man richtig in MT5 mit OrderSend
fxsaber, 2016.10.13 07:10
Selbstgeschriebener sehr einfacher OrderSend Overload: bis OnTrade eine Antwort zurückgibt, geben alle nachfolgenden OrderSends false zurück. Wenn die Antwort eintrifft, wird das erzwungene false aufgehoben.
ZY Wenn Sie voll funktionsfähig sein wollen (nicht für SB), sollten Sie OnTrade OnTick und OnTimer unabhängig voneinander aufrufen, wenn die entsprechende Synchronisation eintrifft.
Berücksichtigen Sie diesen MT5-Umstand, wenn Sie mit den üblichen MT4-Orderfunktionen arbeiten: OrderSend, OrderModify, OrderClose, OrderDelete.
Es ist möglich, eine garantierte (wie in MT4) History-Synchronisation nach Handelsaufträgen in MT5 selbst hinzuzufügen, indem Sie den Algorithmus im Zitat verwenden.
Die Idee ist interessant. Allerdings arbeitet der konvertierte MT4 Expert Advisor auf MT5 langsam
Nur die Implementierung von OrderSelect(index, SELECT_BY_POS, MODE_HISTORY) ist langsam. Es könnte schneller sein, aber dann gäbe es keine bestimmte Sortierung der Geschichte, die in MT4 verfügbar ist und die einige Leute verwenden. Wenn sie nicht genutzt wird, wäre es möglich, diesen Modus nicht langsamer als in MT4 arbeiten zu lassen. Alles andere ist definitiv nicht langsamer. Wenn Sie also den oben erwähnten OrderSelect-Modus nicht verwenden, suchen Sie nach Bremsen außerhalb von MT4Orders.
Was Zeitreihen und andere Dinge angeht, so wird dieses Thema in der Beschreibung hervorgehoben - es wurde nicht berührt. Höchstwahrscheinlich haben Sie dort Bremsen.
ENUM_ORDER_TYPE_FILLING::ORDER_FILLING_RETURN zurückgegeben.
Wenn also in OrderModify Füllung über COrderInfo::TypeFilling() gesetzt wird, dann kommt es auf dem gleichen RoboForexEU-MetaTrader 5 zu einem logischen Fehler [Unsupported filling mode]. Auf MetaQuotes-Demo tritt dieser Fehler jedoch nicht auf - ist der Server des Entwicklers schief eingestellt?
Dies kann auf einigen Handelsservern den Fehler [Unsupported filling mode] verursachen, wenn Sie versuchen, schwebende Aufträge über OrderModify zu ändern.
Wenn Sie auf dieses Problem gestoßen sind, können Sie diesen Fehler folgendermaßen umgehen
// https://www.mql5.com/ru/forum/1111/page1759#comment_2906850
if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
Request.type_filling = (ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);
Standard Library studiert und einen Test EA geschrieben.
#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>
// Über MT5-Standardbibliothek - nur MT5
// Setzt SellLimit und setzt dann seinen SL/TP
void MT5Order( const double Price )
{
CTrade Trade;
if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
Trade.SetTypeFilling(ORDER_FILLING_RETURN);
Trade.OrderOpen(_Symbol, ORDER_TYPE_SELL_LIMIT, 1, 0, Price, 0, 0, ORDER_TIME_GTC, 0, __FUNCTION__);
const ulong Ticket = Trade.ResultOrder();
if (Ticket > 0)
{
COrderInfo Order;
if (Order.Select(Ticket))
Trade.OrderModify(Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
}
}
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006
// Über MT4-OSJS - plattformübergreifende Variante (MT4/5)
// Setzt SellLimit und setzt dann seinen SL/TP
void MT4Order( const double Price )
{
const int Ticket = OrderSend(_Symbol, OP_SELLLIMIT, 1, Price, 0, 0, 0, __FUNCTION__);
if ((Ticket > 0) && OrderSelect(Ticket, SELECT_BY_TICKET))
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + SLTP, OrderOpenPrice() - SLTP, OrderExpiration(), clrNONE);
}
void OnTick()
{
static bool FirstRun = true;
if (FirstRun)
{
const double Price = SymbolInfoDouble(_Symbol, SYMBOL_BID) + 100 * _Point;
MT5Order(Price); // Über MT5-Standardbibliothek - nur MT5
MT4Order(Price); // Über MT4-OSJS - plattformübergreifende Variante (MT4/5)
FirstRun = false;
}
}
Sie können den Code von MT4Order und MT5Order Funktionen vergleichen.
Ja, Sie haben recht, die langsame Arbeit ist auf OrdersHistoryTotal() zurückzuführen.
Es könnte sich lohnen, eine schnellere Version dieser Funktion zu erstellen. Funktioniert ohne Langsamkeit, aber nicht 100% MT4-konform.
Ich habe mir den Code jetzt angeschaut. Es gibt mehrere Möglichkeiten, es zu beschleunigen. Zum Beispiel kann man sich im Tester einen Dreck um die Synchronisation mit der MT5-Historie scheren, da im Tester alles einfach ist.
Aber, um ehrlich zu sein, weder im Tester noch im realen Handel bin ich jemals auf Aufgaben gestoßen, bei denen der TS die Historie analysieren musste.
Daher bezweifle ich, dass ich eine solche Beschleunigung vornehmen werde.
Es könnte sich lohnen, eine schnellere Version dieser Funktion zu erstellen. Funktioniert ohne Verzögerung, ist aber nicht 100% MT4-kompatibel.
Ich habe mir den Code jetzt angeschaut. Es gibt mehrere Möglichkeiten, es zu beschleunigen. Zum Beispiel kann man sich im Tester einen Dreck um die Synchronisation mit der MT5-Historie scheren, denn im Tester ist alles ganz einfach.
Aber, um ehrlich zu sein, weder im Tester noch im realen Handel bin ich jemals auf Aufgaben gestoßen, bei denen der TS die Historie analysieren musste.
Deshalb bezweifle ich, dass ich eine solche Beschleunigung vornehmen werde.
Ich verwende die Verlaufsanalyse, mein MM impliziert den Handel einer Situation, in der Positionen geschlossen und geöffnet werden, und das Risiko wird anhand des Finanzergebnisses zu Beginn der Situation berücksichtigt.
In der Situation können wir uns vorstellen, dass ein Trend identifiziert wird - die Arbeit an seiner Entwicklung bis zu seinem Abschluss ist anders - Öffnen und Schließen von Positionen, aber es ist wichtig zu wissen, was man riskieren kann, denn je länger der Trend läuft, desto größer ist die Wahrscheinlichkeit seines Abschlusses - daher das unterschiedliche Volumen der offenen Aufträge und Ausstiegspunkte.