//+------------------------------------------------------------------+
//| OnTrade_Sample.mq5 |
//| Copyright 2018, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
input int days=7; // Umfang der Handelshistorie in Tagen
//--- Setzen der Grenzen für die Handelshistorie in globaler Umgebung
datetime start; // Anfangsdatum der Handelshistorie im Cache
datetime end; // Enddatum der Handelshistorie im Cache
//--- Globale Zähler
int orders; // Anzahl der aktiven Aufträge
int positions; // Anzahl der offenen Positionen
int deals; // Anzahl der Deals in der Handelshistorie im Cache
int history_orders; // Anzahl der Aufträge in der Handelshistorie
bool started=false; // Flag der Relevanz des Zählers
//+------------------------------------------------------------------+
//| Expert Initialisierungsfunktion |
//+------------------------------------------------------------------+
int OnInit()
{
//---
end=TimeCurrent();
start=end-days*PeriodSeconds(PERIOD_D1);
PrintFormat("Limits of the history to be loaded: start - %s, end - %s",
TimeToString(start),TimeToString(end));
InitCounters();
//---
return(0);
}
//+------------------------------------------------------------------+
//| Initialisierung Zähler von Position, Auftrag und Deals |
//+------------------------------------------------------------------+
void InitCounters()
{
ResetLastError();
//--- Laden der Historie
bool selected=HistorySelect(start,end);
if(!selected)
{
PrintFormat("%s. Failed to load history from %s to %s to cache. Error code: %d",
__FUNCTION__,TimeToString(start),TimeToString(end),GetLastError());
return;
}
//--- Abfrage des aktuellen Wert
orders=OrdersTotal();
positions=PositionsTotal();
deals=HistoryDealsTotal();
history_orders=HistoryOrdersTotal();
started=true;
Print("Counters of orders, positions and deals successfully initialized");
}
//+------------------------------------------------------------------+
//| Tick-Funktion des Experten |
//+------------------------------------------------------------------+
void OnTick()
{
if(started) SimpleTradeProcessor();
else InitCounters();
}
//+------------------------------------------------------------------+
//| Aufruf wenn ein Handelsereignis eintritt |
//+------------------------------------------------------------------+
void OnTrade()
{
if(started) SimpleTradeProcessor();
else InitCounters();
}
//+------------------------------------------------------------------+
//| Beispiel für das Bearbeiten der Änderungen im Handel und Historie|
//+------------------------------------------------------------------+
void SimpleTradeProcessor()
{
end=TimeCurrent();
ResetLastError();
//--- Laden der Handelshistorie des bestimmten Intervalls in den Cache des Programms
bool selected=HistorySelect(start,end);
if(!selected)
{
PrintFormat("%s. Failed to load history from %s to %s to cache. Error code: %d",
__FUNCTION__,TimeToString(start),TimeToString(end),GetLastError());
return;
}
//--- Abfrage der aktuellen Wert
int curr_orders=OrdersTotal();
int curr_positions=PositionsTotal();
int curr_deals=HistoryDealsTotal();
int curr_history_orders=HistoryOrdersTotal();
//--- Prüfen, ob sich die Zahl der aktiven Aufträge verändert hat
if(curr_orders!=orders)
{
//--- Anzahl der aktiven Aufträge hat sich geändert
PrintFormat("Number of orders has been changed. Previous value is %d, current value is %d",
orders,curr_orders);
//--- Aktualisieren des Wertes
orders=curr_orders;
}
//--- Ändern der Anzahl der offenen Position
if(curr_positions!=positions)
{
//--- Anzahl der offenen Positionen hat sich geändert
PrintFormat("Number of positions has been changed. Previous value is %d, current value is %d",
positions,curr_positions);
//--- Aktualisieren des Wertes
positions=curr_positions;
}
//--- Veränderung der Anzahl der Deals im Cache der Handelshistorie
if(curr_deals!=deals)
{
//--- Anzahl der Deals in der Handelshistorie wurde geändert
PrintFormat("Number of deals has been changed. Previous value is %d, current value is %d",
deals,curr_deals);
//--- Aktualisieren des Wertes
deals=curr_deals;
}
//--- Veränderung der Anzahl der historischen Orders im Cache der Handelshistorie
if(curr_history_orders!=history_orders)
{
//--- Anzahl der historischen Aufträge der Handelshistorie im Cache wurde geändert
PrintFormat("Number of orders in history has been changed. Previous value is %d, current value is %d",
history_orders,curr_history_orders);
//--- Aktualisieren des Wertes
history_orders=curr_history_orders;
}
//--- Prüfen, ob es notwendig ist die Grenzen der Handelshistorie im Cache zu verändern
CheckStartDateInTradeHistory();
}
//+------------------------------------------------------------------+
//| Ändern des Anfangsdatum zur Anforderung der Handelshistorie |
//+------------------------------------------------------------------+
void CheckStartDateInTradeHistory()
{
//--- erstes Intervall, falls jetzt mit der Arbeit begonnen werden soll
datetime curr_start=TimeCurrent()-days*PeriodSeconds(PERIOD_D1);
//--- Sicherstellen, dass die Anfangsdatum der Handelshistorie nicht mehr als
//--- ein Tag über dem intendierten liegt
if(curr_start-start>PeriodSeconds(PERIOD_D1))
{
//--- Korrektes Anfangsdatum der Historie für den Cache
start=curr_start;
PrintFormat("New start limit of the trade history to be loaded: start => %s",
TimeToString(start));
//--- jetzt die Handel neu laden, um das Intervall zu aktualisieren
HistorySelect(start,end);
//--- Korrigieren der Zähler der Deals und der Aufträge in der Historie für spätere Vergleiche
history_orders=HistoryOrdersTotal();
deals=HistoryDealsTotal();
}
}
//+------------------------------------------------------------------+
/* Sample output:
Limits of the history to be loaded: start - 2018.07.16 18:11, end - 2018.07.23 18:11
The counters of orders, positions and deals are successfully initialized
Number of orders has been changed. Previous value 0, current value 1
Number of orders has been changed. Previous value 1, current value 0
Number of positions has been changed. Previous value 0, current value 1
Number of deals has been changed. Previous value 0, current value 1
Number of orders in the history has been changed. Previous value 0, current value 1
*/
|