Diskussion zum Artikel "Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil X): Kompatibilität mit MQL4" - Seite 4

 
Artyom Trishkin:

Nein. Lesen Sie einfach die Artikel

Tut mir leid, aber ich kenne nicht so viele Buchstaben. )))

 
Alexey Viktorov:

Und das ist passiert:

Während ich diesen Code in der Demo ausführte, wurde eine Limit-Order gesetzt und gelöscht.

Und plötzlich, während des nächsten Mockings, wurde eine Position geändert, eine Position wurde geöffnet und eine Position wurde geschlossen. Aber woher kam die Aufzeichnung des Löschens einer längst gelöschten Order?

Haben Sie die Bibliothek durch die Dateien ersetzt, die ich Ihnen gegeben habe? Die Bibliothek in diesem Artikel ist noch nicht fertig - sie hat diesen Fehler - wenn zwei Ereignisse die gleichen Kriterien für MQL4 haben. Im elften Artikel wurde die Portierung der aktuellen Funktionalität der Bibliothek auf MQL4 abgeschlossen. Und die Version aus diesem Artikel hat diesen Fehler, und sein Vorhandensein wird indirekt durch die letzten Worte in dem Artikel angezeigt:

Was kommt als Nächstes?

Im nächsten Artikel werden wir die Positionsschlussverfolgung vornehmen und die Fehler beheben, die bei der aktuellen Implementierung der Ereignisverfolgung für MQL4 auftreten können - denn die Installation und Löschung von Aufträgen wird durch den Code für MQL5 verfolgt, und es kann einige Nuancen geben, die bei der Arbeit unter MQL4 berücksichtigt werden müssen.
Wenn Sie die Bibliotheksdateien ersetzt haben, aber der Fehler immer noch auftritt, müssen Sie die Situation erfassen, wenn sie auftritt - die Abfolge der Aktionen, die zu dem Fehler führen, und ich werde sie beheben.
 
Artyom Trishkin:

Haben Sie die Bibliothek mit den Dateien ersetzt, die ich Ihnen gegeben habe? Die Bibliothek in diesem Artikel ist noch nicht fertig - es hat diesen Fehler - wenn zwei Ereignisse die gleichen Kriterien für MQL4 haben. Im elften Artikel wurde die Portierung der aktuellen Funktionalität der Bibliothek auf MQL4 abgeschlossen. Aber die Version aus diesem Artikel hat diesen Fehler, und sein Vorhandensein wird indirekt durch die letzten Worte in dem Artikel angezeigt:

Was kommt als Nächstes?

Im nächsten Artikel werden wir die Verfolgung der Positionsschließung vornehmen und die Fehler beheben, die bei der aktuellen Implementierung der Ereignisverfolgung für MQL4 auftreten können - denn die Installation und Löschung von Aufträgen wird durch den Code für MQL5 verfolgt, und es kann einige Nuancen geben, die bei der Arbeit unter MQL4 berücksichtigt werden müssen.
Wenn Sie die Bibliotheksdateien ersetzt haben, der Fehler aber immer noch auftritt, müssen Sie die Situation festhalten, wenn er auftritt - die Abfolge der Aktionen, die zu dem Fehler führen, und ich werde ihn beheben.

Ja, das habe ich getan. Ich habe die Abfolge bereits beschrieben

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

Diskussion des Artikels "Bibliothek zur einfachen und schnellen Erstellung von Programmen für MetaTrader (Teil X): Kompatibilität mit MQL4 - Ereignisse der Positionseröffnung und der Aktivierung von Pending Orders"

Alexey Viktorov, 2019.05.27 17:59

Und hier ist so ein unverständliches Ding passiert:

Während ich diesen Code in der Demo ausgeführt habe, wurde eine Limit-Order gesetzt und gelöscht

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

Und plötzlich wurde beim nächsten Mocking eine Position geändert, eine geöffnet und eine geschlossen. Aber woher kommt die Aufzeichnung der Löschung einer längst gelöschten Order?

2019.05.27 18:34:11.903 00 EURUSD,H1: OnChartEvent: id=1002, event=TRADE_EVENT_PENDING_ORDER_REMOVED, lparam=443342388, dparam=1.11835, sparam=EURUSD
2019.05.27 18:34:11.903 00 EURUSD,H1: OnChartEvent: id=1024, event=TRADE_EVENT_POSITION_CLOSED, lparam=443417294, dparam=1.11933, sparam=EURUSD
2019.05.27 18:34:11.903 00 EURUSD,H1: - Отложенный ордер удалён: 2019.05.27 14:54:10.000 -
EURUSD Удалён 0.01 Buy Limit #443342388  по цене 1.11835
2019.05.27 18:34:11.903 00 EURUSD,H1: - Позиция закрыта: 2019.05.27 18:33:02.000 -
EURUSD Закрыт Sell #443417294  по цене 1.11912, профит -0.21 USD
2019.05.27 18:33:02.755 00 EURUSD,H1: OnChartEvent: id=1022, event=TRADE_EVENT_POSITION_OPENED, lparam=443417294, dparam=1.11912, sparam=EURUSD
2019.05.27 18:33:02.755 00 EURUSD,H1: - Позиция открыта: 2019.05.27 18:33:02.000 -
EURUSD Открыт 0.01 Sell #443417294 [0.01 Market order Sell #443417294]  по цене 1.11912
2019.05.27 18:29:21.913 00 EURUSD,H1: OnChartEvent: id=1050, event=TRADE_EVENT_MODIFY_POSITION_TAKE_PROFIT, lparam=443218277, dparam=1.12218, sparam=EURUSD
2019.05.27 18:29:21.913 00 EURUSD,H1: - Модифицирован TakeProfit позиции: 2019.05.27 18:27:45.000 -
EURUSD Buy #443218277:  модифицирован TakeProfit: [1.12240 --> 1.12218]

Um 15:01:14 Uhr löschte ich eine zuvor gesetzte Limit-Order.

Bis 18:29 Uhr war ich mit meinem eigenen Geschäft beschäftigt. Der Expert Advisor stand auf dem Chart.

Um 18:29:21 Uhr änderte ich die zuvor gesetzte Position.

Um 18:33:02 Uhr setzte ich Sell

Um 18:34:11 Uhr schloss ich diesen Verkauf.

Und in diesem Moment erhielt ich den zweiten Datensatz, dass das Limit, das um 15:01:14 gelöscht wurde, entfernt wurde.

 
Alexey Viktorov:

Ja, das habe ich. Ich habe die Abfolge bereits beschrieben, nicht wahr?

Das haben Sie:

Und so ist es passiert:

Während ich diesen Code in der Demo laufen ließ, wurde eine Limit-Order gesetzt und gelöscht.

Und plötzlich wurde beim nächsten Mocking eine Position geändert, eine Position geöffnet und eine Position geschlossen. Aber woher kommt die Aufzeichnung der Löschung einer längst gelöschten Order?

Und was ist die Reihenfolge dieser Aktionen?

  1. eine Limit-Order gesetzt
  2. eine Limit-Order gelöscht
  3. Position geändert (wann wurde sie eröffnet?)
  4. Position wird eröffnet
  5. die gleiche Position wird geschlossen
Zu welchem Zeitpunkt ist das falsche Ereignis eingetreten?
 
Artyom Trishkin:

Sie haben geschrieben:

Wie ist die Reihenfolge dieser Maßnahmen?

  1. eine Limit-Order setzen
  2. Limit-Order gelöscht
  3. Position geändert (wann wurde sie eröffnet?)
  4. Position wird eröffnet
  5. die gleiche Position wurde geschlossen
Zu welchem Zeitpunkt ist das falsche Ereignis eingetreten?

Ich habe die vorherige Nachricht vervollständigt.

 
Alexey Viktorov:

Ja, das habe ich. Ich habe den Ablauf bereits beschrieben, nicht wahr?


Ich kann diesen Fehler in keiner Reihenfolge erhalten.

Bitte beschreiben Sie die Sequenz, die zu diesem Fehler führt.

Am besten nicht im Protokoll - dort gibt es inzwischen eine Menge Debugging-Einträge, die den schnellen Überblick stören, sondern gleich hier in einer nummerierten Liste.

 
Alexey Viktorov:

Ich habe die vorherige Nachricht vervollständigt.

Um 15:01:14 Uhr habe ich die zuvor erteilte Limit-Order gelöscht.

Bis 18:29 Uhr habe ich meine eigenen Sachen gemacht. Der Expert Advisor stand auf dem Chart.

Um 18:29:21 Uhr änderte ich die zuvor gesetzte Position.

Um 18:33:02 Uhr setzte ich Sell

Um 18:34:11 Uhr schloss ich diesen Verkauf.

Und in diesem Moment erhielt ich einen zweiten Datensatz, dass das Limit, das um 15:01:14 gelöscht wurde, gelöscht wurde.

D.h., Sie müssen:

  1. eine Position eröffnen, eine gewisse Zeit warten,
  2. eine Limit-Order platzieren, eine gewisse Zeit warten,
  3. die Limit-Order löschen,
  4. die Position ändern,
  5. die Position öffnen und die Position schließen
Richtig?
 
Artyom Trishkin:

Um 15:01:14 Uhr löschte ich die zuvor erteilte Limit-Order.

Bis 18:29 Uhr habe ich meine eigenen Sachen gemacht. Der Expert Advisor stand auf dem Chart.

Um 18:29:21 Uhr änderte ich die zuvor gesetzte Position.

Um 18:33:02 Uhr setzte ich Sell

Um 18:34:11 Uhr schloss ich diesen Verkauf.

Und in diesem Moment erhielt ich den zweiten Datensatz, dass das Limit, das um 15:01:14 gelöscht wurde, entfernt wurde.

D.h., ich muss es tun:

  1. eine Position eröffnen, eine gewisse Zeit warten,
  2. eine Limit-Order platzieren, eine gewisse Zeit warten,
  3. die Limit-Order entfernen,
  4. die Position ändern,
  5. die Position öffnen und die Position schließen
Richtig?

Nein, achten Sie auf Ihre Hände.

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

Das Limit wurde um 14:54:10 Uhr gesetzt und um 15:01:14 Uhr aufgehoben.

Dann eine lange Sendepause. Alles wird still.

Dann mehrere Sätze hintereinander, bei 18:. Auflistung nur der Minuten 29, 33 und 34. Bei Minute 34 kommt das Ereignis, das sich vor dreieinhalb Stunden ereignet hat, durch.

Hier ist die Liste der Positionen.

443217459 2019.05.27 08:48:18 buy 0.01 eurusd 1.12109 0.00000 0.00000   1.11933 0.00 0.00 0.00 -1.76 
443218277 2019.05.27 08:51:53 buy 0.01 eurusd 1.12112 0.00000 1.12218   1.11933 0.00 0.00 0.00 -1.79 
443335401 2019.05.27 14:31:07 buy 0.01 eurusd 1.11965 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.32 
443336857 2019.05.27 14:35:47 buy 0.01 eurusd 1.11970 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.37 
443336959 2019.05.27 14:36:09 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
443337190 2019.05.27 14:36:53 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
Sie sind alle morgens und mittags geöffnet. Um 18 Minuten war nur Sell offen und wurde fast sofort wieder geschlossen.
 
Alexey Viktorov:

Nein, pass auf deine Hände auf

Limit gesetzt um 14:54:10 und gelöscht um 15:01:14.

Dann eine lange Sendepause. Alles wird still.

Dann mehrere Sätze hintereinander, bei 18:. Auflistung nur der Minuten 29, 33 und 34. Jetzt, bei 34, dieses Ereignis, das sich vor dreieinhalb Stunden ereignet hat.

Hier ist eine Liste von Positionen.

Sie sind alle morgens und mittags geöffnet. Um 18 Minuten war nur Sell offen und wurde fast sofort wieder geschlossen.

Na also, es geht doch:

Um 15:01:14 Uhr habe ich eine zuvor erteilte Limit-Order gelöscht .

Bis 18:29 Uhr war ich mit meinem eigenen Geschäft beschäftigt. Der Expert Advisor stand auf dem Chart.

Um 18:29:21 Uhr änderte ich die zuvor gesetzte Position.

Um 18:33:02 Uhr setzte ich Sell

Um 18:34:11 habe ich diesen Sell geschlossen.

Zuvor - ist es VOR dem Setzen der Limit-Order? Oder danach? Als sie eröffnet wurde? "Früher" ist nicht eindeutig. Wahrscheinlich hat der Zeitpunkt aller Aktionen eine Bedeutung - schließlich wird alles in der Liste gespeichert. Irgendwo gibt es gleiche Bedingungen, da die Entfernung der alten Limit-Order im Moment des Schließens der Position neu bestimmt wird - die Position wurde geschlossen, wir haben die Bedingungen geprüft (das ist direkt im Code beschrieben) und anhand dieser Bedingungen die Art des Ereignisses bestimmt. Und dann wird die Liste nach dem Typ einer bestimmten Order im Ereignis sortiert und das Ereignis an das Programm gesendet - es gibt also eine Überschneidung der Bedingungen in MQL4, so dass sie sich für die Bibliothek als gleich herausstellen. Das habe ich allerdings im 11. Artikel, der noch in der Testphase ist, entfernt.

 
Artyom Trishkin:

Nun, hier sind Sie und schreiben:

Um 15:01:14 löschte ich eine zuvor erteilte Limit-Order.

Bis 18:29 Uhr habe ich mein eigenes Ding gemacht. Der Expert Advisor stand auf dem Chart.

Um 18:29:21 Uhr änderte ich die zuvor gesetzte Position.

Um 18:33:02 Uhr setzte ich Sell

Um 18:34:11 Uhr habe ich diese Sell-Order geschlossen.

Zuvor - ist das BEVOR die Limit-Order gesetzt wurde? Oder danach? Als sie geöffnet wurde? "Früher" ist nicht eindeutig. Wahrscheinlich hat der Zeitpunkt aller Aktionen eine Bedeutung - schließlich wird alles in der Liste gespeichert. Irgendwo gibt es gleiche Bedingungen, da die Entfernung der alten Limit-Order im Moment des Schließens der Position neu bestimmt wird - die Position wurde geschlossen, wir haben die Bedingungen geprüft (das ist direkt im Code beschrieben) und anhand dieser Bedingungen die Art des Ereignisses bestimmt. Und dann wird die Liste nach dem Typ einer bestimmten Order im Ereignis sortiert und das Ereignis an das Programm gesendet - es gibt also eine Überschneidung der Bedingungen in MQL4, so dass sie sich für die Bibliothek als gleich herausstellen. Das habe ich allerdings im 11. Artikel, der noch in der Testphase ist, entfernt.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Diskussion über den Artikel "Bibliothek zur einfachen und schnellen Erstellung von Programmen für MetaTrader (Teil X): Kompatibilität mit MQL4 - Ereignisse der Positionseröffnung und Aktivierung von Pending Orders"

Alexey Viktorov, 2019.05.27 18:50

Nein, pass gut auf deine Hände auf

443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 

Begrenzer um 14:54:10 gesetzt und um 15:01:14 gelöscht

Dann eine lange Sendepause. Alles wird still.

Dann mehrere Sätze hintereinander, bei 18:. Auflistung nur der Minuten 29, 33 und 34. Jetzt, bei 34, dieses Ereignis, das sich vor dreieinhalb Stunden ereignet hat.

Hier ist die Liste der Positionen.

443217459 2019.05.27 08:48:18 buy 0.01 eurusd 1.12109 0.00000 0.00000   1.11933 0.00 0.00 0.00 -1.76 
443218277 2019.05.27 08:51:53 buy 0.01 eurusd 1.12112 0.00000 1.12218   1.11933 0.00 0.00 0.00 -1.79 
443335401 2019.05.27 14:31:07 buy 0.01 eurusd 1.11965 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.32 
443336857 2019.05.27 14:35:47 buy 0.01 eurusd 1.11970 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.37 
443336959 2019.05.27 14:36:09 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
443337190 2019.05.27 14:36:53 buy 0.01 eurusd 1.11967 0.00000 0.00000   1.11933 0.00 0.00 0.00 -0.34 
Sie sind alle morgens und mittags geöffnet. Um 18 Minuten war nur eine Position offen, nämlich Verkaufen, und wurde fast sofort wieder geschlossen.

Geändert wurde nur eine, die hervorgehobene Position. Daran gibt es keinen Zweifel. Sie wurde am Morgen platziert. Ich änderte sie mehrmals. Es war mir egal, welche ich änderte. Bei dieser hatte ich bereits einen Takeout gesetzt. Das war es, was ich tun wollte.

Hier sind alle Limiter und der letzte Sell.

443340041 2019.05.27 14:46:32 buy limit 0.01 eurusd 1.11815 0.00000 0.00000 2019.05.27 14:46:55 1.11974 cancelled 
443340283 2019.05.27 14:47:15 buy limit 0.01 eurusd 1.11796 0.00000 0.00000 2019.05.27 14:47:27 1.11974 cancelled 
443340764 2019.05.27 14:48:42 buy limit 0.01 eurusd 1.11830 0.00000 0.00000 2019.05.27 14:52:51 1.11962 cancelled 
443340819 2019.05.27 14:48:54 buy limit 0.01 eurusd 1.11761 0.00000 0.00000 2019.05.27 14:50:22 1.11977 cancelled 
443340874 2019.05.27 14:49:06 buy limit 0.01 eurusd 1.11694 0.00000 0.00000 2019.05.27 14:52:37 1.11963 cancelled 
443341012 2019.05.27 14:49:32 buy limit 0.01 eurusd 1.11657 0.00000 0.00000 2019.05.27 14:51:22 1.11973 cancelled 
443342301 2019.05.27 14:53:55 sell stop 0.01 eurusd 1.11764 0.00000 0.00000 2019.05.27 15:01:03 1.11956 cancelled 
443342388 2019.05.27 14:54:10 buy limit 0.01 eurusd 1.11835 0.00000 0.00000 2019.05.27 15:01:14 1.11972 cancelled 
443417294 2019.05.27 18:33:02 sell 0.01 eurusd 1.11912 0.00000 0.00000 2019.05.27 18:34:11 1.11933 0.00 0.00 0.00 -0.21 

Die gelöschten Begrenzer und der Verkauf sind hervorgehoben. Das Löschungsereignis muss irgendwo übrig geblieben sein. Aber warum ist es nicht bei der Eröffnung dieses Sell "aufgewacht", sondern erst bei der Schließung des Sell?