Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 19
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Para corrigir este erro, você precisa entender sua fórmula - o que, por que e como você está contando.
E só então você será capaz de elaborar seu algoritmo e eliminar o erro.
Pelo método "gut feeling" e não compreender sua fórmula - você eliminará o erro, mas fará um cálculo errado.
p.s. Explique em detalhes o que você está calculando -- comente seu código em detalhes -- e então entenderemos como você irá corrigir o erro.
Precisamos de um indicador que se baseie nos valores do coeficiente de correlação Pearson por preços próximos. Tomamos um conjunto de 24 barras (no meu caso é variável n), a partir da primeira barra - para 2 moedas. Calcule a correlação para 24 barras - obtenha valor na primeira barra. Em seguida, calcular a correlação para 24 barras, mas a partir da segunda barra e assim por diante.
1. Tomei uma matriz bidimensional de preços de fechamento (i elementos e p dimensões).
{
for(int p=0; p<m; p++)
{
Price_CloseX[i][p]=iClose(sym_x, PERIOD_H1, i+p);
Price_CloseY[i][p]=iClose(sym_y, PERIOD_H1, i+p);
}
}
{
for(int p=0; p<m; p++)
{
sum_x[i][p]=sum_x[i][p-1]+Price_CloseX[i][p];
sum_y[i][p]=sum_y[i][p-1]+Price_CloseY[i][p];
}
}
3. Preço médio de fechamento acima de 24 barras(n-1) em cada matriz
{
for(int p=0; p<m; p++)
{
Mx[i][p]=sum_x[p+1][m-1]/(n-1);
My[i][p]=sum_y[p+1][m-1]/(n-1);
}
}
4. O desvio do preço médio em cada matriz
{
for(int p=0; p<m; p++)
{
dx[i][p]=Price_CloseX[i][p]-Mx[i][p];
dy[i][p]=Price_CloseY[i][p]-My[i][p];
}
}
5. O quadrado do desvio em relação ao preço médio de fechamento
{
for(int p=0; p<m; p++)
{
dx2[i][p]=(dx[i][p]*dx[i][p]);
dy2[i][p]=(dy[i][p]*dy[i][p]);
}
}
6. O produto dos desvios, ou seja, cada elemento da matriz de moedas 1 é multiplicado por um elemento similar na moeda 2,
por exemplo, o valor de dx[1][0](moeda 1) é multiplicado por dy[1][0](moeda 2); dx[3][4]*dy[3][4], etc.
{
for(int p=0; p<m; p++)
{
dxdy[i][p]=(dx[i][p]*dy[i][p]);
}
}
7. Calcular a soma dos quadrados dos desvios e a soma do produto dos desvios
{
for(int p=0; p<m; p++)
{
Edx2[i][p]=(Edx2[i-1][p]+dx2[i][p]);
Edy2[i][p]=(Edy2[i-1][p]+dy2[i][p]);
Edxdy[i][p]=(Edxdy[i-1][p]+dxdy[i][p]);
}
}
8. Bem, na verdade, o coeficiente de correlação e substituí-lo no buffer
{
Koef[p]=Edxdy[n-1][p]/sqrt(Edx2[n-1][p]*Edy2[n-1][p]);
Buffer1[p]=Koef[p];
}
__________________________________________________________________________________________
Como foi escrito acima, o erro é uma matriz ultrapassada. O roteiro com o mesmo código para o cálculo do coeficiente de correlação considera este coeficiente
Quando #property strict foi escrito, o compilador gerou erros em cada loop for() dizendo que as variáveis devem ser do tipo, então eu tive que escrever int i e int p em cada loop. Depois disso, o compilador não gerou erros, mas a linha não foi construída. Quando removi o #property strict, o compilador não exigia declarar o tipo em cada laço, e a linha foi construída.
int i e int p só precisam ser declaradas uma vez - antes do init()
você pode escrever tal linha antes de duplicar o tampão1[];
no código int remover
#propriedade estrita deve ser devolvida
então executar a compilação novamente
depois verificar se há erros
então, no caso de excesso de matriz, veja em qual linha de código (o número é de interesse e a própria linha). Antes, era a linha número 90 em seu código.
O erro significa que se você tiver 24 valores na matriz, e solicitar o 24º índice, então . é um erro. Tente descobrir. A numeração do índice começa em zero, ou seja, no seu caso 0,1,...23.
Se não conseguirmos entender - jogue esta linha aqui, vamos pensar
int i e int p só precisam ser declaradas uma vez - antes do init()
"O caminho para a programação do inferno está pavimentado com variáveis globais". S. McConnell.
Às vezes é mais difícil sem eles, mas não no caso do indicador em questão.
Concordo, às vezes não se pode passar sem eles. Mas não neste caso.
Neste caso, mais código é escrito do que é necessário e suficiente.
A propósito, você também pode escrever tipo antes de cada variável, mesmo que o nome da variável seja o mesmo...., mas não é a construção de código correta.
Neste caso, mais código é escrito do que o necessário.
A propósito, você também pode escrever tipo antes de cada variável, mesmo que o nome da variável seja o mesmo...., mas esta não é a construção de código correta.
Na verdade, eu faço, você provavelmente não deveria ser aconselhado a fazê-lo, mas talvez você reconsidere sua decisão quando encontrar alguns problemas.
...
Neste caso, você escreveu mais código do que o necessário e o suficiente.
A propósito, você também pode escrever tipo antes de cada variável, mesmo que o nome da variável seja o mesmo...., mas esta não é a construção de código correta.