Erros, bugs, perguntas - página 2222

 
Alexander:

Reprodução estável ? Que construção?

Sim, o problema é reprodutível. Versão 1870.
 

Pergunta.

Suponha que trabalho com vários símbolos num Expert Advisor ou indicador, ou melhor, com todos os símbolos que são exibidos na janela do Market Watch.

A tarefa é apanhar o momento de um novo tique em qualquer um dos símbolos.

Até agora só vejo um par de opções:
  1. Através de um temporizador com sondagem de todos os símbolos. (claro, só se pode sondar o novo valor deTimeCurrent(), mas neste caso o erro será de 1 segundo, porque esta função retorna um valor em segundos)
  2. em cada símbolo no OnTick (ou OnCalculate) para gerar um evento personalizado através do EventChartCustom

A desvantagem da primeira opção é a não optimização em termos de recursos e relevância dos dados. O OnTimer martelará principalmente em modo inativo, e quando apanha uma nova citação, o erro da hora de chegada será igual à periodicidade do temporizador.

A desvantagem da segunda variante é a complexidade, especialmente se houver dezenas de símbolos.

Compreendo correctamente que não existem outras opções (mais simples e mais elegantes)? Ou (espero) estarei eu errado?

 
Nikolai Semko:

Pergunta.

Suponha que trabalho com vários símbolos num Expert Advisor ou indicador, ou melhor, com todos os símbolos que são exibidos na janela do Market Watch.

A tarefa é apanhar o momento de um novo tique em qualquer um dos símbolos.

Até agora, só consigo ver algumas opções:
  1. Através de um temporizador com sondagem de todos os símbolos. (claro, só se pode sondar o novo valor deTimeCurrent(), mas neste caso o erro será de 1 segundo, porque esta função retorna um valor em segundos)
  2. em cada símbolo no OnTick (ou OnCalculate) para gerar um evento personalizado através do EventChartCustom

A desvantagem da primeira opção é a não optimização em termos de recursos e relevância dos dados. O OnTimer martelará principalmente em modo inativo, e quando apanha uma nova citação, o erro da hora de chegada será igual à periodicidade do temporizador.

A desvantagem da segunda variante é a complexidade, especialmente se houver dezenas de símbolos.

Compreendo correctamente que não existem outras opções (mais simples e mais elegantes)? Ou (espero) estarei eu errado?

Talvez isto ajude? https://www.metatrader5.com/ru/terminal/help/trading_advanced/custom_instruments

Instrumentos sintéticos com citações em tempo real

A plataforma de negociação permite-lhe criar instrumentos financeiros sintéticos - instrumentos baseados em um ou mais instrumentos existentes. Basta definir uma fórmula para calcular as citações e a plataforma irá gerar as carraças do instrumento sintético em tempo real e também criar o seu histórico minucioso.
Como funciona

Cria-se um instrumento sintético e define-se a fórmula para ele.
A plataforma calculará as suas carraças com uma frequência de 10 vezes por segundo (e apenas se o preço de pelo menos um instrumento na fórmula mudar).
 
SEM:

Talvez isto ajude? https://www.metatrader5.com/ru/terminal/help/trading_advanced/custom_instruments

Instrumentos sintéticos com citações em tempo real

A plataforma de negociação permite-lhe criar instrumentos financeiros sintéticos - instrumentos baseados em um ou mais instrumentos existentes. Basta especificar a fórmula de cálculo das cotações e a plataforma gerará as carraças do instrumento sintético em tempo real e criará o seu histórico minucioso.
Como funciona

Cria-se um instrumento sintético e define-se a fórmula para ele.
A plataforma calculará as suas carraças com uma frequência de 10 vezes por segundo (e apenas se o preço de pelo menos um instrumento na fórmula tiver mudado).

Sim, é claro, essa variante também tem direito à vida. Obrigado!
Mas, na realidade, é o mesmo que a minha variante #1 com periodicidade de 100 ms e com as mesmas desvantagens.

A opção 2 parece-me, no entanto, mais racional.

A propósito, lembrei-me que a opção 2 já foi aqui discutida.


 
Nikolai Semko:

Sim, é claro, esta variante também tem direito à vida. Obrigado!
No entanto, em essência, é o mesmo que a variante #1 acima com período de tempo de 100 ms.

Não seria mais fácil fazer uma EA ligada ao símbolo sobre o qual está a trabalhar. Em seguida, abrir todos os símbolos e aplicar o modelo com esta EA a cada gráfico.

for(int i=PositionsTotal()-1;i>=0;i--)
     {
      if(PositionGetSymbol(i)==Symbol())
        {
         //Код
        };

     }
 
SEM:
Não seria mais fácil fazer uma EA ligada ao símbolo sobre o qual está a trabalhar. Depois abrir todos os símbolos, e para cada gráfico aplicar um modelo com esta EA.

É evidente que o podemos fazer. A questão é que eu não sei alguma coisa e é possível traçar o momento exacto de chegada da citação para outro símbolo através do código de apenas uma EA multimoeda.
Mas parece que a variante 2, através de interrupções personalizadas, é a única solução racional.

 
Nikolai Semko:

Sim, é evidente que pode ser feito dessa forma. A questão é que não sei algo, e é possível apanhar o momento exacto da citação de outro símbolo através do código de apenas um Expert Advisor multimoedas.
Mas parece que a variante 2, através de interrupções personalizadas, é a única solução racional.

Implementação.

Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.01.28
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Nikolai Semko:
  1. via temporizador com sondagem de todos os caracteres. (Claro, poderia apenas sondar o novo valor deTimeCurrent(), mas neste caso o erro seria de 1 segundo, porque esta função devolve um valor em segundos).

Estou correcto ao assumir que não há outras opções (mais simples e mais elegante)? Ou (espero) estarei eu errado?

O temporizador Millisecond + SymbolInfoTick() receberá o tempo em milissegundos.

 
Sim, já dei este link para a vossa implementação no correio 22214. Volto a dizê-lo - penso que esta variante é a mais razoável até agora. E parece não haver melhor implementação em termos de carga mínima de CPU e relevância do momento resultante de um novo tick.
 
Nikolai Semko:
  1. через таймер c опросом всех символов. (можно, конечно, только опрашивать новое значение функции TimeCurrent(), но в этом случае погрешность будет равна 1 секунде, т.к. эта функция возвращает значение в секундах)

Я правильно понимаю, что других вариантов (более простых и изящных) не существует? Или (надеюсь) я не прав?

Millisecond timer + SymbolInfoTick() obtêm o tempo em milissegundos.

Alexey Kozitsyn:

Millisecond timer + SymbolInfoTick() obtêm tempo em milissegundos.

É a variante 1. referia-se a tal construção (Millisecond timer + SymbolInfoTick() loop). MencioneiTimeCurrent() porque devolve"a hora de chegada da última cotação para qualquer símbolo disponível na janela do Market Watch", não só para o símbolo actual, mas infelizmente devolve apenas segundos, o que é muito rude para carraças.
Objectivamente, a variante com interrupções do utilizador é mais razoável, porque não há necessidade de organizar um loop com a cara função SymbolInfoTick constantemente, mesmo quando as aspas estão a dormir, carregando assim o processador com tempo de inactividade. Além disso, o erro de cálculo de um novo tick pode ser igual à periodicidade do temporizador, e todas as ticks serão perdidas entre a execução do OnTimer, se tais ticks forem mais de 1.
SZZ Estamos a falar de mql5. Em mql4, as interrupções do utilizador não funcionam correctamente. Portanto, o mql4 só pode utilizar o temporizador.