Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 17
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
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_level1 0.8
#property indicator_level2 -0.8
#property indicator_levelcolor Black
#property indicator_color1 Blue
#property indicator_minimum -1
#property indicator_width1 2
#property indicator_style1 0
#property indicator_maximum 1
double Buffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//--- indicator buffers mapping
SetIndexBuffer(0, Buffer1);
SetIndexStyle(0, DRAW_LINE);
return(0);
//---
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int n=25; // количество элементов в массиве(для периода H1 n=25, тк i<n)
int m=24; // количество массивов(для периода H1 m=24, тк p=0, p<m)
int w=18; // количество заков после запятой
double Price_CloseX[][24]; // Массив цен закрытия 1 пары
double Price_CloseY[][24]; // Массив цен закрытия 2 пары
double dx[][24]; // Отклонение от среднего значения для пары 1 dx
double dy[][24]; // Отклонение от среднего значения для пары 2 dy
double dx2[][24]; // Квадрат отклонения ср.значения dx2
double dy2[][24]; // Квадрат отклонения ср.значения dy2
double dxdy[][24]; // Произведение dx и dy
double sum_x[][24];
double sum_y[][24];
double Mx[][24]; // Массив среднего значения цен закрытия пары 1 Mx
double My[][24]; // Массив среднего значения цен закрытия пары 2 My
double Edx2[][24]; // Сумма квадратов отклонений Edx2
double Edy2[][24]; // Сумма квадратов отклонений Edy2
double Edxdy[][24]; // Сумма произведений отклонений Edxdy
double Koef[];
ArrayResize(Price_CloseX, n);
ArrayResize(Price_CloseY, n);
ArrayResize(dx, n);
ArrayResize(dy, n);
ArrayResize(dx2, n);
ArrayResize(dy2, n);
ArrayResize(dxdy, n);
ArrayResize(sum_x, n);
ArrayResize(sum_y, n);
ArrayResize(Mx, n);
ArrayResize(My, n);
ArrayResize(Edx2, n);
ArrayResize(Edy2, n);
ArrayResize(Edxdy, n);
ArrayResize(Koef, n);
string sym_x="EURUSD";
string sym_y="GBPUSD";
for(int i=1; i<n; i++)
{
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 i=1; i<n; i++)
{
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];
}
}
for(int i=1; i<n; i++)
{
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);
}
}
for(int i=1; i<n; i++)
{
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];
}
}
for(int i=1; i<n; i++)
{
for(int p=0; p<m; p++)
{
dx2[i][p]=(dx[i][p]*dx[i][p])*1000000;
dy2[i][p]=(dy[i][p]*dy[i][p])*1000000;
}
}
for(int i=1; i<n; i++)
{
for(int p=0; p<m; p++)
{
dxdy[i][p]=(dx[i][p]*dy[i][p])*1000000;
}
}
for(int i=1; i<n; i++)
{
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]);
}
}
for(int p=0; p<m; p++)
{
Koef[p]=Edxdy[n-1][p]/sqrt(Edx2[n-1][p]*Edy2[n-1][p]);
Buffer1[p]=Koef[p];
Alert("Коэффициент корреляции Пирсона между ", sym_x, " и ", sym_y, " равен ", DoubleToString(Koef[p], w));
Alert("Значение буфера ", p, " равно ", Buffer1[p]);
}
return(0);
}
Você pode me dizer onde está o erro? Os valores dos elementos da matriz Koef[] são calculados, a cada elemento é atribuído um valor. Por que o Buffer1[] não é designado?
Tente remover o Alerta do último ciclo
não ajudou(
Ótimo, eles são inúteis lá. É melhor usar Print(...) em vez de alertas, e veja a impressão na guia "Especialistas".
Você tem o mesmo valor que Edxdy[n-1][p] sendo atribuído. Se em loops anteriores você tem um loop dentro de um loop e "n" índice muda, no último ele não muda. Último n-1=24.
Tente com ousadia - será que ele vai atribuir? //indicador deve traçar uma linha preta horizontal. No entanto, não será visível sobre um fundo negro. Mude a cor do fundo, ou melhor, a linha.
Se for designado, você deve pensar - o que está escrito aqui: Edxdy[24][p]
Hehe, ou talvez tudo seja atribuído e desenhado, mas trata-se de desenhar uma linha preta sobre um fundo preto?
Aqui é onde a cor, o tipo e a espessura da linha são especificados:
Ótimo, eles são inúteis lá. É melhor usar Print(...) em vez de alertas, e veja a impressão na guia "Especialistas".
Você tem o mesmo valor que Edxdy[n-1][p] sendo atribuído. Se em loops anteriores você tem um loop em loop e "n" índice muda, no último ele não muda. Último n-1=24.
Tente com ousadia - será que ele vai atribuir? //indicador deve traçar uma linha preta horizontal. No entanto, não será visível sobre um fundo negro. Mude a cor do fundo, ou melhor, a linha.
Se for designado, você deve pensar - o que está escrito aqui: Edxdy[24][p]
Heh, talvez tudo seja atribuído e desenhado, mas trata-se de desenhar uma linha preta sobre um fundo preto?
Aqui você pode ver a cor, o tipo e a espessura da linha:
Edxdy[n-1][p] - aqui eu escrevi a soma do produto de dx e tintura. Este valor é necessário para calcular o coeficiente de correlação Koef de Pearson para uma matriz composta por n-1 elementos da dimensão p-ésimo. Neste caso, decidi calcular a correlação para 24 barras, a partir da primeira barra. O resultado comparado ao cálculo semelhante do coeficiente de correlação da Pearson, que calcula um script simples (foi tomado apenas um array unidimensional), assim como o site "calculadora de correlação de pares de moedas on-line". Todos os valores são os mesmos. Acredito que há um erro na declaração da matriz Buffer1[]. Criei um script com código similar, mais declaração de array via ArrayResize(Buffer1, n). No código de script Buffer1[p]=Koef[p] - os valores são atribuídos corretamente. Não no código indicador(((.
Você leu meu post?
SetIndexStyle(0,DRAW_LINE,0,1,Green); - coloca valores, mas ainda não traça uma linha.
Sim, obrigado!
SetIndexStyle(0,DRAW_LINE,0,1,Green); - coloca valores, mas ainda não traça linha.
Tente também remover os limitadores#indicador de propriedade_mínimo-1,#indicador de propriedade_máximo1, talvez os valores de tampão sejam traçados atrás deles.
Obrigado! Removido #propriedade estrita - ajudado)