伟大而可怕的MT4永远(或如何制定过渡策略) - 页 15

 
fxsaber:

不,交易活动的最后记录是在第二份日志中。

而这在优先权方面是正确的。

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

在这里,我又恢复了没有打印的选项,执行后又有一个位置。事实证明,你需要在交易 执行后保持某种停顿。老兄,真是个拐杖。

 
Ihor Herasko:

那么,谁来更新它呢?))

但当有一个未结头寸时,脚本将其关闭,不做任何其他事情。

快照2

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

另外,如果我试图打开一个仓位,脚本会立即关闭它。

 
fxsaber:

设法写入IsSynchronized()。这段代码有点重。我还没有决定以什么形式发布

它是如何工作的?它有点被发现,但又有点不存在?解决方案的要点或原则是什么?

 
SanAlex:

但是,当有一个未平仓的头寸时,脚本会关闭它,而不做其他事情。

并非所有的服务器都会再现两个位置的开放。在你的情况下,它是第三面(一面--两个位置,另一面--一个位置)。

 
Ihor Herasko:

而在排序方面,这也是差不多的。

关于交易、自动交易系统和交易策略测试的论坛

伟大而强大的MT4永远(或如何选择迁移策略)

Ihor Herasko, 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步的订单被关闭
  • 关闭是在脚本执行完成后进行的。打印缓存有点失真。

     
    Dmitry Fedoseev:

    怎么说呢?它有点被发现,但又有点不存在?

    我还没来得及贴出来呢。我将在24小时内发布。

    解决方案的本质或原则是什么?

    它分析了交易历史与当前交易环境的对应关系。在这种情况下,不存在慢速。

    它还检查Result.order。

    结果,使用情况如下:IsSync()返回错误 - 终端的交易环境是歪的,否则我们可以照常进行。

     
    MT开发商传统上是沉默的。治安官对印第安人的问题不感兴趣。
     
    Ihor Herasko:

    增加了印刷品。现在还剩下两个职位,正如预期的那样。

    结果。

    添加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:

    添加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:

    添加Trade.ResultRetcodeDescription()。

    还有ResultDeal / ResultOrder / ResultComment 和Order。国家

    当然,那里会有一个答案。

    国家

    这肯定不是事实,因为发送市价订单开仓的条件是PositionsTotal == OrdersTotal == 0。