MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 17

 
Söyle bana, hata nerede? Koef[] dizisinin elemanlarının değerleri hesaplanır, her elemana bir değer atanır. Buffer1[] neden atanmamış???

#property copyright "Copyright 2016, T"
#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 );
   }
 
Timur1988 :
Söyle bana, hata nerede? Koef[] dizisinin elemanlarının değerleri hesaplanır, her elemana bir değer atanır. Buffer1[] neden atanmamış???

Uyarıyı son döngüden çıkarmaya çalışın
 
Renat Akhtyamov :
Alert`s son döngüden kaldırmaya çalışıyor
Yardım etmedi(
 
Timur1988 :
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

Edxdy[n- 1 ][p]

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.

Buffer1[p]= 4 ;

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ığı:

SetIndexStyle ( 0 , DRAW_LINE , 0 , 1 , Green );
 
Renat Akhtyamov :

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

Edxdy[n- 1 ][p]

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.

Buffer1[p]= 4 ;

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ığı:

SetIndexStyle ( 0 , DRAW_LINE , 0 , 1 , Green );
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 (((
 
Timur1988 :
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
 
Renat Akhtyamov :
yazımı okudun mu
Evet teşekkür ederim!
SetIndexStyle ( 0 , DRAW_LINE , 0 , 1 , Yeşil ); - değerleri ayarlayın, ancak yine de bir çizgi çizmiyor .
 
Timur1988 :
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.
 
Vitalie Postolache :
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)
 
Timur1988 :
Teşekkür ederim! #özellik katı kaldırıldı - yardımcı oldu)
Bu iyi değil. Derlerken herhangi bir uyarı aldınız mı? Bu gibi durumlarda #özellik katı değil, uyarı nedenlerinden kurtulmak gerekir.
Neden: