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

 
mila.com:

o assessor foi feito para verificar a possibilidade em si, ela abre corretamente, mas no indicador não vê os valores dos dois amortecedores próximos do indicador "Seta v.3" em absoluto

Portanto, você tem um indicador fora da matriz no laço. Veja qual é o limite e quais são os valores nos laços aninhados. Onde índice il se refere quando limite ==taxas_total-2 ?

 
mila.com:

Como você vê isso?

Veja seu código

 
Artyom Trishkin:

Veja qual é o limite, e quais são os valores nos ciclos aninhados.

imprime o número de barras da primeira e segunda flechas, alternadamente

  for(int i=limit; i>=0; i--) 
     {
     for(int il=i+1;il<=i+300;il++)
        {
         if(NormalizeDouble(iCustom(NULL,0,"Arrow v.3",0,il),Digits)!=EMPTY_VALUE
            )
           {
            num_buy=il;
            Print(il);
           // break;
           }
        }
//
      if(num_buy==60)
        {
         BufferUP[i+1]=low[i+1]-distance*MyPoint;
         
        }
    }
 
Artyom Trishkin:

Verifique seu código

Já faz três dias que estou olhando para ele, não sei o que está errado).

Ajude-me
 
mila.com:

imprime o número de barras da primeira e segunda flechas, alternadamente

Que tipo de ciclo estranho é este, afinal?

Por que você vai do início da história até o fim e continua voltando trezentas barras em um loop aninhado a cada iteração do primeiro loop?

Você provavelmente é salvo pelo iCustom(), que não fornece valores fora dos dados do histórico.

Bem, dê uma olhada por si mesmo. Suponha que você tenha um histórico de apenas 1000 barras: taxas_total neste caso, você tem 1000. Limite, 1000-2=998. Assim, a primeira barra da história é excluída do laço. Não se preocupe com isso.

Primeiro você coloca um índice na barra com o número 998 (tarifas_total-2 = 1000-2 = 998),

e depois o que você faz? Então você incorpora o loop começando pelo valor i, igual a 998+1=999 - esta é a primeira barra da história - não há mais nada à esquerda - ele está vazio. E você faz o loop de 999 a 999+300. Não há dados lá - isto está indo para fora da matriz.

Portanto, o limite nesta situação deve ser tal, que o laço embutido, logo no início, chegará à barra 999. Isto é tarifas_total-2-300. Então, desde que você inicia o loop aninhado a partir de i+1, é quando não haverá nenhuma ultrapassagem da matriz: i=1000-2-300 = 698. No laço aninhado, li=i+1 = 698+1=699, e até li=i+300 = 698+300=998. Mais uma vez, a primeira barra é excluída do cálculo. Mas não há nenhuma ultrapassagem da matriz.

Aparentemente, você não sabe bem o que está fazendo.

Isto é indicado por um loop muito estranho em geral.

Você não precisa de laços aninhados ali. Se você estiver procurando um determinado número de valores no buffer do indicador personalizado, então faça o ciclo de zero a um determinado valor. Mas não mais do que tarifas_total.

 
Artyom Trishkin:

Que tipo de ciclo estranho é este, afinal?

Por que você vai do começo ao fim da história e constantemente volta trezentas barras em um loop aninhado a cada iteração do primeiro loop?

Você provavelmente é salvo pelo iCustom(), que não fornece valores fora dos dados do histórico.

Bem, dê uma olhada por si mesmo. Suponha que você tenha um histórico de apenas 1000 barras: taxas_total neste caso, você tem 1000. Limite, 1000-2=998. Assim, a primeira barra da história é excluída do laço. Que assim seja.

Primeiro você coloca um índice na barra com o número 998 (tarifas_total-2 = 1000-2 = 998),

e depois o que você faz? Então você incorpora o loop começando pelo valor i, igual a 998+1=999 - esta é a primeira barra da história - não há mais nada à esquerda - ele está vazio. E você faz o loop de 999 a 999+300. Não há dados lá - isto está indo para fora da matriz.

Portanto, o limite nesta situação deve ser tal, que o laço embutido, logo no início, chegará à barra 999. Isto é tarifas_total-2-300. Então, desde que você começa o loop aninhado de i+1, é quando você não vai além da matriz: i=1000-2-300 = 698. No laço aninhado, li=i+1 = 698+1=699, e até li=i+300 = 698+300=998. Mais uma vez, a primeira barra é excluída do cálculo. Mas não há nenhuma ultrapassagem da matriz.

Aparentemente, você não sabe bem o que está fazendo.

Isto é indicado por um loop muito estranho em geral.


Obrigado, isso é muito claro.

 
Artyom Trishkin:

Isto é indicado por um loop muito estranho em geral.

Você não precisa de laços aninhados ali. Se você estiver procurando por um certo número de valores tampão indicadores personalizados, então faça um loop de zero a um certo valor. Mas não mais do que tarifas_total.

Por que de zero?

Preciso colocar um ponto se na terceira ou "N" barra houver uma seta do chamado indicador. Sobre toda a história

Qual é o ciclo correto?

 
mila.com:

Por que de zero?

Eu preciso apontar se houver uma seta na terceira ou "N" barra do indicador a ser chamado. Em toda a história.

Qual é o ciclo correto?

Onde isso deve ser feito? Em um indicador? Em um EA?

 
Artyom Trishkin:

Onde isso deve ser feito? Em um indicador? Em um EA?

Em um indicador

 
mila.com:

No indicador

Portanto, leia iCustom() diretamente pelo primeiro índice de laço.

Outra questão é que você precisa de dados da barra atual à esquerda. É por isso que eu digo - leia do zero para o encontrado, mas não mais do que taxas_total-1.

E ler somente quando o limite>1

Caso contrário, não há novos dados e o índice da barra que você precisa não mudará.