Bibliotecas: MT4Orders - página 44

 

E mais uma:

2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      0 - 1532297: 00:00:14.989
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      1 - 1528006: 00:00:04.983
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      2 - 1527412: 00:00:03.543
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      3 - 1528097: 00:00:01.812
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      4 - 1478424: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      5 - 1478368: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      6 - 1478410: 00:00:01.502
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      7 - 1478344: 00:00:01.501
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      8 - 1733682: 00:00:01.480
2020.02.27 14:59:50.616 ExecutionSpeed (EURUSD,H1)      9 - 737378: 00:00:00.346
 
Andrey Khatimlianskii:

Isso é muito real:

Obrigado pela informação. Essa longa execução provavelmente se deve aos gateways de terceiros. Gostaria de saber como as bolsas estão se saindo.

 
No MT4, escrevi um alerta para essa situação. Eu precisava verificar o quanto essa verificação seria cara, então escrevi uma variante difícil de medir.
#include <MT4Orders.mqh>
#include <Debug.mqh>

// Obter todos os tíquetes do histórico.
void GetTickets( TICKET_TYPE &Tickets[] )
{
  for (int i = ArrayResize(Tickets, OrdersHistoryTotal()) - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      Tickets[i] = OrderTicket();
}

// Selecionar todos os tíquetes do histórico.
int CheckTickets( const TICKET_TYPE &Tickets[] )
{
  int Count = 0;
  
  for (int i = ArraySize(Tickets) - 1; i >= 0; i--)
    if (OrderSelect(Tickets[i], SELECT_BY_TICKET))
      Count++;
      
  return(Count);
}

void OnStart()
{
  TICKET_TYPE Tickets[];
  
  GetTickets(Tickets); // Comprei os ingressos.
  
  ArraySort(Tickets);
  
  BENCH(CheckTickets(Tickets)); // Verificou os tíquetes.
  
  _P2(CheckTickets(Tickets));
}


Este é o resultado no MT4.

Time[CheckTickets(Tickets)] = 9667
CheckTickets(Tickets) = 20240

20 mil bilhetes em 10 ms.


No MT5.

Time[CheckTickets(Tickets)] = 5262
CheckTickets(Tickets) = 833

5K bilhetes MT4 em 0,8ms.


Time[CheckTickets(Tickets)] = 700707
СheckTickets(Tickets) = 170458

170 mil bilhetes MT4 em 700 ms.


O MT5 é mais rápido que o MT4 com um histórico de negociação relativamente pequeno. Com um histórico grande (centenas de milhares de registros), o MT5 fica muito mais lento.

 

Um caso interessante do MT5.

A tomada foi parcialmente executada e, depois disso, foi excluída. Nesse caso, temos a situação em que DEAL_ORDER tem o status ORDER_STATE_CANCELED, e não FILLED/PARTIAL.

Nesse caso, DEAL_TIME_MSC não é igual a ORDER_TIME_DONE_MSC.

 
fxsaber:

DEAL_TIME_MSC não é igual a ORDER_TIME_DONE_MSC.

Isso acontece com a execução parcial de limitadores.


 

Rejeição de empate.

Essa situação pode ocorrer com frequência:

  1. O preço atingiu o take profit de uma posição aberta.
  2. O MT5 gerou uma ordem de mercado. A ordem de limite correspondente foi enviada para o provedor de liquidez.
  3. A ordem de limite é registrada novamente. Em seguida, a ordem do MT5 que corresponde à Take é excluída.
  4. Mudando para o ponto 1.
Boa implementação, porque no histórico você pode ver as rejeições dos provedores. Bem, e a implementação interna forçada de níveis como limitadores.
 
fxsaber:
  1. O preço atingiu o take profit da posição aberta.
  2. O MT5 gerou uma ordem de mercado. A ordem de limite correspondente foi enviada para o provedor de liquidez.
  3. A ordem Limit é registrada novamente. Em seguida, a ordem do MT5 que corresponde à Take é excluída.
  4. Mudar para o ponto 1.
Boa implementação, porque no histórico você pode ver as rejeições dos provedores. Bem, e a implementação interna forçada de níveis como limitadores.

Onde estão os limitadores?

Como essa implementação é melhor do que enviar uma tomada como um limite imediatamente no momento de sua configuração? Selecionar o LP com o melhor preço?

 
Andrey Khatimlianskii:

Onde estão os limitadores nisso?

O MT5 sempre mostra os compradores na forma de remarcações.

Como essa implementação é melhor do que enviar uma tomada como um limite imediatamente no momento de sua configuração? Selecionando a LP com o melhor preço?

Sim, porque não se trata de uma bolsa, mas de uma agregação.

 
fxsaber:

O MT5 sempre mostra as tomadas como marquises.

Para quem isso é mostrado?

Não há nenhum plugin de servidor para exibir os TPs como limites?


fxsaber:

Sim, porque não se trata de uma bolsa, mas de uma agregação.

Eu testaria essa afirmação.

A entrada não se torna mais lucrativa com um mercado porque é uma agregação, não é?

 
Andrey Khatimlianskii:

Mostrando quem?

O cliente.

Não existe um plug-in do lado do servidor para exibir TPs como limites?

Terceiros.

Eu testaria essa afirmação.

A entrada não se torna mais lucrativa com um mercado porque é uma agregação, não é mesmo?

É assim que um feed de limite é enviado com um prazo de validade muito curto.