위대하고 끔찍한 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 :

그러나 열린 위치가 있으면 스크립트는 닫고 다른 작업을 수행하지 않습니다.

모든 서버가 두 위치의 오프닝을 재생하는 것은 아닙니다. 귀하의 경우 선언 된 버그는 제 3 자 (한 쪽 - 두 위치, 두 번째 - 하나)에서 나타납니다.

 
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이고 p.1의 주문이 마감됩니다.
  • 스크립트 실행이 완료된 후 닫힙니다. 인쇄 캐시가 약간 왜곡됩니다.

     
    Dmitry Fedoseev :

    방법 것입니다? 마치 발견한 것 같지만 없는 것 같죠?

    손은 아직 뻗어 있지 않았습니다. 하루내로 포스팅하겠습니다.

    그리고 그 해결의 본질이나 원리는 무엇인가?

    현재 거래 환경에 대한 거래 내역의 대응에 대한 분석이 있습니다. 브레이크가 없습니다.

    Result.order도 확인합니다.

    결과적으로 사용법은 다음과 같습니다. IsSync()가 false를 반환했습니다. 터미널의 거래 환경이 비뚤어져 있습니다. 그렇지 않으면 평소와 같이 행동할 수 있습니다.

     
    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. 상태

    분명 답이 있을거야

    상태

    이것은 확실히 그렇지 않습니다, t. 포지션을 열기 위해 시장가 주문을 보내기 위한 조건은 PositionsTotal == OrdersTotal == 0입니다.