Diskussion zum Artikel "MQL5 Cookbook: Die History der Abschlüsse und Funktions-Library zum Erhalt von Position-Eigenschaften"
Der Artikel ist gut, er hat mir gefallen. Es kommt oft vor, dass die aktuelle Position aus mehreren Geschäften besteht, und neben dem ersten und dem letzten würde ich gerne die Parameter von 2, 3 usw. Geschäften kennen. Eine solche Funktion würde den Artikel bereichern.
Frage an den Autor des Artikels.
Wie kann ich die ID der Position erhalten , an der der Handel unmittelbar nach der Eröffnung der Position beteiligt war?
Frage an den Autor des Artikels.
Wie erhält man die Kennung der Position, in die der Handel involviert war, unmittelbar nachdem die Position eröffnet wurde?
Wählen Sie die Position mit der Funktion PositionSelect() aus und ermitteln Sie ihre Kennung mit der Funktion PositionGetInteger() und der mql5-Kennung - POSITION_IDENTIFIER.
Beispiel aus der Hilfe:
//+------------------------------------------------------------------+ //| Funktion Handel| //+------------------------------------------------------------------+ void OnTrade() { //--- prüfen, ob die Position verfügbar ist und den Zeitpunkt ihrer Änderung ausgeben if(PositionSelect(_Symbol)) { //--- Ermitteln der Positionskennung für die weitere Arbeit mit ihr ulong position_ID=PositionGetInteger(POSITION_IDENTIFIER); Print(_Symbol," postion #",position_ID); //--- liefert die Zeit der Positionsbildung in Millisekunden seit dem 01.01.1970 long create_time_msc=PositionGetInteger(POSITION_TIME_MSC); PrintFormat("Position #%d POSITION_TIME_MSC = %i64 milliseconds => %s",position_ID, create_time_msc,TimeToString(create_time_msc/1000)); //--- Ermitteln des Zeitpunkts der letzten Positionsänderung in Sekunden seit dem 01.01.1970 long update_time_sec=PositionGetInteger(POSITION_TIME_UPDATE); PrintFormat("Position #%d POSITION_TIME_UPDATE = %i64 seconds => %s", position_ID,update_time_sec,TimeToString(update_time_sec)); //--- liefert die Zeit der letzten Positionsänderung in Millisekunden seit dem 01.01.1970 long update_time_msc=PositionGetInteger(POSITION_TIME_UPDATE_MSC); PrintFormat("Position #%d POSITION_TIME_UPDATE_MSC = %i64 milliseconds => %s", position_ID,update_time_msc,TimeToString(update_time_msc/1000)); } //--- }
Wählen Sie eine Position mit der Funktion PositionSelect() und ermitteln Sie ihre Kennung mit der Funktion PositionGetInteger() und der mql5-Kennung - POSITION_IDENTIFIER.
Beispiel aus der Hilfe:
Danke, tol64! Im Prinzip haben Sie Recht.
Und ich entschuldige mich, dass die erste Frage kurz war... obwohl ich einen Verweis auf den Positionsbezeichner gegeben habe .
Das Problem ist wie folgt. Es ist notwendig, nachdem eine Position eröffnet wurde, diese Eröffnung in der Historie der Transaktionen mit Hilfe der Klasse CDealInfo mit der Methode ::PositionId() zu erfassen. Und zwar möglichst mit dem kleinsten zeitlichen Abstand zwischen dem Moment der Eröffnung und dem Moment, in dem ein Geschäft vom Typ DEAL_ENTRY_IN oder DEAL_ENTRY_INOUT in der Historie erscheint .
Vielen Dank, tol64! Im Prinzip liegt die Wahrheit bei Ihnen.
Und ich entschuldige mich für die Kürze der ersten Frage... trotz der Tatsache, dass ich einen Link zum Positionsnachweis angegeben habe .
Das Problem ist wie folgt. Nachdem eine Position eröffnet wurde, ist es notwendig, diese Eröffnung in der Transaktionshistorie mit Hilfe der Klasse CDealInfo mit der Methode ::PositionId() zu erfassen. Und zwar möglichst mit dem kleinsten zeitlichen Abstand zwischen dem Moment der Eröffnung und dem Moment, in dem ein Geschäft vom Typ DEAL_ENTRY_IN oder DEAL_ENTRY_INOUT in der Historieerscheint .
Meiner Meinung nach ist die Verfolgung des Ereignisses in OnTrade(), wie im obigen Beispiel, dafür gut geeignet. Aber ich würde denken, dass plötzlich eine Position nicht durch ein Handelsereignis ausgewählt werden kann, und die nächste wird nicht bald sein. Dann muss man die Umgebung per Timer verfolgen. Sogar Millisekunden können jetzt eingestellt werden.
Nun, oder anstatt die offene Position zu verfolgen, scannen Sie die Historie der Trades (Anzahl der Trades). Wir erinnern uns an den vorherigen und vergleichen ihn mit dem aktuellen. Sie können dies auch im Timer tun. Es gibt eine Vielzahl von Varianten. Es hängt alles von der spezifischen Aufgabe ab.
Anatoly, ich bin hier auf ein Problem gestoßen. Bitte teilen Sie Ihre Erfahrungen. Entweder gibt es einen Fehler bei der Arbeit mit Funktionen, oder ich mache etwas "falsch". Aber ich denke, ich habe alles richtig gemacht....
Ich habe eine Frage zu Funktionsvarianten, bei denen die zweite Variante nicht "funktioniert".
Zum Beispiel:
1)
double HistoryOrderGetDouble( ulong ticket_number, // ticket ENUM_ORDER_PROPERTY_DOUBLE property_id // Kennung der Eigenschaft );
2)
bool HistoryOrderGetDouble( ulong ticket_number, // ticket ENUM_ORDER_PROPERTY_DOUBLE property_id, // Kennung der Eigenschaft double& double_var // hier nehmen wir den Wert der Eigenschaft );
Ich habe den Quellcode beigefügt.
Anatoly, ich bin hier auf ein Problem gestoßen. Bitte teilen Sie Ihre Erfahrungen. Entweder gibt es einen Fehler bei der Arbeit mit Funktionen, oder ich mache etwas "falsch". Aber ich denke, ich habe alles richtig gemacht....
Die Frage bezieht sich auf Funktionsvarianten, bei denen die zweite nicht "funktioniert".
...
Was sehen Sie im Protokoll? Ich sehe keine Probleme, wenn ich das Skript ausführe.
Ich sehe, dass es bei den Standardeinstellungen des Skripts einen Eintrag wie "Failure to return HistoryOrderGetDouble() function" gibt.
D. h. die boolesche Version der Funktion erhält den Eigenschaftswert nicht.
Ich sehe, dass es bei den Standard-Skript-Einstellungen einen Eintrag wie "Failure to return HistoryOrderGetDouble() function" gibt.
Das heißt, die boolesche Version der Funktion erhält den Eigenschaftswert nicht.
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel MQL5 Cookbook: Die History der Abschlüsse und Funktions-Library zum Erhalt von Position-Eigenschaften :
Eine gute Gelegenheit, die in den vorangegangenen Beiträgen zu Position-Eigenschaften beschriebenen Informationen nochmals kurz zusammenzufassen. In diesem Beitrag werden wir einige zusätzliche Funktionen erzeugen, um die Eigenschaften zu erhalten, die man nur nach Zugriff auf die History der Abschlüsse abrufen kann. Darüber hinaus lernen wir Datenstrukturen kennen, mit deren Hilfe wir auf Position- und Symboleigenschaften auf weitaus bequemere Weise zugreifen können.
Wie in den vorangegangenen Beiträgen gezeigt, können Sie mit Standard-Identifikatoren nur den aktuellen Position-Kurs (POSITION_PRICE_OPEN) sowie den aktuellen Kurs eines Symbols (POSITION_PRICE_CURRENT) für die die Position eröffnet ist, erhalten.
Doch in einigen Handelssystemen müssen wir auch den Abstand kennen, der vom Kurs beim ersten Eintrittspunkt abgedeckt wird, sowie auch den Kurs des letzten Abschlusses. Diese Informationen sind alle in der History der Abschlüsse/Order im Konto vorhanden. Unten steht eine Liste der Abschlüsse im Zusammenhang mit der obigen Abbildung:
Abb. 3 Die History der Abschlüsse im Konto.
Autor: Anatoli Kazharski