MT5와 속도 - 페이지 11

 
일단 내가 원시 지연 표시기 를 작성했습니다. 예를 들어 대규모 토렌트 다운로드를 완벽하게 보여줍니다.
Ping
Ping
  • www.mql5.com
Для торговли важным параметром является актуальность текущей цены. На него влияет множество факторов, самый популярный из которых - сетевой пинг между терминалом и торговым сервером. Но часто из виду упускается другой параметр: так называемый "внутренний пинг терминала" - дополнительный лаг котировок внутри самого терминала (платформы) . Даже...
 
fxsaber :

오해. MT에 플러그가 있는지 여부를 이해해야 합니다. 수십 초 동안 지연이 수정되었을 때 서버 로그를 분석했습니다. 모든 것이 서버에서 완벽합니다.

따라서 문제는 다른 데 있습니다.

나는 내가 과거 가격을 매우 자주 이겼다는 것을 알았다. 저것들. 실제로 터미널에서 심각한 지연. 그것을 식별하는 방법에 대한 질문이 제기되었습니다.

그래서 VPS를 구매했습니다. 그것이 완벽하게 맞는다는 것을 어떻게 이해합니까? 어떤 종류의 숫자가 있어야 합니다. 재전송은 신뢰할 수 없습니다. 자정 - 수십 퍼센트.


위협 아마도 트레이드 서버가 있는 동일한 물리적 시스템에 가상 시스템을 배포하는 것으로 판명될 것입니다. 그리고 거기에서 전투 터미널을 시작합니다. 아마도 플러그가 더 적을 것입니다.

콘솔에서 추적하거나 핑하거나 특별한 것 같습니다. 소프트웨어에서는 문제가 식별되지 않습니다.
어떻게 든 MT의 참여를 등록해야합니다. 이마로 치고 개발자에게 TERMINAL _RETRANSMISSION 에서 자체 카운터를 만들도록 요청해야합니다.

 
fxsaber :

오해. MT에 플러그가 있는지 여부를 이해해야 합니다. 수십 초 동안 지연이 수정되었을 때 서버 로그를 분석했습니다. 모든 것이 서버에서 완벽합니다.
따라서 문제는 다른 데 있습니다.
나는 내가 과거 가격을 아주 자주 이기는 것을 알았다. 저것들. 실제로 터미널에서 심각한 지연. 그것을 식별하는 방법에 대한 질문이 제기되었습니다.

"서버에서 모든 것이 완벽하다"는 것이 정확히 무엇을 의미하는지 어떻게 든 명확하지 않습니다.
1) 서버에 수정 요청이 오지 않았습니까, 아니면 모든 요청에 10초 이내에 오래된 가격이 있었습니까?
2) "현재" 가격과 "오래된" 가격의 차이는 몇 초입니까?
3) 누가 가격이 구식이라고 판단합니까? MT 서버 또는 제3자, 아마도 일종의 교환?


문제가 반복되면 Sysinternals의 Process Monitor(Network Activity)와 페어링된 Wireshark 를 사용하여 주문 수정 트래픽을 분석할 수 있습니다.

 
Sergey Dzyublik :

"서버에서 모든 것이 완벽하다"는 것이 정확히 무엇을 의미하는지 어떻게 든 명확하지 않습니다.
1) 서버에 수정 요청이 오지 않았습니까, 아니면 모든 요청에 10초 이내에 오래된 가격이 있었습니까?
2) "현재" 가격과 "오래된" 가격의 차이는 몇 초입니까?
3) 누가 가격이 구식이라고 판단합니까? MT 서버 또는 제3자, 아마도 일종의 교환?

서버에서 모든 요청은 밀리초 단위로 처리되었습니다. 오래된 가격은 관리자에게 확인이 필요합니다.

문제가 반복되면 Sysinternals의 Process Monitor(Network Activity)와 페어링된 Wireshark를 사용하여 주문 수정 트래픽을 분석할 수 있습니다.

이것에서 나는 완전한 0입니다.

 

HistorySelect 기능의 브레이크를 재현하는 것으로 나타났습니다.

  1. 비교적 큰 거래 내역이 있는 MetaQuotes-Demo 데모 계정에 로그인하십시오.
    1. 데모 계정에 작은 거래 내역이 있는 경우 자동 거래를 활성화하고 OrderSend-Test2.ex5 스크립트를 병렬로 실행합니다(응용 프로그램에서 소스 ).
  2. 두 개의 EURUSD 차트를 열고 아래의 각 EA에서 실행하십시오( 노란색 소스는 추가 변경 사항을 나타냄).

    거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

    MT5와 속도

    fxsaber , 2020.06.04 14:38

    그런 어드바이저-모니터링을 스케치했습니다.

     // Мониторинг длительных пиков выполнения важных функций для торговли.
    #include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh
    
    input int inCycle = 10 ;     // Циклов проверки в одном OnTick
    input int inAlertTime = 1 ; // Нижний порог в миллисекундах
    
    #define _B2(A) _B(A, AlertTime)
    
    void Check( const string Symb, const int AlertTime = 1 )
    {
       MqlTick Tick;
      
       if (_B2( SymbolInfoTick (Symb, Tick)))
      {
         MqlTick Ticks[];
        
        _B2( CopyTicks (Symb, Ticks, COPY_TICKS_ALL , 0 , 1 ));
        _B2( CopyTicks (Symb, Ticks, COPY_TICKS_ALL , Tick.time_msc));
        _B2( CopyTicksRange (Symb, Ticks, COPY_TICKS_ALL , Tick.time_msc));
    
         HistorySelect ( MathRand (), INT_MAX );
        _B2( HistorySelect (Tick.time, INT_MAX ));
        
        _B2( HistoryDealsTotal ());
        _B2( HistoryDealGetTicket ( 0 ));
        _B2( HistoryDealGetInteger ( 0 , DEAL_MAGIC ));
        _B2( HistoryDealGetDouble ( 0 , DEAL_PRICE ));
        _B2( HistoryDealSelect ( 0 ));
    
        _B2( HistoryOrdersTotal ());
        _B2( HistoryOrderGetTicket ( 0 ));
        _B2( HistoryOrderGetInteger ( 0 , ORDER_MAGIC ));
        _B2( HistoryOrderGetDouble ( 0 , ORDER_PRICE_CURRENT ));
        _B2( HistoryOrderSelect ( 0 ));
        
        _B2( GetLastError ());
        _B2( IsStopped ());
        
        _B2( SymbolInfoDouble (Symb, SYMBOL_ASK ));
        _B2( SymbolInfoDouble (Symb, SYMBOL_TRADE_TICK_VALUE ));
        _B2( SymbolInfoDouble (Symb, SYMBOL_POINT ));
        _B2( SymbolInfoInteger (Symb, SYMBOL_DIGITS ));
    
        _B2( TimeCurrent ());
        _B2( TimeLocal ());
        _B2( TimeTradeServer ());
        
        _B2( OrdersTotal ());
        _B2( OrderSelect ( 0 ));
        _B2( OrderGetDouble ( ORDER_PRICE_CURRENT ));
        _B2( OrderGetInteger ( ORDER_MAGIC ));
        _B2( OrderGetString ( ORDER_SYMBOL ));
        
        _B2( PositionsTotal ());
        _B2( PositionSelect (Symb));
        _B2( PositionSelectByTicket ( 0 ));
        _B2( PositionGetDouble ( POSITION_PRICE_CURRENT ));
        _B2( PositionGetInteger ( POSITION_MAGIC ));
        _B2( PositionGetString ( POSITION_SYMBOL ));
        
        _B2( AccountInfoDouble ( ACCOUNT_EQUITY ));
        _B2( AccountInfoInteger ( ACCOUNT_MARGIN_MODE ));
        
         MqlTradeRequest Request = { 0 };
         MqlTradeCheckResult CheckResult;
    
        _B2( OrderCheck (Request, CheckResult));
        
        _B2( MQLInfoInteger ( MQL_TRADE_ALLOWED ));
        _B2( AccountInfoInteger ( ACCOUNT_TRADE_EXPERT ));
        _B2( AccountInfoInteger ( ACCOUNT_TRADE_ALLOWED ));
        _B2( TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED ));
        
        _B2( SymbolsTotal ( true ));
        _B2( SymbolName ( 0 , true ));
        _B2( Symbol ());
        
        _B2( GlobalVariableCheck ( NULL ));
        _B2( GlobalVariableGet ( NULL ));
        
        _B2( ResourceFree ( NULL ));
      }
    }
    
    void OnTick ()
    {
       for ( int i = 0 ; i < inCycle; i++)
        Check( _Symbol , inAlertTime);      
    }

MT5 b2572는 이러한 메시지로 가득 차 있습니다.

 2020.08 . 13 05 : 28 : 00.143 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 6 ms.
2020.08 . 13 05 : 28 : 00.148 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 3 ms.
2020.08 . 13 05 : 28 : 00.153 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 4 ms.
2020.08 . 13 05 : 28 : 00.162 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 5 ms.
2020.08 . 13 05 : 28 : 00.167 Alert : Time[Test6.mq5 34 : HistoryOrderSelect ( 0 )] = 2 ms.
2020.08 . 13 05 : 28 : 00.174 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 4 ms.
2020.08 . 13 05 : 28 : 00.180 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 5 ms.
2020.08 . 13 05 : 28 : 00.186 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 4 ms.
2020.08 . 13 05 : 28 : 00.194 Alert : Time[Test6.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 6 ms.


누가 시도할지 결과에 대해 적어 주십시오. 브레이크를 밟는다?


PS 오랜만에 입장하려고 했는데 왜 배틀계정에 브레이크가 걸려있는지.. 문제 영역을 찾은 것 같습니다.

파일:
 
fxsaber :

PS 오랜만에 입장하려고 했는데 왜 배틀계정에 브레이크가 걸려있는지.. 문제 영역을 찾은 것 같습니다.

전투 상황이 너무 우울해 보입니다.

 2020.08 . 13 10 : 20 : 09.074 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 59 ms.
2020.08 . 13 10 : 20 : 09.074 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 59 ms.
2020.08 . 13 10 : 20 : 09.074 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 59 ms.
2020.08 . 13 10 : 20 : 09.074 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 59 ms.
...
2020.08 . 13 11 : 31 : 58.559 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 34 ms.
2020.08 . 13 11 : 31 : 58.559 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 35 ms.
2020.08 . 13 11 : 31 : 58.624 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 99 ms.
2020.08 . 13 11 : 32 : 12.483 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 7 ms.
2020.08 . 13 11 : 33 : 44.877 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 27 ms.
2020.08 . 13 11 : 33 : 44.877 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 21 ms.
2020.08 . 13 11 : 33 : 44.879 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 27 ms.
2020.08 . 13 11 : 33 : 47.911 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 18 ms.
2020.08 . 13 11 : 33 : 47.911 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 18 ms.
2020.08 . 13 11 : 33 : 47.912 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 29 ms.

2020.08 . 13 11 : 33 : 49.312 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 22 ms.
2020.08 . 13 11 : 33 : 49.312 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 22 ms.

2020.08 . 13 11 : 34 : 02.612 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 63 ms.
2020.08 . 13 11 : 34 : 02.613 Expert (GBPNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 63 ms.

2020.08 . 13 11 : 34 : 02.616 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 56 ms.
2020.08 . 13 11 : 34 : 12.057 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 12 ms.

2020.08 . 13 11 : 34 : 30.643 Expert (EURAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 32 ms.
2020.08 . 13 11 : 34 : 30.643 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 32 ms.

2020.08 . 13 11 : 34 : 30.643 Expert (GBPAUD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 8 ms.
2020.08 . 13 11 : 37 : 17.059 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 24 ms.
2020.08 . 13 11 : 38 : 30.360 Expert (EURNZD,M1)       Alert : Time[NewTicks.mqh 116 : :: HistorySelect (TimeMsc/ 1000 , INT_MAX )] = 13 ms.

자세히 살펴보면 독립적인 Expert Advisors도 같은 방식으로 느려지는 것을 알 수 있습니다(지연 시간 및 기간). 저것들. 여러 EA가 HistorySelect를 호출하면 MT5는 모든 EA의 실행을 잠시 중지한 다음 그 결과를 EA에 반환합니다.


왜 그런 이상한(명백한 것과 비교하여) 거래 내역 API가 아키텍처적으로 선택되었습니까? 이 접근 방식의 함정은 어디에 있습니까?

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MT5와 속도

fxsaber , 2020.05.28 15:27

이력선택.

이것은 엄청나게 비싼 기능입니다. 불행히도 캐싱은 현재 작업 속도를 허용할 수 없습니다.


히스토리 작업을 위해 이러한 기능을 도입하는 것을 고려하십시오.

HistoryDealsSelect( const int Index, const int Count = WHOLE_ARRAY );  // Из внутренней таблицы сделок взять сделки, начиная с заданного индекса в таблице.
HistoryOrdersSelect( const int Index, const int Count = WHOLE_ARRAY ); // Из внутренней таблицы ордеров взять ордера, начиная с заданного индекса в таблице.

그들은 HistorySelect 브레이크를 완전히 덮을 것입니다. 최신 트랜잭션을 얻는 문제를 해결하는 것이 매우 저렴하기 때문입니다. 이제 전투 성능에 한 가지 고통이 있습니다.


OnTradeTransaction 을 통해 최신 거래를 제어하는 것이 항상 가능한 것은 아닙니다. 따라서 역사에 대한 빠른 작업이 적합합니다.


거래 내역으로 작업할 때 MT4의 성능이 MT5의 속도를 능가하는 것은 아마도 정상이 아닐 것입니다.

트레이딩 터미널에서 브레이크를 제거하십시오!

 
1000번의 거래가 기록에 충분합니까?
 
Rorschach :
1000번의 거래가 기록에 충분합니까?

이 수치로 테스트했습니다.

        : HistoryDealsTotal () = 11045
        : HistoryOrdersTotal () = 11518
 

주문 20990

거래 10277

로그인 20분

파일:
20200813.log  4817 kb
 
Rorschach :

주문 20990

거래 10277

로그인 20분

좋아요, 감사합니다! 마지막으로 MT5의 슬픈 시차를 완전히 확인했습니다. 그리고 그것은 거래 기능 이 없습니다. 문제는 거의 모든 곳에 있습니다.

KD       0        16 : 00 : 33.382     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 34 : HistoryOrderSelect ( 0 )] = 25 ms.
PE       0        16 : 00 : 44.913     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 17 : CopyTicks (Symb,Ticks, COPY_TICKS_ALL , 0 , 1 )] = 24 ms.
DP       0        16 : 00 : 44.888     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 22 : HistorySelect (Tick.time, INT_MAX )] = 46 ms.
FI       0        16 : 00 : 49.579     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 28 : HistoryDealSelect ( 0 )] = 22 ms.
EE       0        16 : 01 : 03.287     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 33 : HistoryOrderGetDouble ( 0 , ORDER_PRICE_CURRENT )] = 1 ms.
KE       0        16 : 01 : 07.013     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 50 : OrderGetDouble ( ORDER_PRICE_CURRENT )] = 1 ms.
JM       0        16 : 01 : 12.189     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 44 : TimeCurrent ()] = 39 ms.
MD       0        16 : 01 : 13.067     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 81 : ResourceFree ( NULL )] = 1 ms.
RS       0        16 : 01 : 13.572     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 41 : SymbolInfoDouble (Symb, SYMBOL_POINT )] = 7 ms.
GL       0        16 : 01 : 27.816     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 79 : GlobalVariableGet ( NULL )] = 22 ms.
PD       0        16 : 01 : 33.892     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 58 : PositionGetInteger ( POSITION_MAGIC )] = 1 ms.
KP       0        16 : 01 : 39.864     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 67 : OrderCheck (Request,CheckResult)] = 3 ms.
ML       0        16 : 01 : 39.970     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 62 : AccountInfoInteger ( ACCOUNT_MARGIN_MODE )] = 1 ms.
KM       0        16 : 01 : 41.045     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 55 : PositionSelect (Symb)] = 2 ms.
NS       0        16 : 01 : 46.832     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 78 : GlobalVariableCheck ( NULL )] = 1 ms.
JP       0        16 : 01 : 49.211     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 75 : SymbolName ( 0 , true )] = 1 ms.
EL       0        16 : 01 : 59.101     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 19 : CopyTicksRange (Symb,Ticks, COPY_TICKS_ALL ,Tick.time_msc)] = 32 ms.
IM       0        16 : 02 : 07.462     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 70 : AccountInfoInteger ( ACCOUNT_TRADE_EXPERT )] = 7 ms.
PJ       0        16 : 02 : 11.735     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 37 : IsStopped ()] = 4 ms.
OG       0        16 : 03 : 08.178     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 32 : HistoryOrderGetInteger ( 0 , ORDER_MAGIC )] = 14 ms.
JH       0        16 : 03 : 16.385     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 40 : SymbolInfoDouble (Symb, SYMBOL_TRADE_TICK_VALUE )] = 5 ms.
FM       0        16 : 03 : 16.601     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 59 : PositionGetString ( POSITION_SYMBOL )] = 1 ms.
GH       0        16 : 03 : 21.841     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 72 : TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED )] = 1 ms.
FJ       0        16 : 03 : 25.782     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 46 : TimeTradeServer ()] = 1 ms.
EO       0        16 : 03 : 26.772     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 45 : TimeLocal ()] = 10 ms.
HD       0        16 : 03 : 36.595     fxstest (EURUSD,M1)     Alert : Time[fxstest.mq5 13 : SymbolInfoTick (Symb,Tick)] = 13 ms.
...

우울하게. Linux에서 결과를 보는 것은 흥미로울 것입니다. Win에서는 실시간에 대해 말할 필요가 없습니다.