[AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você. - página 670

 
artmedia70:

Qual é a probabilidade de um novo tick chegar antes de todos os cálculos atuais da EA estarem concluídos? Parece-me que somente neste caso os dados se tornarão antigos e irrelevantes.

eu verifiquei quanto tempo seu código conta - eu também, recentemente tive minhas dúvidas, é velocidade de cálculo MT4 suficiente para minha EA, afinal é suficiente por enquanto, meu código leva cerca de 18 ms, ou seja, em 1 segundo você é verificado 55 vezes, os ticks vêm de 10 a 70 por minuto, se mais de 50 ticks por minuto, isso significa que há uma vela

tente ver como seu código funciona, como este

int tik,barM1


int init(){
   barM1  = Bars;
   tik = 0;

return (0);
}


//_______________________________________________________
//  это добавить в start()
//_______________________________________________________
int start=GetTickCount();
 

 // некие серьёзные вычисления...


tik++;
Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");

int counted  = Bars;
if (counted != barM1) {
print("за один бар было принято ",tik, "тиков" )
tik=0;
barM1=counted;
}

aqui está o indicador que conta os carrapatos - para a reconciliação

Bem, se você tem um preço de abertura, desculpe-me por não o ter visto.

OpnPrice =iOpen(NULL,PERIOD_M5,0); você só pode mudar em uma barra fechada - o código acima com a condição se (contado != barM1) {

Arquivos anexados:
 

Como alterar o número de dígitos após o ponto decimal do indicador iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) ao calcular no corpo de especialistas? O resultado é exibido com 4 (ou seja, 0,0001), enquanto que deve ser exibido com 5 (por exemplo, 0,00012) para uma análise precisa. E o terminal MT4 exibe valores de 5 dígitos na janela indicadora no gráfico.

 
O operador NormalizeDouble() irá resolver seus problemas.
 
Roger:
O operador NormalizeDouble() irá resolver seus problemas.


Isto é, NormalizeDuplo(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) resultará no desejado 0,00012 ?

P.S. Adicionado e testado - nada. A saída é de apenas 0,00010, que é os mesmos 4 bits.

 

Não, não é bem assim, Roger.

IndicatorDigits() ver Boris. Mas deve ser inserido no próprio indicador, pois ele se referirá a ele e não à EA.

P.S. Outra coisa: esta função é adequada apenas para o indicador para o qual você tem o código. Então, será possível chamá-lo usando iCustom().

E para aqueles que são chamados de "padrão" como o iMACD(), eu não conheço a solução certa.

 
pathfinder1:

Portanto, o resultado de NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) será o desejado 0,00000 ?

Sim, é isso mesmo. A frase-chave estava no cálculo no corpo da EA? E aparentemente com o indicador padrão isto é impossível (((
 
pathfinder1:

Como alterar o número de dígitos após o ponto decimal do indicador iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) ao calcular no corpo de especialistas? O resultado é exibido com 4 (ou seja, 0,0001), enquanto que deve ser exibido com 5 (por exemplo, 0,00012) para uma análise precisa. E o terminal MT4 exibe valores de 5 dígitos na janela indicadora no gráfico.

Você não deve alterar nada, a precisão nos indicadores padrão é definida para o máximo (até 8 dígitos), você tirou uma conclusão errada sobre a precisão da saída de dados porque Print() sai até 4 dígitos por padrão, nos cálculos (no intestino dos Expert Advisors por exemplo) a precisão máxima é usada, você precisa sair o dobro através do DoubleToStr() como exemplo:

Print("iMACD ", DoubleToStr(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0), 8));

e obtemos este resultado:

 
ToLik_SRGV:

Você não precisa mudar nada, nos indicadores padrão a precisão é definida para o máximo (até 8 dígitos), você fez uma conclusão errada sobre a precisão da saída de dados porque Print() sai até 4 dígitos por padrão, nos cálculos (no intestino dos Expert Advisors, por exemplo) a precisão máxima é usada, para ver isso você precisa sair o dobro via DoubleToStr(), como um exemplo:

e obtemos tal resultado:


Certo, certo, certo! ! ! Anatoly - grande elogio, eu estava ficando pendurado nisso.

A verdade da vida é que "uma cabeça é boa, mas duas é melhor" (citação)

 
ToLik_SRGV:

Não há necessidade de alterar nada, os indicadores padrão são definidos com a máxima precisão (até 8 dígitos)


É verdade, eu tinha a mesma suspeita :)
 
Como tem sido o caso com freqüência - a verdade está na superfície)) Eu admito minha culpa.