Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 17

Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
#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);
}
Können Sie mir sagen, wo der Fehler liegt? Die Werte der Array-Elemente Koef[] werden berechnet, jedem Element wird ein Wert zugewiesen. Warum wird Buffer1[] nicht zugewiesen?
Versuchen Sie, den Alert aus dem letzten Zyklus zu entfernen
hat nicht geholfen(
Gut, dort sind sie nutzlos. Verwenden Sie besser Print(...) anstelle von Alerts, und sehen Sie sich den Ausdruck auf der Registerkarte "Experts" an
Sie haben denselben Wert Edxdy[n-1][p] zugewiesen bekommen. Wenn Sie in den vorherigen Schleifen eine Schleife innerhalb einer Schleife haben und sich der Index "n" ändert, tut er das in der letzten Schleife nicht. Zuletzt n-1=24.
Trauen Sie sich - wird es klappen? //Indikator sollte eine horizontale schwarze Linie zeichnen. Auf einem schwarzen Hintergrund ist sie jedoch nicht sichtbar. Ändern Sie die Farbe des Hintergrunds, oder besser die Linie.
Wenn es zugewiesen wird, sollten Sie daran denken, was hier geschrieben steht: Edxdy[24][p]
Hehe, oder vielleicht ist alles schon vergeben und gezeichnet, aber es geht darum, eine schwarze Linie auf einem schwarzen Hintergrund zu zeichnen?
Hier werden die Farbe, der Typ und die Dicke der Linie festgelegt:
Gut, dort sind sie nutzlos. Verwenden Sie besser Print(...) anstelle von Alerts, und sehen Sie sich den Ausdruck auf der Registerkarte "Experts" an
Sie haben denselben Wert Edxdy[n-1][p] zugewiesen bekommen. Wenn Sie in den vorherigen Schleifen eine Schleife innerhalb einer Schleife haben und sich der Index "n" ändert, tut er das in der letzten Schleife nicht. Zuletzt n-1=24.
Probieren Sie es aus - wird es klappen? //Indikator sollte eine horizontale schwarze Linie zeichnen. Auf einem schwarzen Hintergrund ist sie jedoch nicht sichtbar. Ändern Sie die Farbe des Hintergrunds, oder besser die Linie.
Wenn es zugewiesen wird, sollten Sie daran denken, was hier geschrieben steht: Edxdy[24][p]
Hehe, oder vielleicht ist alles schon vergeben und gezeichnet, aber es geht darum, eine schwarze Linie auf einem schwarzen Hintergrund zu zeichnen?
Hier können Sie die Farbe, die Art und die Dicke der Linie sehen:
Edxdy[n-1][p] - hier habe ich die Summe des Produkts von dx und dy geschrieben. Dieser Wert wird benötigt, um den Pearson-Korrelationskoeffizienten Koef für eine aus n-1 Elementen der p-ten Dimension bestehende Matrix zu berechnen. In diesem Fall habe ich beschlossen, die Korrelation für 24 Balken zu berechnen, beginnend mit dem ersten Balken. Das Ergebnis im Vergleich zu ähnlichen Berechnung der Pearson-Korrelationskoeffizient, der ein einfaches Skript berechnet (wurde nur eindimensionale Array), sowie die Website "Online-Währungspaar Korrelationsrechner". Alle Werte sind identisch. Ich glaube, dass es einen Fehler in der Deklaration des Arrays Buffer1[] gibt. Ich habe ein Skript mit ähnlichem Code erstellt, plus Array-Deklaration über ArrayResize(Buffer1, n). Im Skriptcode Buffer1[p]=Koef[p] - werden die Werte korrekt zugewiesen. Nicht im Code des Indikators(((.
Haben Sie meinen Beitrag gelesen?
SetIndexStyle(0,DRAW_LINE,0,1,Green); - Werte setzen, aber immer noch keine Linie zeichnen.
Ja, ich danke Ihnen!
SetIndexStyle(0,DRAW_LINE,0,1,Green); - Werte setzen, aber immer noch keine Linie zeichnen.
Versuchen Sie auch, die Begrenzer#propertyindicator_minimum-1,#propertyindicator_maximum1 zu entfernen, vielleicht werden die Pufferwerte dahinter gezeichnet.
Ich danke Ihnen! Entfernte #Eigenschaft strict - half)