Der große und schreckliche MT4 für immer (oder wie man einen Übergang strategisch plant) - Seite 15

 
fxsaber:

Nein, die letzte Aufzeichnung der Handelsaktivität befindet sich im zweiten Protokoll.

Und das ist von der Priorität her richtig:

2021.05.05 10:32:35.896 Trades  '160122203': market buy 0.01 EURUSD placed for execution
2021.05.05 10:32:35.931 Trades  '160122203': order #2249869869 buy 0.01 / 0.01 EURUSD at market done in 81.962 ms
2021.05.05 10:32:35.931 Trades  '160122203': deal #2240398230 buy 0.01 EURUSD at 1.19876 done (based on order #2249869869)
2021.05.05 10:32:35.931 Trades  '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876
2021.05.05 10:32:35.978 Trades  '160122203': accepted market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876
2021.05.05 10:32:35.978 Trades  '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876 placed for execution
2021.05.05 10:32:36.009 Trades  '160122203': order #2249869870 sell 0.01 / 0.01 EURUSD at market done in 77.026 ms
2021.05.05 10:32:36.009 Trades  '160122203': deal #2240398231 sell 0.01 EURUSD at 1.19876 done (based on order #2249869870)
2021.05.05 10: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.

 
Ihor Herasko:

Und wer wird sie aktualisieren? ))

aber wenn eine Position offen ist, schließt das Skript sie und tut nichts anderes

Schnappschuss2

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Auch wenn ich versuche, eine Position zu öffnen, wird sie vom Skript sofort wieder geschlossen.

 
fxsaber:

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?

 
SanAlex:

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).

 
Ihor Herasko:

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:

2021.05.05 10:32:35.896 Trades  '160122203': market buy 0.01 EURUSD placed for execution
2021.05.05 10:32:35.931 Trades  '160122203': order #2249869869 buy 0.01 / 0.01 EURUSD at market done in 81.962 ms
2021.05.05 10:32:35.931 Trades  '160122203': deal #2240398230 buy 0.01 EURUSD at 1.19876 done (based on order #2249869869)
2021.05.05 10:32:35.931 Trades  '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876
2021.05.05 10:32:35.978 Trades  '160122203': accepted market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876
2021.05.05 10:32:35.978 Trades  '160122203': market sell 0.01 EURUSD, close #2249869868 buy 0.01 EURUSD 1.19876 placed for execution
2021.05.05 10:32:36.009 Trades  '160122203': order #2249869870 sell 0.01 / 0.01 EURUSD at market done in 77.026 ms
2021.05.05 10:32:36.009 Trades  '160122203': deal #2240398231 sell 0.01 EURUSD at 1.19876 done (based on order #2249869870)
2021.05.05 10:32:36.009 Scripts script Test (EURUSD,M1) removed

Die hervorgehobenen Zeilen bestätigen die Reihenfolge.

PositionsTotal = 1 - sendet einen Auftrag zum Schließen.

  • Dann ist PositionsTotal = 2 und der Auftrag aus Schritt 1 ist abgeschlossen.
  • Das Schließen erfolgt, nachdem die Ausführung des Skripts abgeschlossen ist. Der Druck-Cache ist ein wenig verzerrt.

     
    Dmitry Fedoseev:

    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.

     
    Die MT-Entwickler sind traditionell schweigsam. Der Sheriff interessiert sich nicht für die Probleme der Indianer.
     
    Ihor Herasko:

    Drucke hinzugefügt. Nun bleiben erwartungsgemäß zwei Positionen übrig:

    Ergebnis:

    Trade.ResultRetcodeDescription() hinzufügen

    
    #include <Trade\Trade.mqh>
    
    void OnStart()
    {
      CTrade Trade;
      
      while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.
        if (PositionsTotal() == 1)
        {
          Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.
          Print("Закрытие, т. к. PositionsTotal() равно 1");
        }
        else if (!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());
    }

    Auch ResultDeal / ResultOrder / ResultComment und Order.Staat

    Sicherlich wird es dort eine Antwort geben

    Staat
    Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / ResultOrder
    Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / ResultOrder
    • www.mql5.com
    ResultOrder - CTrade - Торговые классы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
     
    Rashid Umarov:

    Trade.ResultRetcodeDescription() hinzufügen

    Und auch ResultDeal / ResultOrder / ResultComment und Order.Staat

    Sicherlich wird es dort eine Antwort geben

    Staat

    Erledigt:

    #define  PRINT(A) Print(#A + " = " + (string)(A))
    
    #include <Trade\Trade.mqh>
    
    void OnStart()
    {
      CTrade Trade;
      
      while (!IsStopped() && (PositionsTotal() <= 1)) // Закончим, когда появится более одной позиции.
        if (PositionsTotal() == 1)
        {
          Trade.PositionClose(PositionGetTicket(0)); // Если есть позиция - закрываем.
          Print("Закрытие, т. к. PositionsTotal() равно 1");
        }
        else if (!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.05 11:36:14.566 Test (EURUSD,M1)        Перед открытием. PositionsTotal: 0, OrdersTotal: 0
    2021.05.05 11:36:14.646 Test (EURUSD,M1)        Trade.ResultRetcodeDescription() = done at 0.00000
    2021.05.05 11:36:14.646 Test (EURUSD,M1)        Trade.ResultDeal() = 0
    2021.05.05 11:36:14.646 Test (EURUSD,M1)        Trade.ResultOrder() = 2249874645
    2021.05.05 11:36:14.646 Test (EURUSD,M1)        Trade.ResultComment() = Request executed
    2021.05.05 11:36:14.646 Test (EURUSD,M1)        После открытия. PositionsTotal: 2, OrdersTotal: 1
    2021.05.05 11:36:14.646 Test (EURUSD,M1)        Выход. PostionsTotal: 2
    
     
    Rashid Umarov:

    Trade.ResultRetcodeDescription() hinzufügen

    Und auch ResultDeal / ResultOrder / ResultComment und Order.Staat

    Sicherlich wird es dort eine Antwort geben.

    Staat

    Dies ist definitiv nicht der Fall, da die Bedingung für das Senden einer Marktorder zur Eröffnung einer Position PositionsTotal == OrdersTotal == 0 ist.