Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 361

 
ijonhson:

A questão é se devo calcular o código indicador 900 vezes por um tick (3 prazos com 300 barras, por exemplo), ou 3 vezes. É claro que o icustom é menos incômodo, eu o coloco no loop e está feito. Como opção, vi um endereço da matriz de valores do indicador passado para um EA usando dll, mas não quero pegar o indicador em um conjunto


Mais uma vez, há um erro na declaração do problema. Por que você precisa de 900 barras em seu Expert Advisor? Se você realmente precisa de tantos dados no indicador, 900 barras, então trabalhe com eles no próprio indicador, por que arrastá-los para o Expert Advisor? A tarefa certa é 50% do sucesso

 
Nikolay Ivanov:

A declaração do problema está errada novamente... Por que você precisa de 900 barras em seu EA? Se você realmente precisa de tantos dados no indicador, 900 deles, então trabalhe com eles no próprio indicador, por que arrastá-los para o Expert Advisor? A tarefa correta é 50% do sucesso


Preciso comparar os picos mínimo e máximo do indicador em 3 períodos de tempo, por exemplo 5min 15min e 30min, para determinar as tendências, não serei capaz de adivinhar os picos, ou seja, ter que revezar toda a história. Tomei 300 barras de história como exemplo.

Ainda consome muitos recursos para usar o icustom.

 
ijonhson:

Preciso comparar o indicador de picos mínimo e máximo por 3 períodos de tempo, por exemplo 5min 15min e 30min, para determinar as tendências, não serei capaz de adivinhar os picos, ou seja, terei que fazer revezamentos ao longo de toda a história. Tomei 300 barras de história como exemplo.

Ainda é muito intensiva em recursos para usar o icustom.


A questão permanece em aberto no ontick, a função IndicatorCounted() no primeiro cálculo dá -1, como ela pode ser substituída em um Expert Advisor?

 
ijonhson:

"Você não precisa mudá-lo" - ou seja, funciona corretamente com o onTick no Expert Advisor assim como com o onCalculate no indicador?

Não, eu quis dizer que não é nada necessário lá.

 
Alexey Viktorov:

Não, eu quis dizer que não há nenhuma necessidade disso lá.


Escavado emhttps://www.mql5.com/ru/articles/1456, vou investigar, mas achei que havia uma opção mais fácil.

Перенос кода индикатора в код эксперта. Строение индикатора.
Перенос кода индикатора в код эксперта. Строение индикатора.
  • 2007.02.16
  • Nikolay Kositsin
  • www.mql5.com
Прежде чем приступить к основной теме статьи, мне следовало бы вкратце коснуться общего строения индикатора под углом зрения программиста, которого этот индикатор интересует, как будущая часть кода эксперта: Вполне естественно, что у реального индикатора может быть другое количество отображаемых индикаторных значений, другое количество...
 
ijonhson:

A questão permanece em aberto na função ontick IndicatorCounted() na primeira verificação de como substituí-la no Expert Advisor?

Você não precisa olhar através dos tops em cada tick, eles não mudam.

No EA, verifique o ciclo na abertura da barra e saia do ciclo assim que a parte superior for encontrada.

   int count=Bars(Symbol,Period);
   for(int i=0; i<count; i++) {
     // ищем и запоминаем в переменную, если нашли break;
   }
 
ijonhson: A questão permanece em aberto no ontick, a função IndicatorCounted() no primeiro cálculo dá -1, o que irá substituí-lo no Expert Advisor?

A função IndicatorCounted() era utilizada anteriormente nos indicadores com a função start(). Os novos indicadores com OnCalculate( ) utilizam o segundo parâmetro pré-calculado em seu lugar. Eu os analisei especialmente e descobri que eles diferem por 1. A diferença é pequena e eles mostram quantas barras já foram calculadas. Se for 0 (ou -1), então todas as barras precisam ser calculadas. Isto acontece ao iniciar o indicador, quando ele deve traçar toda a linha e salvar o resultado nas matrizes de proteção. Nos próximos tiques, apenas os dados da última barra devem ser recalculados. Portanto, o que é feito com valor zero (ou -1) deve ser colocado no OnInit() da EA. O resto - muito pouco - deve ser colocado em OnTick()

 
YarTrade:

Obrigado. Vou trabalhar nisso. Eu não li nada sobre tipos longos no livro didático por algum motivo.

Você precisa colocar o cursor sobre int longo ou curto (ou qualquer outra palavra em outro idioma) e pressionar F1.

 
ijonhson:

Muito obrigado, mas pelo que entendi da descrição da função, ele executará todo o código do indicador para obter um valor, no local que especifiquei, ou seja, para obter todos os topos que precisarei para calcular o código do indicador pela enésima vez (passar por todas as barras uma a uma), mas preciso comparar a ordem dos topos deste indicador em vários intervalos de tempo.

E então você tem que procurar os tops manualmente

Isto é absolutamente errado! Todas as barras indicadoras, quando chamadas do Expert Advisor usando iCustom(), são recalculadas apenas uma vez! Todas as chamadas seguintes do indicador funcionam com os resultados já calculados, apenas as barras não calculadas da chamada anterior são recalculadas. Por exemplo, ao chamar o indicador do período M15 a partir do gráfico H1 em cada nova barra, verifica-se que 4 barras de 15 minutos não são recalculadas a partir da chamada para o indicador. Portanto, apenas estas 4 barras serão recalculadas.

Mesmo se fizermos um loop através da seqüência de barras de 0 a xxx, o indicador será recalculado apenas uma vez na primeira chamada. Todas as chamadas seguintes não realizarão qualquer recálculo.

 
ijonhson:

Desenterreihttps://www.mql5.com/ru/articles/1456, vou investigar, mas achei que havia uma maneira mais fácil

Este é um mau exemplo. Já tem TEN anos!!! O idioma já mudou para melhor.

Razão: