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

 
sss20192:

O indicador tem dados diferentes na janela de dados. Anexei a EA ao gráfico H1 e ele copia os dados dos prazos M5 M15 e H1.


int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );
Buffers (tem zeros) e arrays onde copiamos são todos iguais, começa com 1 elemento, copia 1 elemento, talvez a direcção do array também importe.

 
zfs:
Buffers (tem zeros) e arrays onde se copia são todos iguais, começa com 1 elemento, copia 1 elemento, talvez a direcção do array também importe.

Bem, sim, o primeiro tampão indicador, em três tamframes diferentes. E até agora estou a utilizar a mesma matriz para o registo de dados.

Tentei definir o ArraySetAsSeries como verdadeiro e falso. Mesmo assim, dados por vezes estranhos como -4,53e-32 aparecem no registo.

 

Cavalheiros, podem dizer-me como implementar isto?

Há uma matriz, um valor é-lhe escrito, e se contiver um valor semelhante, há um estrondo.

 
sss20192 Por vezes dados estranhos como -4.53e-32 aparecem de qualquer forma no registo
No lado positivo, devemos inserir verificações tanto para o sucesso da criação de pegas como para o sucesso da função CopyBuffer(). Caso contrário ainda nem sequer sabemos se este valor do lixo é o resultado da execução bem sucedida da função CopyBuffer() ou se a função não funcionou correctamente.
 
Top2n: Há uma matriz, um valor é-lhe escrito, e se contiver um valor semelhante, há uma falha.
É necessário enumerar os elementos da matriz e verificar se estes correspondem ao valor requerido. Se não forem encontradas correspondências, o valor é escrito na matriz.
 
Yedelkin:
Deve tentar pesquisar os elementos da matriz para ver se estes correspondem ao valor requerido. Se não for encontrada nenhuma correspondência, escrever o valor na matriz.
E como comparar dois índices de uma matriz?
 
Top2n:
E como comparar dois índices de uma matriz?

Cuidado ao ler o artigo com atenção ? >> Noções básicas de programação MQL5 - Arrays

Tem todos os detalhes para todos os casos que tratam de matrizes. Deve ser definitivamente suficiente para si. ))

 
tol64:

Cuidado ao ler o artigo com atenção ? >> Noções básicas de programação MQL5 - Arrays

Tem todos os detalhes para todos os casos que tratam de matrizes. Deve ser definitivamente suficiente para si. ))

Obrigado a todos por toda a vossa ajuda!) Não me vou despedir de ti))))
 
Yedelkin:
Friendly, devemos inserir no código as verificações para o sucesso da criação de alças e para o sucesso da função CopyBuffer(). Caso contrário, nem sequer sabemos se este valor de lixo é resultado da execução bem sucedida da função CopyBuffer() ou se a função não funcionou correctamente.

Verificado. As pegas são criadas normalmente, os índices são 10, 11, 12. Mas a função CopyBuffer gera erro ERR_INDICATOR_DATA_NOT_FOUND. Porque pode este erro ocorrer, os pares seleccionados estão na janela Market Watch, os gráficos destes pares de moedas estão abertos.

Além disso, crio uma variável, que mostra o resultado da execução do CopyBuffer,

int aaa = CopyBuffer..., mostra o valor 1, como se um valor fosse copiado, como definido na função.


Ao copiar o buffer MA, o mesmo erro é mostrado, mas o valor é escrito correctamente no array.

Por favor, mostre-nos um exemplo de cópia de buffer correcta

 
sss20192: Verificado. As pegas são criadas normalmente e têm os índices 10, 11 e 12. Mas a função CopyBuffer gera o erro ERR_INDICATOR_DATA_NOT_FOUND. Porque pode ocorrer tal erro, os pares seleccionados estão na janela do Market Watch, os gráficos destes pares de moedas estão abertos.

Além disso, crio uma variável que mostra o resultado da execução de CopyBuffer,

int aaa = CopyBuffer..., mostra o valor 1, como se um valor fosse copiado, como definido na função.

Ao copiar o buffer MA, o mesmo erro é mostrado, mas o valor é escrito correctamente no array.

Por favor mostre-me um exemplo de como copiar correctamente o buffer

Sim, o exemplo de cópia de buffer está correcto na descrição da função CopyBuffer(). Por favor, preste atenção às linhas

//--- check if all data calculated
    if(BarsCalculated(ma_handle)<rates_total) 

//--- try to copy
    if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0);
 
Razão: