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

 
fxsaber:

Qual terminal você acha que consome mais CPU?

2 e aqui está o porquê

 
fxsaber:

Para reduzir a CPU, recomendo fechar todas as subjanelas do terminal (Market Watch, Navigator, Ferramentas, etc.), minimizando todos os gráficos e minimizando o próprio terminal.

Remover todos os símbolos não utilizados do Market Watch. É especialmente importante para o VPS.


Sugiro automatizar estas ações de alguma forma. Antes de deixar seu VPS, pressione e saia. Quando você entra - pressione, você vê tudo.

Há muito tempo eu venho dizendo que os algotraders precisam de outra versão do terminal, sem toda essa afinação!

Além de tudo o acima, acrescentei um novo para cada EA:

ChartSetInteger(0,CHART_SHOW,false);

Ainda está atrasado :(

 
A100:

A 2ª e é por isso.

Sim, o segundo.

 
Como o SymbolInfoTick está estruturado arquitetonicamente? Não se entende por que pode funcionar por dezenas de milissegundos.
 

O b2560 perde enormemente em desempenho em comparação com o b2592. Ansioso para consertar o bug.

O fio se revelou útil.

 
fxsaber:

O b2560 perde enormemente em desempenho em comparação com o b2592. À espera de correção de erros.

b2593 foi fixado. Obrigado!

 
A adição da ordem/comércio ao histórico comercial causará uma reconstrução completa do cache HistorySelect, não uma parcial. Daí o atraso no acionamento dos pedidos.
// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}

Resultado.
2020.09.08 20:23:32.103 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:23:32.239 Alert: Time[Test6.mq5 411: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:31:59.863 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 9 ms.
2020.09.08 20:32:00.845 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 5 ms.
2020.09.08 20:32:01.856 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 4 ms.
2020.09.08 20:32:02.846 Alert: Time[Test6.mq5 433: HistorySelect(0,INT_MAX)] = 7 ms.


Por que isso é importante. Imaginemos que um robô HFT esteja funcionando. Na mesma conta, um comércio é executado à mão. Isso é tudo, o HFT-robô deixou cair o HistorySelect-cache com as conseqüências apropriadas. É claro, a história do HFT-robot não é de 10K pedidos/transações, mas muito mais. Seria caro reconstruir todo o cache para tal história. É por isso que é lógico adicioná-las.


É evidente que o comércio manual não deve atrasar os robôs. Para a negociação puramente algorítmica, o problema surge quando as ordens são acionadas.

 

As funções que permitem fazer instantâneos completos (conjuntos de estruturas) do ambiente comercial atual (posições e ordens) estão muito ausentes.

Uma variante através das funções Posição* e Ordem* causa colisões (negociação ativa) ao passar estas duas listas no laço. Algo está perdido ou não está contabilizado.

Instantaneamente, fotos completas evitaria estes problemas.


ZZY Full snapshots para Market Watch - ainda não avaliando a relevância. Tornando o MT5 mais próximo do HFT (LCI).

 

Gerenciado (não de propósito) para colocar o Terminal (e nenhum) em um estado em que a CPU esteja 100% e o tempo de espera do OrderSend seja superior a um segundo.

Provavelmente não vai ser fácil encontrar a causa.


ZZY Parece que tais freios são causados por um projeto semelhante.

void OnTrade()
{
  OnTick();
}

Eu não consegui criar nenhum código para reproduzi-lo.


De fato, é possível conduzir o Terminal a um estado onde as ordens de negociação serão executadas em segundos (Terminal log) com um ping de 50 ms. Uma vez removidos os EAs, as ordens de negociação começam a ser executadas dentro de 100ms.

 
fxsaber:

As funções que permitem fazer instantâneos completos (conjuntos de estruturas) do ambiente comercial atual (posições e ordens) estão muito ausentes.

Uma variante através das funções Posição* e Ordem* causa colisões (negociação ativa) ao passar estas duas listas no laço. Algo está perdido ou não está contabilizado.

Instantaneamente, fotos completas evitaria estes problemas.


ZZY Full snapshots para Market Watch - ainda não avaliando a relevância. Tornando o MT5 mais próximo do HFT (LCHI).

E funciona em tempo integral para rastrear a posição da ordem-transação-posição por bilhete e vice-versa por posição do bilhete para entender o que foi a ordem e os termos da transação. O rastreamento por status histórico é uma realidade perversa.

O ambiente de clique completo é legal, mas aparentemente caro e não tão necessário. embora em um colapso do mercado))))

Para mim, divido uma ordem e uma ordem. Uma ordem para executar uma ordem é uma ordem pendente. A ordem do mercado é confusa.

Não julgar estritamente por opiniões não-profissionais.