Bibliotheken: MT4Orders - Seite 36

 
Ilya Malev:
Super! So wie ich es verstehe, löst dies das Problem der SELECT_BY_TICKET-Auswahl in der Historie (unter garantierter keiner Teilausführung)?
#include <MT4Orders.mqh>

#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

void OnStart()
{
  const TICKET_TYPE Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0); // Eröffnet eine Position.
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 100);         // Die Position wird geschlossen.
    
  if (OrderSelect(Ticket, SELECT_BY_TICKET)) // Die Option zur Auswahl eines beliebigen MT5-Tickets wird ausgelöst.
    OrderPrint();
}

Dies ist ein Beispiel für die primitivste Anwendung.

Vielen Dank, @Andrey Khatimlianskii und @Igor Makanu für die "Fertigstellung". Die Aufgaben, die geäußert wurden, sind nicht in den Sinn gekommen.


Insbesondere ist es jetzt möglich, das Schicksal eines Auftrags auf der Grundlage seines Tickets zu überwachen, wenn er geöffnet wird, selbst bei Netting.

Es ist schwierig, ein Beispiel zusammenzustellen und die Feinheiten des Vorgangs zu erklären. Probieren Sie verschiedene Situationen (und Teilausführungen) von SELECT_BY_TICKET auf OrderTicket, OrderTicketOpen, OrderTicketID und beliebige MT5-Tickets.

 
fxsaber:

Dies ist ein Beispiel für die primitivste Verwendung.

Was ich nicht verstehe: In Ihrem Beispiel gibt es keinen neuen Funktionsaufruf. Wird die Historie in der neuesten Bibliothek standardmäßig wie in MT4 funktionieren? Oder ist es immer noch notwendig, etwas mit dem empfangenen Ticket zu tun

 
fxsaber:

Ich bin Ihnen, @Andrey Khatimlianskii und @Igor Makanu für die "Fertigstellung" dankbar. Die Aufgaben, die gestellt wurden, sind mir nicht in den Sinn gekommen.

Vielen Dank für Ihre harte Arbeit und Unterstützung

 
Ilya Malev:

Etwas verstehe ich nicht: in Ihrem Beispiel gibt es keinen neuen Funktionsaufruf. In der neuesten Bibliothek wird die Historie wie in MT4 standardmäßig funktionieren? Oder müssen Sie noch etwas mit dem empfangenen Ticket machen?

Sie müssen nichts mit dem empfangenen Ticket machen. Der Umfang der Aufgaben, die jetzt einfach gelöst werden können, hat sich erweitert. Ein Beispiel.


Dieses Skript

#property script_show_inputs

#include <MT4Orders.mqh>

input TICKET_TYPE inTicket = 0;

// Bequeme Ausgabe
template <typename T>
T MyPrint( const T Value, const string Str ) { Print(Str + " = " + (string)Value); return(Value); }
#define _P(A) MyPrint(A, __FUNCSIG__ ", Line = " + (string)__LINE__ + ": " + #A)

// Gibt alle Ticketdaten aus
void Test( const TICKET_TYPE Ticket )
{
  _P(Ticket);
  
  if (_P(OrderSelect(Ticket, SELECT_BY_TICKET)))
  {
    OrderPrint();
    
    _P(OrderTicket());
    _P(OrderTicketOpen());
    _P(OrderTicketID());
  }
  
  Print("");
}

void OnStart()
{    
  Test(inTicket);
  
  if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
    Test(OrderTicket());
}


wird etwas Ähnliches erzeugen wie dieses

void Test(const long), Line = 15: Ticket = 0
void Test(const long), Line = 17: OrderSelect(Ticket,1) = false

void Test(const long), Line = 15: Ticket = 1753321
void Test(const long), Line = 17: OrderSelect(Ticket,1) = true
#1753321 2019.03.13 16:15:07 buy 1.00 EURUSD 1.13119 0.00000 0.00000 2019.03.13 16:15:08 1.13118 -4.52 0.00 -1.00 0
void Test(const long), Line = 21: OrderTicket() = 1753321
void Test(const long), Line = 22: OrderTicketOpen() = 1753320
void Test(const long), Line = 23: OrderTicketID() = 2532884

Die Auswahl eines der ausgewählten Tickets führt zum gleichen Ergebnis.

 
fxsaber:

Die Auswahl nach einem der ausgewählten Tickets führt zum gleichen Ergebnis.

Daher ist es völlig normal, wenn die Auswahl nach Ticket erfolgreich ist und OrderTicket() != Ticket.

 

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Experten: TradePanel

fxsaber, 2019.04.10 22:28

Umstellung auf MT5:
#include <KimIVToMT5.mqh> // https://www.mql5.com/ru/forum/93352/page32#comment_10603352

#define  ERR_NO_CONNECTION 6
#define  ERR_TRADE_NOT_ALLOWED 4109
#define  ERR_TRADE_EXPERT_DISABLED_BY_SERVER 4112

int ObjectsTotal() { return(ObjectsTotal(0)); }
string ObjectName( const int Pos ) { return(ObjectName(0, Pos)); } 
bool IsConnected() { return((bool)TerminalInfoInteger(TERMINAL_CONNECTED)); }

#define NULL _Symbol // Neudefinition des Makros

#include "TradePanel.mq4" // https://www.mql5.com/en/code/19752
 
Ein weiteres Beispiel für die Umwandlung

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Indikatoren: Aktienchart

fxsaber, 2019.04.25 11:25 AM.

Sieht aus, als hätte es funktioniert

#define  MT4_TICKET_TYPE // OrderSend und OrderTicket müssen einen Wert desselben Typs wie in MT4 zurückgeben - int.
#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

// https://www.mql5.com/en/blogs/post/681230
#include "ind4to5.mqh" // https://c.mql5.com/3/277/ind4to5.mqh

#property indicator_separate_window
#property indicator_buffers 6
#property indicator_plots 2
#property indicator_color1 SteelBlue
#property indicator_color2 OrangeRed
#property indicator_color3 SlateGray
#property indicator_color4 ForestGreen
#property indicator_color5 Silver
#property indicator_color6 Gray
#property indicator_width1 1
#property indicator_width2 1
#property indicator_width3 1
#property indicator_width4 1
#property indicator_width5 1
#property indicator_width6 1

#define  TotalOrders TotalOrdersTmp
#define  Ticket TicketTmp
#define  StartTime StartTimeTmp
#define  Type TypeTmp
#define  Margin MarginTmp
#define  Magic MagicTmp

bool ObjectSetText( const string name, const string text,
                    const int font_size = 0, const string font_name = NULL )
{
  return(ObjectSetString(0, name, OBJPROP_TEXT, text) &&
         (!font_size || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) &&
         ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)));
}

string StringConcatenate( const string Str1, const string Str2, const string Str3 )
{
  return(Str1 + Str2 + Str3);
}

string StringConcatenate( const string Str1, const string Str2, const string Str3, const string Str4)
{
  return(Str1 + Str2 + Str3 + Str4);
}

string StringConcatenate( const string Str1, const string Str2, const string Str3, const string Str4, const string Str5 )
{
  return(Str1 + Str2 + Str3 + Str4 + Str5);
}

string StringConcatenate( const string Str1, const string Str2, const int Str3, const string Str4, const int Str5 )
{
  return(Str1 + Str2 + (string)Str3 + Str4 + (string)Str5);
}

string StringConcatenate( const string Str1, const string Str2, const string Str3, const string Str4, const string Str5, const string Str6 )
{
  return(Str1 + Str2 + Str3 + Str4 + Str5 + Str6);
}

string StringConcatenate( const string Str1, const int Str2, const string Str3, const double Str4, const string Str5, const string Str6 )
{
  return(Str1 + (string)Str2 + Str3 + (string)Str4 + Str5 + Str6);
}

string StringConcatenate( const string Str1, const string Str2, const string Str3, const string Str4, const string Str5, const string Str6, const string Str7 )
{
  return(Str1 + Str2 + Str3 + Str4 + Str5 + Str6 + Str7);
}

string StringConcatenate( const int Str1, const string Str2, const ENUM_TIMEFRAMES Str3, const string Str4)
{
  return((string)Str1 + Str2 + EnumToString(Str3) + Str4);
}

// Die Zeile mit dem Kompilierungsfehler auskommentieren: 'Import_History' - Konstante kann nicht geändert werden Equity-Monitor.mq4 734 7
#include "Equity-Monitor.mq4" // https://www.mql5.com/de/code/13242

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

MT4 zu MT5 Code Konverter

fxsaber, 2019.04.29 10:47 AM

#property indicator_chart_window 
#property indicator_buffers 6
#property indicator_plots 6
#property indicator_color1 White 
#property indicator_color2 White 
#property indicator_color3 DodgerBlue
#property indicator_color4 DodgerBlue
#property indicator_color5 Lime
#property indicator_color6 Red
 
#property indicator_width1 5
#property indicator_width2 5
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 1
#property indicator_width6 1

#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

// https://www.mql5.com/en/blogs/post/681230
#define  MT4_OLD_EVENT_HANDLERS
#include "ind4to5.mqh" // https://c.mql5.com/3/277/ind4to5.mqh

#define  digits digits2
#undef MODE_LOW
#undef MODE_HIGH

#include "Chaos_Semafor_-_3_Mod.mq4" // https://c.mql5.com/3/277/Chaos_Semafor_-_3_Mod__1.mq4
 
Wenn Sie die Verwendung von MT4Orders in Ihrem Produkt unausgesprochen lassen wollen, können Sie entweder die entsprechenden Teile des Quellcodes der Bibliothek ausschneiden oder einen universellen Stub darauf setzen
// Durch Makros werden alle Hinweise auf das Vorhandensein von MT4Orders unterbunden.
#define Alert PrintTmp
#define Print PrintTmp
  void PrintTmp( string ) {}
  
  #include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006
#undef  Print
#undef  Alert
 

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Experten: Daily Chart Trader

fxsaber, 30.04.2019 12:08 Uhr

MT5-Version
#define  MT4_TICKET_TYPE // OrderSend und OrderTicket müssen einen Wert desselben Typs wie in MT4 zurückgeben - int.
#include <KimIVToMT5.mqh> // https://c.mql5.com/3/263/KimIVToMT5.mqh

#include "ind4to5.mqh" // https://c.mql5.com/3/277/ind4to5.mqh

bool ObjectSetText( const string name, const string text,
                    const int font_size = 0, const string font_name = NULL, const color Color = clrNONE )
{
  return(ObjectSetString(0, name, OBJPROP_TEXT, text) &&
         ((font_name == NULL) || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) &&
         ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)) &&
         ((Color == clrNONE) || ObjectSetInteger(0, name, OBJPROP_COLOR, Color)));
}

#define NULL ""

#include "AEROSPINE.mq4" // https://www.mql5.com/en/code/24903