Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 471

 
Mike:
1. Todos coincidem.
2. Não existe tal parâmetro.
Foi-me dito noutra linha que este problema é insolúvel em MT4. :(

2. Não sei onde obteve o MA numa janela separada para poder dizer-lhe algo sobre o parâmetro. Mas... Se tirar de Indicators --> Osciladores --> Moving Averages of Oscillator, tem "Apply to:"

Assim, se tentar colocar outro indicador numa janela separada, em alguns casos, ele pode ser aplicado não só aos preços padrão da enumeração ENUM_APPLIED_PRICE, mas também aos dados desse indicador que já se encontram na janela. Talvez se encontre apenas nesta situação.

3. Qual é o problema? Que os três MA não correspondem a três MA semelhantes (de acordo com a sua declaração) MA? Portanto, não é insolúvel, é um disparate. Se forem feitos correctamente, são obrigados a corresponder. Qual é a diferença - três MA separados com os seus próprios parâmetros ou os mesmos três MA com os mesmos parâmetros, mas amontoados num único indicador com três amortecedores... Consegue ver a diferença? Não tenho. E se o vir, então procure inconsistências no cálculo de MAKs.

A propósito... O crocodilo é três MAs num só indicador, cada um com os seus próprios parâmetros. Configure os parâmetros da mesma forma com os seus três MA separados e eles coincidirão. Mas tem toda esta bacanalia numa janela separada... Portanto ... como exemplo

 
Mike:
Eu fiz um indicador 3MA(4,9,14) e decidi compará-lo para verificar a sua correcção com uma janela onde os três indicadores são MA(4), MA(9), MA(14). Fiquei de cabelo em pé. :)
Tente desactivar a auto-escala das janelas indicadoras, talvez tudo se acalme.
"Onde existem três indicadores - MA(4), MA(9), MA(14)" a janela indicadora é auto-escalonada pelo primeiro indicador anexado a esta janela. No seu caso, é provavelmente o MA(4)
 

Pode por favor dar-me um desenho para obter o valor do indicador incorporado a partir do período de tempo superior, mas dentro deste período de tempo.

Ou seja, o gráfico actual é de 15 minutos, preciso de obter o valor do indicador, calculado por dia, mas há 45 minutos, como fazer isto?

Aqui está um algoritmo simples que retorna o valor do indicador, mas apenas para a barra actual.

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

 
Leo59:
Tente desactivar a auto-escala das janelas indicadoras, talvez as coisas se acalmem.
"onde os três indicadores são MA(4), MA(9), MA(14)" a janela indicadora é auto-escalonada pelo primeiro indicador anexado a essa janela. No seu caso, é provavelmente MA(4)
Onde se desactiva esta auto-escala?
 
Artyom Trishkin:

2. Não sei onde obteve o MA numa janela separada para poder dizer-lhe algo sobre o parâmetro. Mas... Se tirar de Indicators --> Osciladores --> Moving Averages of Oscillator, tem "Apply to:"

Assim, se tentar colocar outro indicador numa janela separada, em alguns casos, ele pode ser aplicado não só aos preços padrão da enumeração ENUM_APPLIED_PRICE, mas também aos dados desse indicador que já se encontram na janela. Talvez se encontre apenas nesta situação.

3. Qual é o problema? Que os três MA não correspondem a três MA semelhantes (de acordo com a sua declaração) MA? Portanto, não é insolúvel, é um disparate. Se forem feitos correctamente, são obrigados a corresponder. Qual é a diferença - três MA separados com os seus próprios parâmetros ou os mesmos três MA com os mesmos parâmetros, mas amontoados num único indicador com três amortecedores... Consegue ver a diferença? Não tenho. E se o vir, então procure um desajuste nos cálculos do MAK.

A propósito... O crocodilo é três MAs num só indicador, cada um com os seus próprios parâmetros. Configure os parâmetros da mesma forma que os seus três AMs separados e eles corresponderão. Mas tem toda esta bacanalia numa janela separada... Portanto ... como exemplo

Artyom, "Aplicar a" - existe apenas uma listagem de preços. Os cálculos da MA estão correctos, as três linhas são verificadas adicionando um único indicador com um período de 4, depois 9, depois 14 à janela com o indicador 3MA. Em cada caso, o indicador único coincide com a linha correspondente do indicador 3MA
 
Mike:
Artyom, "Aplicar a" - há apenas uma enumeração de preços. Os cálculos da MA estão correctos, as três linhas foram verificadas adicionando um único indicador com o período 4, depois 9, depois 14 à janela do indicador 3MA. Em cada caso, o indicador único coincide com a linha correspondente do indicador 3MA
Qual é então o problema? Presumo que não goste do desajuste visual das linhas nas diferentes janelas. Prima Ctrl+D, passe o rato sobre as linhas indicadoras e olhe na janela de dados para ver se coincidem...
 
-Aleks-:

Pode por favor dar-me um desenho para obter o valor do indicador incorporado a partir do período de tempo superior, mas dentro deste período de tempo.

Ou seja, o gráfico actual é de 15 minutos, preciso de obter o valor do indicador, calculado por dia, mas há 45 minutos, como fazer isto?

Aqui está um algoritmo simples que retorna o valor do indicador, mas apenas para a barra actual.

double iDelta(int Variant,int n,int TF,int index)

  {

   double Fibo=0;

   if(Variant==1) Fibo=0.236;

   if(Variant==2) Fibo=0.382;

   if(Variant==3) Fibo=0.5;

   if(Variant==4) Fibo=0.618;

   if(Variant==5) Fibo=0.764;

   if(Variant==6) Fibo=1;

   if(Variant==7) Fibo=1.236;

   if(Variant==8) Fibo=1.382;

   if(Variant==9) Fibo=1.5;

   if(Variant==10) Fibo=1.618;

   if(Variant==11) Fibo=2.0;

   if(Variant==12) Fibo=2.236;

   if(Variant==-1) Fibo=-0.236;

   if(Variant==-2) Fibo=-0.382;

   if(Variant==-3) Fibo=-0.5;

   if(Variant==-4) Fibo=-0.618;

   if(Variant==-5) Fibo=-0.764;

   if(Variant==-6) Fibo=-1;

   if(Variant==-7) Fibo=-1.236;

   if(Variant==-8) Fibo=-1.382;

   if(Variant==-9) Fibo=-1.5;

   if(Variant==-10) Fibo=-1.618;

   if(Variant==-11) Fibo=-2.0;

   if(Variant==-12) Fibo=-2.236;

   return ( NormalizeDouble(iOpen(Symbol(),TF,index)+iATR(Symbol(), TF, n, index+1)*Fibo,Digits) );

  } 

Não posso responder à pergunta, mas a função pode ser simplificada e significativamente acelerada.
Ao inicializar o indicador, crie uma matriz estática

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

e tudo se emiDelta() pode ser substituído por:

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

 
Mike:

Não posso responder à pergunta, mas a função pode ser simplificada e significativamente acelerada.
Durante a inicialização do indicador criar uma matriz estática

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

e todos os if's emiDelta() podem ser substituídos por:

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

Obrigado, vou tentar, talvez seja melhor.

 
Mike:

Não posso responder à pergunta, mas a função pode ser simplificada e significativamente acelerada.
Na inicialização do indicador criar uma matriz estática

double arrFibo[13] = {0.0, 0.236, 0.382, ..., 2.236};

e todos os ifs emiDelta() podem ser substituídos por:

if (Variant>0)
    Fibo =  arrFibo[ Variant];
else
    Fibo = -arrFibo[-Variant];

Eu fiz. como escreveu, mas não funcionou como deveria - ainda não sei o que está exactamente errado - preciso de imprimir....

Não compreendo o fio.

else           Fibo = -arrFibo[-Variant];

Então, o que obtemos? Estamos a pedir o índice negativo da matriz ou o quê?
 
-Aleks-:

Fi-lo como escreveu, mas não funciona como deveria - ainda não sei o que está errado - preciso de imprimir....

Não compreendo a linha.

else           Fibo = -arrFibo[-Variant];

Acontece que estamos a pedir um índice negativo da matriz ou o quê?
No caso de Variant ser negativa, a expressão -Variant dá um índice positivo para um fetching de array.
No mesmo caso, precisamos de valores negativos de Fibo, portanto -arrFibo.
Razão: