Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 17
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
#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);
}
Pouvez-vous me dire où se trouve l'erreur ? Les valeurs des éléments du tableau Koef[] sont calculées, chaque élément se voit attribuer une valeur. Pourquoi Buffer1[] n'est-il pas assigné ?
Essayez de retirer l'alerte du dernier cycle
n'a pas aidé(
Bien, ils sont inutiles là. Vous feriez mieux d'utiliser Print(...) au lieu d'alertes, et de regarder l'impression dans l'onglet "Experts".
Vous avez la même valeur Edxdy[n-1][p] qui est assignée. Si dans les boucles précédentes vous avez une boucle dans une boucle et que l'indice "n" change, dans la dernière il ne change pas. Dernier n-1=24.
Essayez-le avec audace - est-ce que ça va marcher ? //L'indicateur doit dessiner une ligne noire horizontale. Cependant, il ne sera pas visible sur un fond noir. Changez la couleur de l'arrière-plan, ou mieux la ligne.
Si elle sera assignée, vous devriez penser - ce qui est écrit ici : Edxdy [24] [p]
Heh, peut-être que tout est assigné et dessiné, mais il s'agit de dessiner une ligne noire sur un fond noir ?
C'est ici que sont spécifiés la couleur, le type et l'épaisseur de la ligne :
Bien, ils sont inutiles là. Vous feriez mieux d'utiliser Print(...) au lieu d'alertes, et de regarder l'impression dans l'onglet "Experts".
Vous avez la même valeur Edxdy[n-1][p] qui est assignée. Si dans les boucles précédentes vous avez une boucle dans une boucle et que l'indice "n" change, dans la dernière il ne change pas. Dernier n-1=24.
Essayez-le avec audace - est-ce que ça va marcher ? //L'indicateur doit dessiner une ligne noire horizontale. Cependant, il ne sera pas visible sur un fond noir. Changez la couleur de l'arrière-plan, ou mieux la ligne.
Si elle sera assignée, vous devriez penser - ce qui est écrit ici : Edxdy [24] [p]
Hehe, ou peut-être que tout est attribué et dessiné, mais il s'agit de dessiner une ligne noire sur un fond noir ?
Vous pouvez voir ici la couleur, le type et l'épaisseur de la ligne :
Edxdy[n-1][p] - ici j'ai écrit la somme du produit de dx et dy. Cette valeur est nécessaire pour calculer le coefficient de corrélation de Pearson Koef pour un tableau composé de n-1 éléments de la p-ième dimension. Dans ce cas, j'ai décidé de calculer la corrélation pour 24 barres, en commençant par la première barre. Le résultat est comparé à un calcul similaire du coefficient de corrélation de Pearson, qui calcule un script simple (il n'a été pris qu'un tableau unidimensionnel), ainsi que le site "online currency pair correlation calculator". Toutes les valeurs sont les mêmes. Je pense qu'il y a une erreur dans la déclaration du tableau Buffer1[]. J'ai créé un script avec un code similaire, plus une déclaration de tableau via ArrayResize(Buffer1, n). Dans le code de script Buffer1[p]=Koef[p] - les valeurs sont assignées correctement. Pas dans le code de l'indicateur(((.
Avez-vous lu mon message ?
SetIndexStyle(0,DRAW_LINE,0,1,Green) ; - met des valeurs, mais ne dessine toujours pas de ligne.
Oui, merci !
SetIndexStyle(0,DRAW_LINE,0,1,Green) ; - met des valeurs, mais ne dessine toujours pas de ligne.
Essayez également de supprimer les limiteurs#propertyindicator_minimum-1,#propertyindicator_maximum1, peut-être que les valeurs du tampon sont dessinées derrière eux.
Merci ! Suppression de #property strict - aidé)