Bibliotheken: MT4Orders - Seite 9

 
fxsaber:

Ausführen im Testprogramm mt4orders_exampleexpert.mq5

Als ich die Bibliothek schrieb, war ich weit davon entfernt, das volle Ausmaß möglicher Probleme mit Benutzern zu erkennen. Vor Ihnen haben alle von ihnen ohne Anleitung gearbeitet.

Prägnante Beispiele der EA-Konvertierung finden sich nicht nur in der Bibliotheksbeschreibung, sondern auch in deren Diskussion - in den Kommentaren (dort noch deutlicher).

Dank ilan1_4_strict.mq4 klappte alles, aber meine EAs gaben 75 Fehler. Die Fehler sind von dieser Art:


 
Nauris Zukas:

Dank mit ilan1_4_strict.mq4 alles funktioniert, aber meine ea gab 75 Fehler. Die Fehler sind von dieser Art:


Werfen Sie zumindest den gesamten Grafikteil heraus.

Warum brauchen Sie es in der Tester überhaupt?

 
ivanivan_11:

Schmeißen Sie zumindest alle Grafiken raus.

Wozu braucht man sie überhaupt im Testprogramm?

Sie können das tun, aber es gibt immer noch eine Menge Fehler.
 
Nauris Zukas:

Dank mit ilan1_4_strict.mq4 alles funktioniert, aber meine ea gab 75 Fehler. Die Fehler sind von dieser Art:

In der Diskussion gesagt und in der Beschreibung gibt es solche Worte

Diese Arbeit betrifft nur das Auftragssystem.

Die Frage nach der Möglichkeit, eine solche komplette Bibliothek zu erstellen, wenn MQL4-Code in MetaTrader 5 ohne Änderungen funktionieren kann, wurde nicht gelöst.

Achtung!

Die Bibliothek ist in nur einer Datei enthalten - MT4Orders.mqh. Alle anderen Dateien sind als Beispiele für die Verwendung der Bibliothek beigefügt. Diese Dateien werden nicht benötigt, um mit der Bibliothek zu arbeiten.

Während des Übergangs MT4->MT5 ist das schwierigste Hindernis das neue Bestellsystem. MT4Orders beseitigt diese Schwierigkeit vollständig. Die anderen Unterschiede sind nicht so entmutigend. Da sie leicht umgeschrieben werden können - es gibt bequeme Referenzdaten zu diesem Thema. Nun, die Korrektheit der Arbeit der Bibliothek wurde wie folgt demonstriert

Mehrere MT4/5-Advisors verschiedener Typen wurden (von kodobase) als Anwendungsbeispiel genommen: pips, news, martin, multicurrency, etc.

So können Sie in MQL5 schreiben

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien.

Fehler, Bugs, Fragen

fxsaber, 2016.10.20 15:54

#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;
  }
}

Die gelb hervorgehobene MT4Order Funktion macht das Gleiche wie die MT5Order Funktion. In jedem Forum wird der gelbe Code sofort verstanden, der alternative MT5-Code nicht.

Und wie man für MT5 schreibt - das entscheidet jeder für sich selbst. Ich z.B. benutze MT4Orders und in seltenen Fällen auch reines (SB hat schwache Funktionalität) MQL5. Beide Schreibstile funktionieren parallel. Aber wenn man nur über MT4Orders schreibt, ist das Order-System plattformübergreifend. Daher übe ich, Code zu schreiben, der auf beiden Plattformen ohne Änderungen läuft.

 
fxsaber:

Ich übe also, Code zu schreiben, der auf beiden Plattformen unverändert läuft.

Ich danke Ihnen! Ich werde wohl auch in Zukunft über diese Option nachdenken müssen.
 

Forum über Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien

Wie kann man den letzten Schlusskurs einer Order ermitteln (MQL5)?

fxsaber, 2016.12.05 10:25 AM

#include <MT4Orders.mqh>

void OnStart()
{
  if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
    Alert(OrderClosePrice());
}
 
void Terminal()
{            
int oldticket=0;
int Ticket=0;
   ArrayResize(Mas_LOT,OrdersTotal(),3);
   ArrayInitialize(Mas_LOT,0); 

   for(int i=0; i <= OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)){    
      if (OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik){

      
      Mas_LOT[i][0] = OrderTicket();
      Mas_LOT[i][1] = OrderLots();
      Mas_LOT[i][2] = OrderType();
      Mas_LOT[i][3] = (OrderProfit() + OrderSwap() + OrderCommission());
      Mas_LOT[i][4] = OrderStopLoss();
      Mas_LOT[i][5] = OrderOpenPrice();

      Mas_LOT[i][6] = OrderTakeProfit();

}}}}

Zum Beispiel ist das Order-Array von mt4 eine sehr nützliche und bequeme Sache für die Berechnung, zum Beispiel der durchschnittliche Take/Stop, und dieses gleiche Array kann in die Modifikations- und Schleppnetzfunktionen eingespeist werden, wie es besser ist, es in mt5 mit der MT4Orders. mqh-Bibliothek oder ohne sie zu konvertieren
 
Aleksey Semenov:
wie man es am besten für mt5 mit MT4Orders.mqh Bibliothek konvertiert
hinzufügen
#include <MT4Orders.mqh>
 
Plattformübergreifendes Beispiel

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Neue Version von MetaTrader 5 build 1525: Darstellung der Historie in Form von Positionen und Verbesserung des Testers

fxsaber, 2017.01.27 19:20

Ausführen eines plattformübergreifenden Skripts

// MQL4&5-Code

#property strict

#include <MT4Orders.mqh>

void OnStart()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick) && (OrdersTotal() == 0) &&
      (OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0) > 0))
  {
    const double Lots[] = {0.6, 0.3, 0.1};
    
    for (int i = 0; i < ArraySize(Lots); i++)    
      if (OrderSelect(0, SELECT_BY_POS) && SymbolInfoTick(_Symbol, Tick))
        OrderClose(OrderTicket(), Lots[i], Tick.bid, 0);

    const int Total = OrdersHistoryTotal();
    
    for (int i = 0; i < Total; i++)
      if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
        OrderPrint();  
  }
}

Zuerst auf MT5-Hedge. Wir bekommen so einen schönen MT4-Ausdruck

#114769046 2017.01.27 19:57:25 balance 0.00  1 0 0 2017.01.27 19:57:11 0 0.00 0.00 50000.00 0
#114769087 2017.01.27 19:57:25 buy 0.60 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:25 1.06829 0.00 0.00 -5.40 0
#114769088 2017.01.27 19:57:25 buy 0.30 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:25 1.06829 0.00 0.00 -2.70 0
#114769089 2017.01.27 19:57:25 buy 0.10 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:26 1.06829 0.00 0.00 -0.90 0

und einen klassischen Bericht

Orders
Offene ZeitAuftragSymbolTypVolumenPreisS / LT / PZeitBedingungKommentar
2017.01.27 19:57:25131208025EURUSDkaufen1.00 / 1.001.068382017.01.27 19:57:25gefüllt
2017.01.27 19:57:25131208027EURUSDverkaufen0.60 / 0.601.068292017.01.27 19:57:25gefüllt
2017.01.27 19:57:25131208030EURUSDverkaufen0.30 / 0.301.068292017.01.27 19:57:25gefüllt
2017.01.27 19:57:26131208031EURUSDverkaufen0.10 / 0.101.068292017.01.27 19:57:26gefüllt
Vorgänge
ZeitGeschäftSymbolTypRichtungVolumenPreisAuftragKommissionTauschGewinnSaldoKommentar
2017.01.27 19:57:11114769046Saldo0.000.0050 000.0050 000.00
2017.01.27 19:57:25114769085EURUSDkaufenin1.001.068381312080250.000.000.0050 000.00
2017.01.27 19:57:25114769087EURUSDverkaufenaus0.601.068291312080270.000.00-5.4049 994.60
2017.01.27 19:57:25114769088EURUSDverkaufenaus0.301.068291312080300.000.00-2.7049 991.90
2017.01.27 19:57:26114769089EURUSDverkaufenaus0.101.068291312080310.000.00-0.9049 991.00

Zur Bestätigung führen wir das gleiche Skript auf MT4 aus.

Klassischer MT4-Bericht

Geschlossene Transaktionen:
TicketOffene ZeitTypGrößeArtikelPreisS / LT / PZeit schließenPreisKommissionSteuernTauschGewinn
1700392462017.01.27 20:00:41SaldoEinzahlung50 000.00
1700392872017.01.27 20:00:57kaufen0.60eurusd1.068540.000000.000002017.01.27 20:00:571.068360.000.000.00-10.80
zu #170039289
1700392892017.01.27 20:00:57kaufen0.30eurusd1.068540.000000.000002017.01.27 20:00:581.068360.000.000.00-5.40
zu #170039290
1700392902017.01.27 20:00:57kaufen0.10eurusd1.068540.000000.000002017.01.27 20:00:581.068360.000.000.00-1.80
von #170039289

Und der Ausdruck des Skriptprotokolls

#170039246 2017.01.27 20:00:41 balance 0.01  0 0 0 2017.01.27 20:00:41 0 0.00 0.00 50000.00 Deposit 0
#170039287 2017.01.27 20:00:57 buy 0.60 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:57 1.06836 0.00 0.00 -10.80 to #170039289 0
#170039289 2017.01.27 20:00:57 buy 0.30 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:58 1.06836 0.00 0.00 -5.40 to #170039290 0
#170039290 2017.01.27 20:00:57 buy 0.10 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:58 1.06836 0.00 0.00 -1.80 from #170039289 0

Sie können deutlich sehen, dass das Skriptprotokoll in MT4 und MT5 übereinstimmt - es funktioniert plattformübergreifend.

ZY Wenn die Skriptlogik für MT5 über SB geschrieben wird, wird das Skript nicht korrekt funktionieren. Im Allgemeinen ist es sogar schwierig zu sagen, wie man eine so einfache MQL4-Logik für MT5 schreiben kann.

[Gelöscht]  

Auswahl nach Symbol und Majic funktioniert nicht

if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}

OrderSelect nicht funktioniert nicht wählen Sie eine Bestellung (Ticket von Index), um mit ihm zu arbeiten, einfaches Beispiel im Anhang und es funktioniert nicht auf mt5 aus irgendeinem Grund

Dateien: