MT5와 속도 - 페이지 34

 
fxsaber :

주말에는 스토리 변경이 불가능하니 확인하지 마세요.

아마도. 그래서 주말에 문제가 생겼습니다.

 // Демонстрация лагов HistorySelect при удалении нескольких ордеров.
#property script_show_inputs

input int inAmount = 5 ; // Количество ордеров

#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/332/Benchmark.mqh
#define _B2(A) _B(A, 10 )

// true - ордер есть в истории, false - иначе.
bool HistorySelectOrder( const ulong Ticket )
{
   return (( HistoryOrderGetInteger (Ticket, ORDER_TICKET ) == Ticket) ||
         ( _B2( HistorySelect ( 0 , INT_MAX ) ) && ( HistoryOrderGetInteger (Ticket, ORDER_TICKET ) == Ticket)));
}

void OnStart ()
{
   HistorySelect ( 0 , INT_MAX ); // Создали исторический кеш.
        
   MqlTradeRequest Request = { 0 };
   MqlTradeResult Result;
                        
   // Выставляем ордера
  Request.action = TRADE_ACTION_PENDING ;
  Request.symbol = _Symbol ;
  Request.volume = 0.01 ;
  Request.price = SymbolInfoDouble ( _Symbol , SYMBOL_ASK ) - 1000 * _Point ;
  Request.type = ORDER_TYPE_BUY_LIMIT ;
        
   for ( int i = 0 ; i < inAmount; i++)
     if (! OrderSend (Request, Result) || (Result.retcode != TRADE_RETCODE_DONE ))
       Print ( "Good!" );
            
   // Удаляем ордера
  Request.action = TRADE_ACTION_REMOVE ;

   for ( int i = OrdersTotal () - 1 ; i >= 0 ; i--)
  {
    Request.order = OrderGetTicket (i);

     if ( OrderSend (Request, Result) && (Result.retcode == TRADE_RETCODE_DONE ) &&
        !HistorySelectOrder(Request.order)) // Проверяем наличие удаленного ордера в истории.
       Print ( "OrderSend BUG!" );
  }
}


결과.

 2020.09 . 27 15 : 46 : 11.940 Alert : Time[Test6.mq5 523 : HistorySelect ( 0 , INT_MAX )] = 39 mсs.
2020.09 . 27 15 : 46 : 11.988 Alert : Time[Test6.mq5 523 : HistorySelect ( 0 , INT_MAX )] = 253 mсs.
2020.09 . 27 15 : 46 : 12.034 Alert : Time[Test6.mq5 523 : HistorySelect ( 0 , INT_MAX )] = 190 mсs.
2020.09 . 27 15 : 46 : 12.083 Alert : Time[Test6.mq5 523 : HistorySelect ( 0 , INT_MAX )] = 218 mсs.
2020.09 . 27 15 : 46 : 12.130 Alert : Time[Test6.mq5 523 : HistorySelect ( 0 , INT_MAX )] = 250 mсs.

두 번째 주문이 삭제된 후 지연됩니다(최대 몇 밀리초까지 가능).

 
Renat Fatkhullin :

마이크로초로 전환합니다. 밀리초는 더 이상 적합하지 않습니다.

MT5 서버가 100-200밀리초 내에 보류 주문 을 실행하는 이유는 무엇입니까? (A의 유명한 브로커로부터)

 
fxsaber :

아마도. 그래서 주말에 문제가 생겼습니다.


결과.

두 번째 주문이 삭제된 후 지연됩니다(최대 몇 밀리초까지 가능).

주문을 삭제하면 선택한 기록의 캐시가 완전히 무효화됩니다.

일반 모드에서 히스토리 샘플링 속도는 수십 마이크로초까지 올라갔습니다.

 
secret :

MT5 서버가 100-200밀리초 내에 보류 주문 을 실행하는 이유는 무엇입니까? (A의 유명한 브로커로부터)

수행 또는 수락?

N 거래에 대한 세부 정보 없이 논의하는 것은 불가능합니다(핑을 포함하여 찢어진 단일 주문이 아닌 전체 그림을 볼 수 있도록).

 
Renat Fatkhullin :

주문을 삭제하면 선택한 기록의 캐시가 완전히 무효화됩니다.

첫 번째 제거는 잘 됩니다. 두 번째 문제부터. 이 장애의 원인은 무엇입니까?

 
fxsaber :

포럼을 검색해야 합니다. 나는 테스터에서 히스토리에 대한 일반 액세스가 일반 메커니즘보다 성능이 더 좋다는 것을 보여주었다는 것을 기억합니다.

여기 있었다.

Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
Библиотека Generic классов - ошибки, описание, вопросы, особенности использования и предложения
  • 2017.12.08
  • www.mql5.com
С 6 декабря 2017 года в стандартную поставку MetaTrader 5 стали входить так называемые Generic-классы, реализующие эффективные алгоритмы для хранен...
 
Renat Fatkhullin :

수행 또는 수락?

N 거래에 대한 세부 정보 없이 논의하는 것은 불가능합니다(핑을 포함하여 찢어진 단일 주문이 아닌 전체 그림을 볼 수 있도록).

수행합니다.

가격이 한 틱에서 보류 중인 지정가 주문에 닿았다가 다시 되돌아오고 이 틱이 100-200ms 미만 지속되는 경우. 약 30~50%의 경우 실행이 미끄러지면서 발생합니다. 저것들. 틱 가격에서는 주문을 실행할 시간이 없습니다.

브로커의 틱 아카이브에 따라 틱 지속 시간을 확인하므로 ping은 관련이 없습니다.

서버 부하 증가도 믿지 않습니다. 왜냐하면. 주문 번호로 판단하면 이 순간에 거래하는 사람은 거의 없습니다.

유동성 부족으로 인한 슬리피지는 관련이 없습니다. 왜냐하면 짧은 틱에만 나타납니다. 예, 부지가 작습니다.

지금까지는 브로커에 의한 인위적인 실행 속도 저하를 가정합니다.

여러 거래에 대한 통계를 수집하는 것은 어렵습니다. 하지만 질문에 답하는 데 도움이 된다면 할 수 있습니다.

 
secret :

수행합니다.

가격이 한 틱에서 보류 중인 지정가 주문에 닿았다가 다시 되돌아오고 이 틱이 100-200ms 미만 지속되는 경우. 약 30~50%의 경우 실행이 미끄러지면서 발생합니다. 저것들. 틱 가격에서는 주문을 실행할 시간이 없습니다.

브로커의 틱 아카이브에 따라 틱 지속 시간을 확인하므로 ping은 관련이 없습니다.

서버 부하 증가도 믿지 않습니다. 왜냐하면. 주문 번호로 판단하면 이 순간에 거래하는 사람은 거의 없습니다.

유동성 부족으로 인한 슬리피지는 관련이 없습니다. 왜냐하면 짧은 틱에만 나타납니다. 예, 부지가 작습니다.

지금까지는 브로커에 의한 인위적인 실행 속도 저하를 가정합니다.

여러 거래에 대한 통계를 수집하는 것은 어렵습니다. 하지만 질문에 답하는 데 도움이 된다면 할 수 있습니다.

자세히 이해할 필요가 있지만 외환이라면 다음 틱에 거래가 될 가능성이 큽니다.

로그와 틱 차트 테이블이 필요합니다.
 
secret :

가격이 한 틱에서 보류 중인 지정가 주문에 닿았다가 다시 되돌아오고 이 틱이 100-200ms 미만 지속되는 경우. 약 30~50%의 경우 실행이 미끄러지면서 발생합니다. 저것들. 틱 가격에서는 주문을 실행할 시간이 없습니다.

MT5는 여기서 영업을 하지 않습니다. 데모 계정은 완벽하게 실행됩니다.
 

Zadol 디버깅 스냅샷에 지쳤습니다. 결국 그는 완벽하게 해냈습니다. 한 명의 고문 - 평화롭고 조용합니다. 2개는 훌륭합니다. 20 - 재앙: CPU가 100% 미만입니다. HistorySelect는 몇 밀리초 동안 지연 됩니다.

MT5는 많은 수의 로봇이 동시에 작동하도록 설계되지 않은 것 같습니다.