[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 661

 
artmedia70:

Ainda não está funcionando... e exatamente AC

captura no registro, talvez o recálculo esteja incorreto e a condição nunca funcione, como AC1 = 0 e AC2 = 0 e nunca haverá 0 > 0

print(AC1,AC2) ;
if (BB>0 && OsMA>0 && AC1>AC2) return(1);

 
IgorM:

captura no registro, talvez o recálculo esteja errado e a condição nunca será cumprida, como AC1 = 0 e AC2 = 0 e nunca 0 > 0

imprimir(AC1,AC2) ;
se (BB>0 && OsMA>0 && AC1>AC2) retornar(1);

abaixo:

senão voltar(0);

 

Obrigado, Igor. Acho que é onde o cão está enterrado... :)

Eu tenho Comentário() que produzem o mesmo AC1 e AC2 = 0,01, embora na janela de dados eles tenham AC1=0,001008, AC2=0,001020.
Como posso aumentar a capacidade de dígitos? Bem, além de uma multiplicação trivial por 1000, ou algo assim?

 
IgorM:

Sim, por isso, vou tentar até o primeiro pico e depois ........ - Eu não consigo entender.


Feito. Aqui está o resultado de seu trabalho.

O código não é muito complicado, portanto, você não deve ter problemas para reorganizá-lo de acordo com suas necessidades.

O roteiro é anexado ao post.

Arquivos anexados:
0.mq4  4 kb
 

Esta é uma entrada correta:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
 
artmedia70:

Até agora, não está funcionando... e é o ar condicionado.

A única saída é descobrir exatamente quais valores estão nas variáveis - isto nos mostrará porque a condição programada não funciona.

Se o arredondamento for automático até 0,01, então o mais provável é que o teste passe em um instrumento como o UsdJpy. Então há uma opção para trabalhar com variáveis de cadeia (se você realmente precisar de uma casa decimal tão distante)

 
drknn:
A única saída é descobrir exatamente quais valores estão nas variáveis - isto nos mostrará porque a condição programada não funciona.
Obrigado Vladimir, eu encontrei a razão. A pergunta acima de dois cargos...
 
drknn:


Feito. Aqui está o resultado de seu trabalho.


Obrigado, tudo bem - funciona, só não consegui descobrir como entrar na bandeira de tendência - pensei que era como classificar uma matriz
 
artmedia70:

Esta é uma entrada correta:


Correto, porque o primeiro parâmetro retorna um número e o segundo parâmetro é um valor inteiro dentro de limites aceitáveis. A questão inteira é o que exatamente irá entrar na variável. Tente imprimir como está e experimente esta construção:

double AC1=NormalizeDouble(iAC(sy,tf,1),8);
string str=AC1;
Print("str = ",str);
 
IgorM:

Obrigado, tudo bem - funciona, só não consegui descobrir como entrar na bandeira de tendência - achei que precisava classificar a matriz


O problema de trabalhar com arrays é que, assim que a função se depara com um valor dado, ela retorna o número da célula onde esse valor é armazenado. E o fato de que este valor pode ser encontrado em outras células da matriz é exatamente a parte complicada. Portanto, temos que manter a iteração, continuar passando pelos valores até que tenhamos passado por todo o conjunto. E assim que encontramos o valor correto, colocamos o índice de células em uma matriz previamente criada, ou costuramos as fileiras juntas.

A complexidade de seu problema é que você tem que procurar por picos/trocas. Para encontrá-lo, você precisa pular o extremo e só então o código perceberá que de fato o pulou. É por isso que temos que recuar um passo para lembrar o ponto extremo e a célula em que ele se encontra.