MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 17
Ticaret fırsatlarını kaçırıyorsunuz:
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
#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 );
}
Söyle bana, hata nerede? Koef[] dizisinin elemanlarının değerleri hesaplanır, her elemana bir değer atanır. Buffer1[] neden atanmamış???
Alert`s son döngüden kaldırmaya çalışıyor
Yardım etmedi(
Kaldırılmış ve iyi, orada işe yaramazlar. Uyarılar yerine Yazdır (...) seçeneğini kullanmak ve çıktıyı "Uzmanlar" sekmesinde görmek daha iyidir
Size aynı Edxdy [n- 1 ][ p] değeri atanır. Önceki döngülerde bir döngüde döngünüz varsa ve "n" endeksi değişirse, son döngüde değişmez. Öğleden sonra n-1=24
Küstahça deneyin - uygun mu? //gösterge yatay siyah bir çizgi çizmelidir. Ancak, siyah bir arka planda görünmeyecektir. Arka plan rengini veya çizgileri değiştirin.
Atanmışsa, düşünmeniz gerekir - burada ne yazıyor: Edxdy[24]][p]
Heh, belki her şey atanır ve çizilir, ama bu siyah bir arka plan üzerine siyah bir çizgi çizmekle mi ilgili?
İşte çizginin rengi, türü ve kalınlığı:
Kaldırılmış ve iyi, orada işe yaramazlar. Uyarılar yerine Yazdır (...) seçeneğini kullanmak ve çıktıyı "Uzmanlar" sekmesinde görmek daha iyidir
Size aynı Edxdy [n- 1 ][ p] değeri atanır. Önceki döngülerde bir döngüde döngünüz varsa ve "n" endeksi değişirse, son döngüde değişmez. Öğleden sonra n-1=24
Küstahça deneyin - uygun mu? //gösterge yatay siyah bir çizgi çizmelidir. Ancak, siyah bir arka planda görünmeyecektir. Arka plan rengini veya çizgileri değiştirin.
Atanmışsa, düşünmeniz gerekir - burada ne yazıyor: Edxdy[24]][p]
Heh, belki her şey atanır ve çizilir, ama bu siyah bir arka plan üzerine siyah bir çizgi çizmekle mi ilgili?
İşte çizginin rengi, türü ve kalınlığı:
Edxdy[n-1][p] - burada dx ve dy'nin çarpımının toplamını yazdım. Bu değer, p-th boyutunun n-1 öğelerinden oluşan bir dizi için Pearson korelasyon katsayısı Koef'i hesaplamak için gereklidir. Bu durumda, ilkinden başlayarak 24 bar için korelasyonu hesaplamaya karar verdim. Sonuç, basit bir komut dosyasını (sadece tek boyutlu bir dizi alındı) hesaplayan Pearson korelasyon katsayısının benzer bir hesaplamasının yanı sıra "çevrimiçi döviz çifti korelasyon hesaplayıcısı" sitesinde karşılaştırıldı. Tüm değerler aynıdır. Hatanın Buffer1[] dizi bildiriminde olduğuna inanıyorum. Benzer koda sahip bir komut dosyası ve ayrıca ArrayResize(Buffer1, n) aracılığıyla bir dizi bildirimi oluşturuldu. Komut dosyası kodunda Buffer1[p]=Koef[p] - değerler doğru şekilde atanır. Kodda gösterge yok (((
yazımı okudun mu
SetIndexStyle ( 0 , DRAW_LINE , 0 , 1 , Yeşil ); - değerleri ayarlayın, ancak yine de bir çizgi çizmiyor .
Evet teşekkür ederim!
SetIndexStyle ( 0 , DRAW_LINE , 0 , 1 , Yeşil ); - değerleri ayarlayın, ancak yine de bir çizgi çizmiyor .
Sınırlayıcıları kaldırmayı deneyin # özellik göstergesi_minimum - 1, #özellik göstergesi_maksimum 1 , belki tampon değerleri onların arkasına çizilir.
Teşekkür ederim! #özellik katı kaldırıldı - yardımcı oldu)