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

 
fxsaber:

@Anton, em muitas funções padrão você pode especificar NULL em vez de um caractere. Isso afeta a velocidade de execução?

Ou isso não faz diferença para o Terminal/Tester?

Símbolo(), _Entradas de símbolo são equivalentes a NULL (onde NULL é permitido ao invés de um nome de símbolo).

Neste caso, não há verificação extra da existência do símbolo atual, da presença do símbolo atual no Market Watch e das propriedades de chamada desnecessárias do símbolo atual, uma vez que as propriedades do personagem atual estão em cache.

Ou seja, se você especificar um parâmetro de string simples em vez de Symbol(), _Symbol ou NULL, então verifica o programa completo e ainda solicita propriedades

 
Slava:

Símbolo(), _Entradas de símbolo são equivalentes a NULL (onde NULL é permitido ao invés do nome do símbolo).

Neste caso, não há verificação desnecessária da existência do símbolo atual, da presença do símbolo atual no Market Watch e da chamada desnecessária das propriedades do símbolo atual, pois as propriedades do símbolo atual estão em cache.

Slava, você pode comentar: sobre as ações, o preço do tick na especificação do símbolo é definido como '0'. E isto é o que diz o apoio:

"Recebeu a confirmação do departamento técnico. Informamos que não é possível preencher o parâmetro "preço do tick" para o estoque. O valor será defaulto para 0.
Obrigado por nos contatar"!


É este realmente o caso? É no Symbol Specifics que o preço do tick é fixado em zero apenas para ações?

 
Vladimir Karputov:

Slava, você pode comentar: sobre o estoque, o preço do tick na especificação do símbolo é definido como '0'. E isto é o que diz o apoio:

"Recebeu a confirmação do departamento técnico. Informamos que não é possível preencher o parâmetro "Preço do Tick" para o estoque. O valor será defaulto para 0.
Obrigado por nos contatar"!


É este realmente o caso? É no Symbol Specifics que o preço do tick é zero só para ações?

Sim. Há nuances.

Quando o zero é exibido, você mesmo tem que fazer as contas. Pergunte a seu corretor sobre a fórmula

 
fxsaber:

O problema de receber carrapatos tardios sem saltos agora só é resolvido através de CopyTicks*. Este é um mecanismo muito pesado para este problema generalizado.

A propósito, a partir dos novos registros de hoje da última versão de lançamento do MT5:

Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704931 mcs.
Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704684 mcs.
Time[Main.mqh 162 in ProcessTicks: CopyTicksRange(_Symbol,OldTicks,COPY_TICKS_INFO,LastTickParsed.time_msc)] = 704425 mcs.

Estava pendurado 3 EAs em 1 símbolo, cada um em seu próprio gráfico. E o pedido continua a cada tique. Tais picos são, naturalmente, pouco freqüentes, mas na verdade 1 pedido de novos carrapatos, vindo do último carrapato, foi de 700 ms.

 
Renat Fatkhullin:

Não é.

Você sempre pegará atrasos aleatórios em qualquer lugar em qualquer programa. Comece a acompanhar tudo e você ficará horrorizado com as realidades do Windows. Já expliquei isto em detalhes várias vezes.

Em algum momento nós também ficamos surpresos quando pegamos rajadas aleatórias de 60-80 ms em vez de 0 ms nas funções do sistema WinAPI.


Estamos agora migrando a maioria de nossas soluções Windows em massa para versões Windows Server 2019 Core especialmente desengorduradas, e projetos web.NET Core para Linux. Isto traz uma economia tremenda nos recursos do sistema e reduz seriamente a latência do sistema.

O primeiro passo para escumar os terminais MataTrader 5 foi começar a implementar um gerenciador de tarefas para acompanhar o consumo de recursos em tempo real. Para nós mesmos, estamos coletando mais informações.

Já se tornou claro que estamos:

  • retenção excessivamente longa de fluxos desnecessários
  • sobre-escalonamento
  • Cachimbos de extensão em excesso.
Até o próximo lançamento, iremos corrigir algumas questões de recursos passo a passo.

Seria bom ter também um terminal de linux ))))

 
Slava:

Sim. Há nuances.

Você mesmo tem que fazer as contas se você tiver zero. Peça a sua corretora a fórmula.

Tudo está correto com SymbolInfoXXXX. A questão era por que eles dizem que "0" é definido para ações na Especificação. Dizem que é claro - um carrapato é igual a um centavo. Mas não é o motivo para definir '0' na Especificação?

 
fxsaber:

Dentro da função, você ainda precisa saltar para o caractere de carrapato correspondente. Este é o momento de analisar a variável string. Não há necessidade de fazer isso com o NULL.

Eu verifiquei na época e não vi nenhuma diferença significativa de velocidade. Você mesmo pode verificá-lo

 
Slava:

Se um parâmetro de string normal for especificado em vez de Symbol(), _Symbol ou NULL, então o programa completo é verificado e as propriedades também são consultadas

Obrigado pela informação! Acontece que é melhor fazer desta maneira:

// Быстрый SymbolInfoTick.
bool SymbolInfoTickFast( const string &Symb, MqlTick &Tick )
{
  return((Symb == _Symbol) ? SymbolInfoTick(_Symbol, Tick)
                           : SymbolInfoTick(Symb, Tick));
}
 
fxsaber:

Obrigado pela informação! Acontece que é melhor fazer desta maneira:

Mesmo sem detalhes técnicos, não poderia imaginar como você poderia fazer isso de maneira diferente em suas funções...

Como esta construção deve ser mais rápida que o SymbolInfoTick() padrão ?

 
Artyom Trishkin:

Como esta construção deve ser mais rápida do que o SymbolInfoTick() padrão ?

Mais rápido.