Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 318

 
muzzletop :
Güzel gün. Bir danışman var, strateji test cihazında gayet iyi çalışıyor (siparişleri açar vb.). Ama grafiğe koyduğumda hiçbir şey olmuyor. Danışman çalışmıyor. Ve başka bir şey fark ettim - grafikteki danışmanın adının yanında bir çarpı işareti görüntüleniyor. Nasıl düzeltilir?


çizelgeye bir danışman atarken, parametreler içeren bir pencere açılır, farklı sekmeler vardır - ilk "Genel" de " danışmanın ticaret yapmasına izin ver" seçeneğinin yanındaki kutuyu işaretlemeniz gerekir.

danışman zaten atılmışsa ve araç çubuğunda bir çarpı işareti olarak görüntüleniyorsa, "danışmanlar" düğmesini tıklayın (şapkada kırmızı bir daire ve bu dairenin içinde beyaz bir kare olan sarı küp).

 

Tünaydın. Lütfen bu garip sorunla bana yardım edin.

Sonuç olarak: Çok zamanlı bir gösterge yazıyorum, yani. herhangi bir zamanda açık olmak, diğer tüm zamanlar için aynı şekilde hesaplamalar yapacak ve sinyaller verecek bir gösterge.

Göstergenin temeli RSI'dır.

init()'te, zamanları değiştirirken , gösterge satırına ayrı bir dizi atanır. Ve her biri, bir veya diğer yarısında olduğunuzda bir çizgi olarak görüntülenir, ancak aynı zamanda diğer yarılar için hesaplamalar çalışmaz (iRSI işlevi, hesaplama sırasında aptalca sıfırları döndürür). Onlar. mevcut yarısı hesaplanır, ancak geri kalanı hesaplanmaz.

Kodu getiriyorum:

 #property indicator_separate_window
#property indicator_minimum 20
#property indicator_maximum 80

#property indicator_level1 20            // уровень RSI
#property indicator_level2 42            // уровень RSI
#property indicator_level3 50            // уровень RSI
#property indicator_level4 58            // уровень RSI
#property indicator_level5 80            // уровень RSI

#property indicator_levelcolor White   // цвет уровней 

#property indicator_buffers 1
#property indicator_color1 Red
#property indicator_width1 2            // толщина RSI

//--- buffers
double    RSI_M1[];               // буферы под RSI
double    RSI_M5[];
double    RSI_M15[];
double    RSI_M30[];
double    RSI_H1[];
double    RSI_H4[];
double    RSI_D1[];
double    RSI_W1[];
double    RSI_MN[];

int          RSI_per           = 12 ;                 // период RSI
int          RSIPriceType      =   PRICE_CLOSE ;       // покакой цене считать RSI
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init() {
//---- indicators
   IndicatorShortName( "test" );
   
   switch ( Period ()) {
       case PERIOD_M1 :
           SetIndexBuffer ( 0 , RSI_M1);
           break ;
       case PERIOD_M5 :
           SetIndexBuffer ( 0 , RSI_M5);
           break ;
       case PERIOD_M15 :
           SetIndexBuffer ( 0 , RSI_M15);
           break ;
       case PERIOD_M30 :
           SetIndexBuffer ( 0 , RSI_M30);
           break ;
       case PERIOD_H1 :
           SetIndexBuffer ( 0 , RSI_H1);
           break ;
       case PERIOD_H4 :
           SetIndexBuffer ( 0 , RSI_H4);
           break ;
       case PERIOD_D1 :
           SetIndexBuffer ( 0 , RSI_D1);
           break ;
       case PERIOD_W1 :
           SetIndexBuffer ( 0 , RSI_W1);
           break ;
       case PERIOD_MN1 :
           SetIndexBuffer ( 0 , RSI_MN);
           break ;
   }   
   
   SetIndexStyle( 0 , DRAW_LINE , STYLE_SOLID , 2 );
   SetIndexLabel( 0 , "RSI(" + RSI_per + ")" );
//----
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit() {
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    shift, _Bars;
   static int   _counted_bars_W1 = 0 ,
               _counted_bars_D1 = 0 ;
   //--------------------------------------------------------------------
   _Bars = iBars( NULL , PERIOD_W1 );
   shift = _Bars - _counted_bars_W1 - 1 ;   // Индекс первого непосчитанного
   _counted_bars_W1 = _Bars - 1 ;
   
   while (shift >= 0 ) {                 // Цикл по непосчитанным барам
      RSI_W1[shift]       = iRSI ( NULL , PERIOD_W1 , RSI_per, RSIPriceType, shift);
       Print (RSI_W1[shift]);
      shift--;
   }
   //------------------------------------------
   _Bars = iBars( NULL , PERIOD_D1 );
   shift = _Bars - _counted_bars_D1 - 1 ;   // Индекс первого непосчитанного
   _counted_bars_D1 = _Bars - 1 ;
   
   while (shift >= 0 ) {                 // Цикл по непосчитанным барам
      RSI_D1[shift]       = iRSI ( NULL , PERIOD_D1 , RSI_per, RSIPriceType, shift);
      shift--;
   }
   //------------------------------------------   
   return ( 0 );
  }
//+------------------------------------------------------------------+

İlginç olan: gösterge çizgisi için yalnızca bir dizi bırakırsanız ve herhangi bir zaman için yalnızca W1'i hesaplarsanız, o zaman her şey doğru bir şekilde hesaplanır ve herhangi bir (!) zamanda çizilir.
Amaç ne? Başlatma sırasında zamana bağlı olarak gösterge çizgisi için farklı diziler almak mümkün değil mi?

 
satorifx :

Tünaydın. Lütfen bu garip sorunla bana yardım edin.

Sonuç olarak: Çok zamanlı bir gösterge yazıyorum, yani. herhangi bir zamanda açık olmak, diğer tüm zamanlar için aynı şekilde hesaplamalar yapacak ve sinyaller verecek bir gösterge.

Göstergenin temeli RSI'dır.

init() içinde, zaman değiştirirken, gösterge satırına ayrı bir dizi atanır. Ve her biri, bir veya diğer yarısında olduğunuzda bir çizgi olarak görüntülenir, ancak aynı zamanda diğer yarılar için hesaplamalar çalışmaz (iRSI işlevi, hesaplama sırasında aptalca sıfırları döndürür). Onlar. mevcut yarısı hesaplanır, ancak geri kalanı hesaplanmaz.

Kodu getiriyorum:

İlginç olan: gösterge çizgisi için yalnızca bir dizi bırakırsanız ve herhangi bir zaman için yalnızca W1'i hesaplarsanız, o zaman her şey doğru bir şekilde hesaplanır ve herhangi bir (!) zamanda çizilir.
Amaç ne? Başlatma sırasında zamana bağlı olarak gösterge çizgisi için farklı diziler almak mümkün değil mi?

Sadece W1 ve D1 okunur! Ne istiyorsun? Geri kalanı için kaydolun!
 
borilunad :
Sadece W1 ve D1 okunur! Ne istiyorsun? Geri kalanı için kaydolun!

Bu, onunla alakalı değil. Hesapları sadece D1 ve W1 için verdim ki kod çok uzun olmasın. Lütfen dikkat: W1'in hesaplanan değerleri, herhangi bir zamanda her onay işaretine yazdırılır. Yani W1 dışında herhangi bir zaman açıksa, sıfırlar yazdırılır. W1 için çalışıyorsa, geri kalanı için çalışacaktır.
 
satorifx :

Bu, onunla alakalı değil. Hesapları sadece D1 ve W1 için verdim ki kod çok uzun olmasın. Lütfen dikkat: W1'in hesaplanan değerleri, herhangi bir zamanda her onay işaretine yazdırılır. Yani W1 dışında herhangi bir zaman açıksa, sıfırlar yazdırılır. W1 için çalışıyorsa, geri kalanı için çalışacaktır.
Doğru şekilde! Diğer grafiklerde göstermek için haftalık grafiği de açmanız gerekiyor!
 
borilunad :
Doğru şekilde! Diğer grafiklerde göstermek için haftalık grafiği de açmanız gerekiyor!


Dürüst olmak gerekirse, bu ifadeyi anlamadım.
Ve başka bir şey göstermene gerek yok. Kodumu çalıştırın ve ihtiyacınız olan her şeyin zaten gösterildiğini göreceksiniz: D1'de RSI D1 tablosu ve W1'de - RSI W1 tablosu gösterilir, ancak aynı zamanda, D1 açıksa, o zaman için RSI hesaplamaları W1'in tümü sıfırdır ve eğer açık W1 ise, o zaman D1 için hesaplamalar sıfırdır. Soru, bunun neden olduğu ve nasıl düzeltileceğidir.

 

Sorun, dizin dizisinin kendisinin başlatılması ve istenen boyuta yeniden boyutlandırılmasıdır.
Bu nedenle, D1'i açtığımda - RSI_D1[] indeks oluyor ve onunla her şey yolunda ve dizilerin geri kalanı emekleme aşamasında kalıyor.
Bu şekilde denendi: tüm dizileri şöyle bildirdi:

 double    RSI_W1[]    =  { 0 };
Ve init() anahtarında bunu şöyle değiştirdim:
       case PERIOD_D1 :
           SetIndexBuffer ( 0 , RSI_D1);
           ArrayResize (RSI_W1, iBars( NULL , PERIOD_W1 ));
           break ;

Ancak, ArrayResize GetLastError'da bir hata veriyor:

EURUSD, Daily: dizi yeniden boyutlandırılamıyor

EURUSD Günlük: bazı dizi hatası

Her neyse, biri bana sorunu nasıl çözeceğimi söyleyebilir mi?

 
satorifx :

Sorun, dizin dizisinin kendisinin başlatılması ve istenen boyuta yeniden boyutlandırılmasıdır.
Bu nedenle, D1'i açtığımda - RSI_D1[] indeks oluyor ve onunla her şey yolunda ve dizilerin geri kalanı emekleme aşamasında kalıyor.
Bu şekilde denendi: tüm dizileri şöyle bildirdi:

Ve init() anahtarında bunu şöyle değiştirdim:

Ancak, ArrayResize GetLastError'da bir hata veriyor:

EURUSD, Daily: dizi yeniden boyutlandırılamıyor

EURUSD Günlük: bazı dizi hatası

Her neyse, biri bana sorunu nasıl çözeceğimi söyleyebilir mi?

Dizi dinamikse, değerler yazarken yeni veriler için dizinin boyutunu artırdığınızdan emin olun. DiziYeniden Boyutlandır()
 
artmedia70 :
Dizi dinamikse, değerler yazarken yeni veriler için dizinin boyutunu artırdığınızdan emin olun. DiziYeniden Boyutlandır()

Bu konuda yukarıda yazdım:
Ancak, ArrayResize GetLastError'da bir hata veriyor:

EURUSD, Daily: dizi yeniden boyutlandırılamıyor

EURUSD Günlük: bazı dizi hatası
 
satorifx :
Bu konuda yukarıda yazdım:
Ancak, ArrayResize GetLastError'da bir hata veriyor:

EURUSD, Daily: dizi yeniden boyutlandırılamıyor

EURUSD Günlük: bazı dizi hatası
satoriks :


Dürüst olmak gerekirse, bu ifadeyi anlamadım.
Ve başka bir şey göstermene gerek yok. Kodumu çalıştırın ve ihtiyacınız olan her şeyin zaten gösterildiğini göreceksiniz: D1'de RSI D1 grafiği ve W1'de - RSI W1 grafiği gösterilir, ancak aynı zamanda, D1 açıksa, RSI hesaplamaları W1'in tümü sıfırdır ve eğer açık W1 ise, o zaman D1 için hesaplamalar sıfırdır. Soru, bunun neden olduğu ve nasıl düzeltileceğidir.

Çünkü sadece bir arabellek var ve aramanızda sırayla gösteriliyor!

 #property indicator_buffers 1
Gerçekten "kodlarınızı" indirip test etmekten başka yapacak bir şeyim olmadığını mı düşünüyorsunuz? Sana tavsiyede yardımcı olurum. Ve eğer bir şeyler yolunda gitmiyorsa, sizin için her şey zirvede! Yoksa tembellik senden önce mi doğdu?!