偉大で恐ろしいMT4の永遠(または移行の戦略方法) - ページ 15

 
fxsaber:

いいえ、取引活動の最後の記録は2番目のログにあります。

そして、これは優先順位の点でも正しいのです。

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

ここでは、プリントなしのオプションに戻しましたが、ここでも実行後にポジションが1つ残っています。トレードが 実行された後、何らかのポーズをとる必要があることがわかりました。男、なんという松葉杖。

 
Ihor Herasko:

さて、誰がアップデートするのでしょうか?))

しかし、オープンポジションがある場合、スクリプトはそれを閉じ、他の何もしません。

スナップショット2

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

また、ポジションを開こうとすると、スクリプトは即座にそれを閉じます。

 
fxsaber:

はIsSynchronized()を書くようにした。コードがちょっと重いんです。 どのような形で掲載するかはまだ決めて いません。

どのように機能するのですか?見つかったようで見つからなかったような?解決策の要点や原理は何ですか?

 
SanAlex:

しかし、オープンポジションがあると、スクリプトはそれをクローズし、それ以外のことは何もしません。

すべてのサーバーで2ポジションの開放が再現されるわけではありません。あなたの場合は、3面(片面-2ポジション、もう片面-1ポジション)です。

 
Ihor Herasko:

そして、配列的にもそれくらいがちょうどいい。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

MT4フォーエバー大全(あるいはマイグレーション戦略の選び方)

イホール・ヘラスコ, 2021.05.05 09:35

しかも、注文の仕方もここに書いてある。

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

ハイライトされた線は、シーケンスを確認するものです。

PositionsTotal= 1 - クローズするためのオーダーを送信します。

  • すると、PositionsTotal = 2となり、ステップ1からのオーダーがクローズ される。
  • スクリプトの実行が完了した後に終了します。Print-cacheが少し歪んでいる。

     
    Dmitry Fedoseev:

    どうしてですか?見つかったようで、なかったような?

    まだ投稿できていません。24時間以内に掲載します。

    ソリューションの本質や原理は何なのか?

    取引履歴と現在の取引環境との対応関係を分析するものです。この場合、スローはありません。

    また、Result.orderをチェックします。

    その結果、IsSync() が false を返す - ターミナルの取引環境が曲がっている、それ以外は通常通り進められる、という使い方ができるようになりました。

     
    MTの開発者は、伝統的に沈黙を守っている。保安官はインディアンの問題には興味がない。
     
    Ihor Herasko:

    プリントを追加しました。これで、予想通り2つのポジションが残りました。

    結果

    Add Trade.ResultRetcodeDescription()

    
    #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());
    }

    ResultDeal / ResultOrder / ResultCommentと Orderも。状態

    きっと、そこに答えがあるはずだ

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

    Add Trade.ResultRetcodeDescription()

    また、ResultDeal / ResultOrder / ResultCommentと Order。状態

    きっと、そこに答えがあるはずだ

    状態

    完了しました。

    #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());
    }

    結果

    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:

    Add Trade.ResultRetcodeDescription()

    また、ResultDeal / ResultOrder / ResultCommentと Order。状態

    きっと、そこに答えがあるはずです。

    状態

    ポジションを開くために成行注文を出す条件は、PositionsTotal == OrdersTotal == 0なので、これは絶対にありえません。

    理由: