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).
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.
__________________________________________________________________________________________ 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
Timur1988: 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[];
int i,p;
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
Alexey Kozitsyn: 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.
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 isso, você provavelmente não deveria ser aconselhado, mas talvez reconsidere sua decisão quando encontrar alguns problemas.
Alexey Kozitsyn: 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.
Cada variável tem seu próprio escopo. Mesmo dentro dos suportes encaracolados existe um escopo diferente para a variável declarada nesse escopo - dentro dos suportes encaracolados. Então, por exemplo, por que eu deveria criar variáveis de índice de loop com nomes diferentes em lugares diferentes de um programa se eu sei que elas não se sobrepõem e é suficiente, e costumeiro, usar um nome de variável como "i"?
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.