Nein, die letzte Aufzeichnung der Handelsaktivität befindet sich im zweiten Protokoll.
Und das ist von der Priorität her richtig:
2021.05.0510:32:35.896 Trades '160122203': market buy 0.01 EURUSD placed for execution
2021.05.0510:32:35.931 Trades '160122203': order #2249869869 buy 0.01 / 0.01 EURUSD at market done in81.962 ms
2021.05.0510:32:35.931 Trades '160122203': deal #2240398230 buy 0.01 EURUSD at 1.19876 done (based on order #2249869869)
2021.05.0510:32:35.931 Trades '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.198762021.05.0510:32:35.978 Trades '160122203': accepted market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.198762021.05.0510:32:35.978 Trades '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876 placed for execution
2021.05.0510:32:36.009 Trades '160122203': order #2249869870 sell 0.01 / 0.01 EURUSD at market done in77.026 ms
2021.05.0510:32:36.009 Trades '160122203': deal #2240398231 sell 0.01 EURUSD at 1.19876 done (based on order #2249869870)
2021.05.0510:32:36.009 Scripts script Test (EURUSD,M1) removed
Hier habe ich auf die Option ohne Ausdrucke zurückgegriffen und auch hier ist nach der Ausführung eine Position übrig. Es stellt sich heraus, dass Sie eine Art Pause einlegen müssen, nachdem die Geschäfte ausgeführt wurden. Mann, was für eine Krücke.
geschafft, IsSynchronized() zu schreiben. Der Code ist ein wenig schwerfällig. Ich habe noch nicht entschieden, in welcher Form ich es veröffentlichen werde.
Wie funktioniert das? Es ist irgendwie gefunden, aber irgendwie nicht vorhanden? Was ist der Kern oder das Prinzip der Lösung?
Aber wenn eine Position offen ist, schließt das Skript sie und tut nichts weiter.
Nicht alle Server können die Öffnung von zwei Positionen reproduzieren. In Ihrem Fall ist es die dritte Seite (eine Seite - zwei Positionen, die andere - eine Position).
Im Ergebnis sieht die Verwendung folgendermaßen aus: IsSync() liefert false - die Handelsumgebung im Terminal ist gestört, ansonsten können wir wie gewohnt fortfahren.
Drucke hinzugefügt. Nun bleiben erwartungsgemäß zwei Positionen übrig:
Ergebnis:
Trade.ResultRetcodeDescription() hinzufügen
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.Print(Trade.ResultRetcodeDescription());printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
#define PRINT(A) Print(#A + " = " + (string)(A))
#include <Trade\Trade.mqh>
voidOnStart()
{
CTrade Trade;
while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.if (PositionsTotal() == 1)
{
Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.Print("Закрытие, т. к. PositionsTotal() равно 1");
}
elseif (!OrdersTotal())
{
printf("Перед открытием. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
Trade.Buy(0.01); // Если нет позиции и ордера - открываем позицию.
PRINT(Trade.ResultRetcodeDescription());
PRINT(Trade.ResultDeal());
PRINT(Trade.ResultOrder());
PRINT(Trade.ResultComment());
printf("После открытия. PositionsTotal: %d, OrdersTotal: %d", PositionsTotal(), OrdersTotal());
}
Print("Выход. PostionsTotal: ", PositionsTotal());
}
Ergebnis:
2021.05.0511:36:14.566 Test (EURUSD,M1) Перед открытием. PositionsTotal: 0, OrdersTotal: 02021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultRetcodeDescription() = done at 0.000002021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultDeal() = 02021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultOrder() = 22498746452021.05.0511:36:14.646 Test (EURUSD,M1) Trade.ResultComment() = Request executed
2021.05.0511:36:14.646 Test (EURUSD,M1) После открытия. PositionsTotal: 2, OrdersTotal: 12021.05.0511:36:14.646 Test (EURUSD,M1) Выход. PostionsTotal: 2
Dies ist definitiv nicht der Fall, da die Bedingung für das Senden einer Marktorder zur Eröffnung einer Position PositionsTotal == OrdersTotal == 0 ist.
Nein, die letzte Aufzeichnung der Handelsaktivität befindet sich im zweiten Protokoll.
Und das ist von der Priorität her richtig:
Hier habe ich auf die Option ohne Ausdrucke zurückgegriffen und auch hier ist nach der Ausführung eine Position übrig. Es stellt sich heraus, dass Sie eine Art Pause einlegen müssen, nachdem die Geschäfte ausgeführt wurden. Mann, was für eine Krücke.
Und wer wird sie aktualisieren? ))
aber wenn eine Position offen ist, schließt das Skript sie und tut nichts anderes
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
Auch wenn ich versuche, eine Position zu öffnen, wird sie vom Skript sofort wieder geschlossen.
geschafft, IsSynchronized() zu schreiben. Der Code ist ein wenig schwerfällig. Ich habe noch nicht entschieden, in welcher Form ich es veröffentlichen werde.
Wie funktioniert das? Es ist irgendwie gefunden, aber irgendwie nicht vorhanden? Was ist der Kern oder das Prinzip der Lösung?
Aber wenn eine Position offen ist, schließt das Skript sie und tut nichts weiter.
Nicht alle Server können die Öffnung von zwei Positionen reproduzieren. In Ihrem Fall ist es die dritte Seite (eine Seite - zwei Positionen, die andere - eine Position).
Und das ist in etwa die richtige Reihenfolge:
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
The Great and Powerful MT4 Forever (oder wie man eine Migrationsstrategie wählt)
Ihor Herasko, 2021.05.05 09:35
Und das alles ist hier zu bestellen:
Die hervorgehobenen Zeilen bestätigen die Reihenfolge.
PositionsTotal = 1 - sendet einen Auftrag zum Schließen.
Das Schließen erfolgt, nachdem die Ausführung des Skripts abgeschlossen ist. Der Druck-Cache ist ein wenig verzerrt.
Wie das? Es ist irgendwie gefunden, aber irgendwie nicht da?
Ich bin noch nicht dazu gekommen, sie zu veröffentlichen. Ich werde sie innerhalb von 24 Stunden veröffentlichen.
Was ist die Essenz oder das Prinzip der Lösung?
Sie analysiert die Übereinstimmung der Handelsgeschichte mit dem aktuellen Handelsumfeld. In diesem Fall gibt es keine Verzögerungen.
Sie prüft auch Result.order.
Im Ergebnis sieht die Verwendung folgendermaßen aus: IsSync() liefert false - die Handelsumgebung im Terminal ist gestört, ansonsten können wir wie gewohnt fortfahren.
Drucke hinzugefügt. Nun bleiben erwartungsgemäß zwei Positionen übrig:
Ergebnis:
Trade.ResultRetcodeDescription() hinzufügen
Auch ResultDeal / ResultOrder / ResultComment und Order.Staat
Sicherlich wird es dort eine Antwort geben
StaatTrade.ResultRetcodeDescription() hinzufügen
Und auch ResultDeal / ResultOrder / ResultComment und Order.Staat
Sicherlich wird es dort eine Antwort geben
StaatErledigt:
Ergebnis:
Trade.ResultRetcodeDescription() hinzufügen
Und auch ResultDeal / ResultOrder / ResultComment und Order.Staat
Sicherlich wird es dort eine Antwort geben.
StaatDies ist definitiv nicht der Fall, da die Bedingung für das Senden einer Marktorder zur Eröffnung einer Position PositionsTotal == OrdersTotal == 0 ist.