MT5 e velocidade em ação - página 34

 
fxsaber:

não é possível mudar a história no fim de semana, portanto, não há como verificar.

Possivelmente. Foi por isso que o problema foi encontrado no fim de semana.

// Демонстрация лагов 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!");
  }
}


Resultado.

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.

Atrasos (podem ir até vários milissegundos) após a eliminação da segunda encomenda.

 
Renat Fatkhullin:

Mudar para contagem de microssegundos. Os milissegundos não são mais apropriados.

Por que o servidor MT5 executa ordens pendentes em 100-200 milissegundos? (em um conhecido corretor em A)

 
fxsaber:

Talvez. Foi por isso que foi encontrado um problema no fim de semana.


Resultado.

Atrasos (podem chegar a vários milissegundos) após a eliminação da segunda encomenda.

A eliminação de pedidos leva à completa desativação do cache do histórico selecionado.

No modo normal, a velocidade da amostragem do histórico foi levada a dezenas de microssegundos.

 
secret:

Por que o servidor MT5 executa ordens pendentes em 100-200 milissegundos? (em um conhecido corretor em A)

Executa ou aceita?

Sem detalhes sobre N ofícios (para que você possa ver o quadro completo, não uma única ordem rasgada. incluindo pings) não podemos discutir.

 
Renat Fatkhullin:

A eliminação de pedidos desabilita completamente o cache da história selecionada.

A primeira eliminação vai bem, porém. O segundo tem problemas. A que esta deficiência está relacionada?

 
fxsaber:

Terei que pesquisar no fórum. Lembro-me de mostrar como o acesso genérico à história é superior ao mecanismo normal apenas no Testador.

Este foi o casoaqui.

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

Ele executa ou aceita?

Sem detalhes sobre N ofícios (para que você possa ver o panorama geral, não uma única ordem arrancada. incluindo os pings) não podemos discutir.

Sim, é.

Se o preço tocar uma ordem de limite pendente com um tick e ricochetear, e este tick durar menos de 100-200 ms. Depois, aproximadamente em 30-50% dos casos, ocorre um deslizamento. Ou seja, a ordem não tem tempo para ser executada pelo preço do carrapato.

A duração do tick é medida pelo arquivo de tick do corretor, portanto os pings não têm nada a ver com isso.

Também não acredito na alta carga do servidor, uma vez que apenas poucos comerciantes se movem nesses momentos de acordo com os números de ordem.

O deslizamento devido à falta de liquidez também não tem nada a ver com isso. Aparece apenas em carrapatos curtos. O tamanho do lote é pequeno, também.

Até agora, assumo um atraso artificial na execução por parte do corretor.

É demorado coletar estatísticas sobre vários negócios. Mas é possível, se isso ajudar a responder à pergunta.

 
secret:

Executa.

Se o preço tocar uma ordem Limite com um tique e saltar de volta, e esse tique durar menos de 100-200 ms. Em seguida, aproximadamente 30-50% dos casos o pedido é executado com um deslize. Ou seja, a ordem não tem tempo suficiente para ser executada pelo preço do carrapato.

A duração do tick é medida pelo arquivo de tick do corretor, portanto os pings não têm nada a ver com isso.

Também não acredito na alta carga do servidor, uma vez que apenas poucos comerciantes se movem nesses momentos de acordo com os números de ordem.

O deslizamento devido à falta de liquidez também não tem nada a ver com isso. Aparece apenas em carrapatos curtos. O tamanho do lote é pequeno, também.

Até agora, assumo um atraso artificial na execução por parte do corretor.

É demorado coletar estatísticas sobre vários negócios. Mas é possível, se isso ajudar a responder à pergunta.

Você tem que analisar isso em detalhes, mas se for forex, é provável que seja uma negociação no próximo tick.

Preciso de registros e de uma tabela de carrapatos.
 
secret:

Se o preço tocar uma ordem Limite com um tique e saltar de volta, e esse tique durar menos de 100-200 ms. Em seguida, o deslizamento ocorre em cerca de 30-50% dos casos. Isto é, a ordem não consegue ser executada ao preço do tick.

O MT5 não tem nada a ver com isso. Em contas demo haverá uma execução perfeita.
 

Cansado de depurar os instantâneos. Por fim, tornou-o perfeito. Um conselheiro, nada. Dois - perfeito. 20 - desastre: A CPU está abaixo de 100%. HistóriaAtrasos de seleção por muitos milissegundos.

Parece que o MT5 não se destina a fazer com que muitos Expert Advisors funcionem simultaneamente.