Bibliotheken: MT4Orders - Seite 18

 

Es ist möglich, Handelsfunktionen auf Formel-Synthetik zu schreiben.

Nehmen wir die Dreiecksarbitrage als Beispiel. Wir erstellen ein solches Symbol in einer Minute von Hand über die GUI oder in einer Sekunde durch ein Skript


Und führen Arbitrage-TS darauf aus.

// Arbitrage Advisor auf der Formel synetics
#include <MT4Orders.mqh>

#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnTick()
{
  if (Bid > 1)
    OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0);
  else if (Ask < 1)
    OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0);    
}
 
Schnelles Schließen von Symbolpositionen über CloseBy

Forum zum Handel, zu automatisierten Handelssystemen und zum Testen von Handelsstrategien

Mehrere Trades auf einmal schließen

fxsaber, 2017.12.07 09:01

// MQL4&5-Code
#include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006

#property strict

string CorrectSymbol( string &Symb )
{
  return(Symb = ((Symb == NULL) || (Symb == "")) ? _Symbol: Symb);
}

bool PlaceHedge( const string Symb )
{
  double Lots = 0;
    
  for (int i = OrdersTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS) && (OrderType() <= OP_SELL) && (OrderSymbol() == Symb))
      Lots += OrderType() ? OrderLots() : -OrderLots();
      
  Lots = NormalizeDouble(Lots, 2);    
      
  return(((Lots > 0) && (OrderSend(Symb, OP_BUY, Lots, SymbolInfoDouble(Symb, SYMBOL_ASK), 100, 0, 0, "HEDGE") > 0)) ||
         ((Lots < 0) && (OrderSend(Symb, OP_SELL, -Lots, SymbolInfoDouble(Symb, SYMBOL_BID), 100, 0, 0, "HEDGE") > 0)) || !Lots);
}

bool CloseAll( string Symb = NULL )
{
  int Type = 0;
  long Ticket = 0;
  
  bool Res = PlaceHedge(CorrectSymbol(Symb));
  
  for (int i = OrdersTotal() - 1; !IsStopped() && Res && (i >= 0); i--)
    if (OrderSelect(i, SELECT_BY_POS) && (OrderType() <= OP_SELL) && (OrderSymbol() == Symb))
    {
      if (!Ticket)
      {
        Ticket = OrderTicket();
        Type = OrderType();
      }
      else if ((OrderType() != Type) && (Res = OrderCloseBy(Ticket, OrderTicket()) && PlaceHedge(Symb)))
      {
        Ticket = 0;       
        
        i = OrdersTotal();
      }
    }

  return(Res);
}

void OnStart()
{
  CloseAll();
}
 
fxsaber:
Tippfehler


#define MODE_DIGITS    SYMBOL_TRADE_STOPS_LEVEL
#define MODE_DIGITS    SYMBOL_DIGITS



 
Kirill Belousov:

Ein Tippfehler

Ja, es gibt einen Tippfehler in diesem Beispiel. Ich kann ihn jetzt nicht korrigieren - die Forum-Engine lässt das nicht zu.

Natürlich hat der Tippfehler im Beispiel keine Auswirkungen auf die Bibliothek selbst.

 
fxsaber:

Ja, es gibt einen Tippfehler in diesem Beispiel. Ich kann ihn jetzt nicht mehr korrigieren - die Forum-Engine erlaubt das nicht.

korrigiert

 
o_o:

korrigiert.

Ich danke Ihnen!

 

In der Datei mql4_to_mql5.mqh includer .

double MarketInfo(const string Symb,const int Type)
  {
   switch(Type)
     {
      case MODE_BID:
         return(::SymbolInfoDouble(Symb, ::SYMBOL_BID));
      case MODE_ASK:
         return(::SymbolInfoDouble(Symb, ::SYMBOL_ASK));
      case MODE_DIGITS:
         return((double)::SymbolInfoInteger(Symb, ::SYMBOL_DIGITS));
      case MODE_SPREAD:
         return((double)::SymbolInfoInteger(Symb, ::SYMBOL_SPREAD));
      case MODE_STOPLEVEL:
         return((double)::SymbolInfoInteger(Symb, ::SYMBOL_TRADE_STOPS_LEVEL));
      case MODE_LOTSIZE:
         return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_CONTRACT_SIZE));
     }

   return(-1);
  }
   return(0);
 
Kirill Belousov:

In der Beilage mql4_to_mql5.mqh

#include <MQL4_to_MQL5.mqh> // nur für dieses Beispiel

Dies ist nur ein Beispiel, das nur für die Konvertierung einiger EAs in der Beschreibung relevant ist. In dieser Diskussion wurde gezeigt, dass die Bibliotheken viel besser sind als MarketInfo und andere Lösungen.

Es gibt eine sehr wichtige Bemerkung in der Beschreibung, die vom Moderator (nicht von mir) hervorgehoben wurde

Warnung.

Die Bibliothek ist nur in 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.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Bibliotheken: MT4Orders

fxsaber, 2017.09.03 18:52

// Liste ändern:
// 03.09.2017:
// Hinzufügen: OrderTicketOpen() hinzugefügt - MT5-Ticket der Positionseröffnungstransaktion
// OrderOpenReason() - Grund für die MT5-Eröffnungstransaktion (Grund für die Eröffnung einer Position)
// OrderCloseReason() - Grund für die MT5-Schließungstransaktion (Grund für die Schließung der Position)

Beispiel einer Anwendung

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Letzte zwei Orders

fxsaber, 2017.12.23 11:02

#include <MT4Orders.mqh>

// Rückgabe von Tickets der letzten Betrags-Transaktionen, die aufgrund eines Grundes geschlossen wurden
int GetLastHistoryPositions( long &Tickets[], int Amount = INT_MAX, const ENUM_DEAL_REASON Reason = DEAL_REASON_SL )
{
  int Count = ArrayResize(Tickets, 0);
  
  for (int i = OrdersHistoryTotal() - 1; (i >= 0) && (Count < Amount); i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderCloseReason() == Reason))
      Tickets[ArrayResize(Tickets, ++Count) - 1] = OrderTicket();
  
  return(Count);
}

void OnStart()
{
  long Tickets[];
  
  // Die letzten beiden Geschäfte wurden in SL abgeschlossen
  for (int i = GetLastHistoryPositions(Tickets, 2) - 1; i >= 0; i--)
    Print(Tickets[i]);
}
 

Hallo! In der Beschreibung steht: "Dementsprechend kann OrderSelect im SELECT_BY_TICKET Modus im MT5 in seltenen Fällen (im Tester) nicht das auswählen, was im MT4 vorgesehen war. "Können Sie im Detail schreiben, in welchen Fällen?