Olá pessoal!
Estou aprendendo a fazer códigos no MetaEditor e recentemente me deparei com um problema no qual não consigo encontrar uma saída. Ficaria muito grato se alguém pudesse me dar uma "mãozinha".
O código consiste em imprimir os últimos valores das médias móveis de diferentes Timeframes.
Atualmente tenho isso:
Porém está me retornando o erro ARRAY OUT OF RANGE nas linhas para calcular os valores de m1, m2, m3, m4, m5 e m6.
Agradeço muito desde já pela atenção!
só dei uma olhada muito rápida, mas se vc esta pegando a posição 0 do array
CopyBuffer(media17_M1,0,0,bc_1,maArray1);
a linha abaixo (e todas as outras com esse -1 dentro dos []:
m1 = maArray1[bc_1-1];
vão buscar a posição "-1" em um array - o que é impossível!
você pode fazer uma condicional para só executar se bc_1 for maior que zero (if bc_1 > 0) ....
CopyBuffer(media17_M1,0,0,rates_total,maArray1); CopyBuffer(media72_M1,0,0,rates_total,maArray2); CopyBuffer(media17_M5,0,0,rates_total,maArray3); CopyBuffer(media72_M5,0,0,rates_total,maArray4); CopyBuffer(media17_M15,0,0,rates_total,maArray5); CopyBuffer(media72_M15,0,0,rates_total,maArray6); double m1, m2, m3, m4, m5, m6; m1 = maArray1[0]; m2 = maArray2[0]; m3 = maArray3[0]; m4 = maArray4[0]; m5 = maArray5[0]; m6 = maArray6[0]; Print("avg1 = ",m1); Print("avg2 = ",m2); Print("avg3 = ",m3); Print("avg4 = ",m4); Print("avg5 = ",m5); Print("avg6 = ",m6);
Olá pessoal!
Primeiramente, gostaria muito de agradecer à vocês pela ajuda!
Com esses feedbacks consegui resolver o problema da seguinte forma:
bc_1 = BarsCalculated(media17_M1); bc_5 = BarsCalculated(media17_M5); bc_15 = BarsCalculated(media17_M15); CopyBuffer(media17_M1,0,0,bc_1,maArray1); CopyBuffer(media72_M1,0,0,bc_1,maArray2); CopyBuffer(media17_M5,0,0,bc_5,maArray3); CopyBuffer(media72_M5,0,0,bc_5,maArray4); CopyBuffer(media17_M15,0,0,bc_15,maArray5); CopyBuffer(media72_M15,0,0,bc_15,maArray6); double m1, m2, m3, m4, m5, m6; m1 = maArray1[rates_total-1]; m2 = maArray2[rates_total-1]; m3 = maArray3[rates_total-1]; m4 = maArray4[rates_total-1]; m5 = maArray5[rates_total-1]; m6 = maArray6[rates_total-1]; Print("avg1 = ",m1); Print("avg2 = ",m2); Print("avg3 = ",m3); Print("avg4 = ",m4); Print("avg5 = ",m5); Print("avg6 = ",m6);
Desta forma, o código está me mostrando os valores atuais das médias móveis de 17 e 72 nos timeframes M1, M5 e M15. Agora partirei para a próxima etapa que é realizar algumas lógicas com esses valores.
Mas fiquei meio confuso com o código até agora...
Os valores atuais de "bc_1", "bc_5", "bc_15" quando utilizo o comando BarsCalculated, para cada tempo gráfico são estes:
bc_1 = 17520
bc_5 = 4586
bc_15 = 1778
Isto significa que cada array vai ter um tamanho diferente nessa parte:
CopyBuffer(media17_M1,0,0,bc_1,maArray1); CopyBuffer(media72_M1,0,0,bc_1,maArray2); CopyBuffer(media17_M5,0,0,bc_5,maArray3); CopyBuffer(media72_M5,0,0,bc_5,maArray4); CopyBuffer(media17_M15,0,0,bc_15,maArray5); CopyBuffer(media72_M15,0,0,bc_15,maArray6);
Até aí tudo bem.. O que me deixou confuso foi esta parte:
double m1, m2, m3, m4, m5, m6; m1 = maArray1[rates_total-1]; m2 = maArray2[rates_total-1]; m3 = maArray3[rates_total-1]; m4 = maArray4[rates_total-1]; m5 = maArray5[rates_total-1]; m6 = maArray6[rates_total-1];
Por que o código me retorna os valores corretos (valores atuais das médias móveis de 17 e 72 nos timeframes M1, M5 e M15) se "rates_total" não é do mesmo tamanho dos arrays? Como ele consegue buscar os valores atuais, no caso os últimos valores dos arrays?
Muito obrigado mais uma vez pela atenção!
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá pessoal!
Estou aprendendo a fazer códigos no MetaEditor e recentemente me deparei com um problema no qual não consigo encontrar uma saída. Ficaria muito grato se alguém pudesse me dar uma "mãozinha".
O código consiste em imprimir os últimos valores das médias móveis de diferentes Timeframes.
Atualmente tenho isso:
Porém está me retornando o erro ARRAY OUT OF RANGE nas linhas para calcular os valores de m1, m2, m3, m4, m5 e m6.
Agradeço muito desde já pela atenção!