Bibliotheken: MT4Orders - Seite 3

 
Alexey Volchanskiy:

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 ))))

Und lesen Sie A. Galich. "Wie ich auf einer Kundgebung zur Verteidigung des Friedens sprach". (Ich hoffe, ich erinnere mich an den Titel richtig).
 
// Liste ändern:
// 03.08.2016:
// Release - geschrieben und getestet nur auf Offline-Tester.
// 29.09.2016:
// Hinzufügen: Möglichkeit, an der Börse zu arbeiten (SYMBOL_TRADE_EXECUTION_EXCHANGE). Beachten Sie, dass die Börse im Netto(nicht Hedge)-Modus arbeitet.
// Hinzufügen: Anforderung "wenn es #include <Trade/Trade.mqh> gibt, diese Zeile NACHHER einfügen".
// ersetzt durch "wenn es #include <Expert/Expert.mqh> gibt, diese Zeile NACHHER einfügen".
// Fix: OrderSend von Marktaufträgen liefert Ticketpositionen, nicht Transaktionen.
 
Dieses Verhalten ist in der Bibliothek nicht implementiert

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.

[Gelöscht]  
Die Idee ist interessant. Allerdings konvertiert MT4 Expert Advisor auf MT5 arbeitet langsam
 
Aliaksandr Kryvanos:
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.

 
Es gibt einen Fehler in MT5 Build 1455

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

  1. Suchen Sie die Zeile in MT4Orders.mqh
          Request.type_filling = (ENUM_ORDER_TYPE_FILLING)::OrderGetInteger(ORDER_TYPE_FILLING);

  2. Ersetzen Sie sie durch diese Zeilen
          Request.symbol = ::OrderGetString(ORDER_SYMBOL);
          
          // 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 MT5-Bibliothek VS plattformübergreifende MT4-OSS

Standard Library studiert und einen Test EA geschrieben.

#define SLTP (10 * _Point)

#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.


[Gelöscht]  
Ja, Sie haben Recht, die langsame Leistung ist auf OrdersHistoryTotal() zurückzuführen.
 
Aliaksandr Kryvanos:
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.

 
fxsaber:

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.