Hatalar, hatalar, sorular - sayfa 645

 

Herkese merhaba!

Lütfen bir aceminin sınıflarda dizileri kullanmayı anlamasına yardımcı olun. Sorunu temsil etmek için anahtar kodunu küçük bir parçaya kesin:

 class base
{
protected :
int Stf_ZZ_Handle;
double Stf_ZZ_Val[];
public :
void InitArray()
  {
   Stf_ZZ_Handle= iCustom ( _Symbol , _Period , "Examples\\ZigZag" , 12 , 0 , 0 );
   ArraySetAsSeries (Stf_ZZ_Val, true );
   CopyBuffer (Stf_ZZ_Handle, 0 , 0 , 200 ,Stf_ZZ_Val);
   Print ( "array[0]= " ,Stf_ZZ_Val[ 0 ]);
  }
};
class second : public base
  {
    public :
    void Printer() { Print ( "array[0]= " ,Stf_ZZ_Val[ 0 ]);}
  };
int OnInit ()
  {
//---
base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();
//---
   return ( 0 );
  }

Yürüttüğümde, mirasçı sınıfının satırında Array out of range hatası alıyorum, üst sınıfta beklenen 0'ı alıyorum.

2012.02.13 00:41:25 2011.01.01 00:00:00 dizi 'test1.mq5' içinde aralık dışında (29,36)
2012.02.13 00:41:25 2011.01.01 00:00:00 dizi[0]= 0.0

   void Printer() { Print ( "array[0]= " ,Stf_ZZ_Val[ 0 ]);}

Anladığım kadarıyla, bu işlendiğinde sıradan değişkenlerde herhangi bir hata olmamasına rağmen, bir diziyi mirasçı sınıfına yanlış aktarıyorum (veya erişiyorum).

Neyi yanlış yapıyorum?

 

Son zamanlarda çok sık *.mq5 dosyalarını başlatırken böyle bir mesaj görüyorum:

Sorun ne olabilir?

 
Radix :

Herkese merhaba!

base Cbase;
second Csecond;
Cbase.InitArray();
Csecond.Printer();

Neyi yanlış yapıyorum?

Bakın, ikinci satırda "ikinci Csaniye" ilan ederken; InitArray() yönteminiz çağrılmadı, değil mi? Aynı zamanda, Csecond nesnesinin kendisi zaten yaratılmıştır. Böylece dördüncü satırda "Csecond. Printer() ;" yöntemini çağırdığınızda, çağrının başlatılmamış ve boyutlandırılmamış Stf_ZZ_Val[] dizisine gittiği ortaya çıkıyor.

 
Test sırasında başlangıç tarihinden itibaren (MT4'te olduğu gibi) 1000 barlık kullanılabilir geçmiş sınırının kaldırılıp kaldırılmadığını söyleyebilir misiniz?
 
muallch :

Test sırasında başlangıç tarihinden itibaren (MT4'te olduğu gibi) 1000 barlık kullanılabilir geçmiş sınırının kaldırılıp kaldırılmadığını söyleyebilir misiniz?

Ne demek istediğini açıkla?

İlk beşte, veriler testin başlangıcından itibaren bir önceki yıldan yüklenir. Yani, 2012.02.01'den itibaren test yapıyorsanız, veriler 2011.01.01'den yüklenecektir.

İstisna günler, haftalar ve aylar üzerinde testtir - orada verilerin başlangıcının hesaplanması, testin başlamasından önce 100 bar olması ihtiyacından gerçekleştirilir.

 
stringo :

Ne demek istediğini açıkla?

Başlangıçta, örn. 2011.01.01'den beri en az 3000 barlık bir günlük geçmişe ihtiyacımız var. Onlar. test için gerekli olandan kasten daha uzun bir süre ayarlamanız ve "başlangıç noktasını" programlı olarak izlemeniz gerekir. Test sırasında tüm (veya istek üzerine) geçmişi sağlamanın zorluğu nedir?
 
Ek olarak, test sırasında değil, gerçek otomatik ticarette geçmişin mevcudiyeti ile ilgili soru ortaya çıkıyor. Bu durumda nasıl olunur? Bir testçi alt edilebilir...
 
muallch :
Başlangıçta, örn. 2011.01.01'den beri en az 3000 barlık bir günlük geçmişe ihtiyacımız var. Onlar. test için gerekli olandan kasten daha uzun bir süre ayarlamanız ve "başlangıç noktasını" programlı olarak izlemeniz gerekir. Test sırasında tüm (veya istek üzerine) geçmişi sağlamanın zorluğu nedir?

Zorluk yok. Çoğu kullanıcı için anlaşılmaz olacak ve birçok durumda yanlış kullanılacak test ayarlarına ek bir onay kutusu eklemek istemedik.

Kasıtlı olarak daha uzun bir süre belirlemek normal bir karardır.

Başka bir çözüm daha var - aylık olarak sipariş testi yapın ve günlük göstergeleri ve fiyat verilerini kullanın (yani PERIOD_CURRENT yerine açıkça PERIOD_D1 olarak ayarlayın)

 
muallch :

Ek olarak, test sırasında değil, gerçek otomatik ticarette geçmişin mevcudiyeti ile ilgili soru ortaya çıkıyor. Bu durumda nasıl olunur? Bir testçi alt edilebilir...
Mevcut tüm geçmişi indirebilirsiniz. Veri erişiminin organizasyonu için belgelere bakın
 

Açıklama için teşekkürler!

Takipte: İnternet üzerinden uzak aracılarla test ediyorum. Günlük açılış fiyatlarıyla test yaparsam, acenteler neden 1 dakikalık tam geçmişe sahip oluyor? Testlerin başlamasından önceki hazırlık süresi sadece uygunsuz - örneğin bir saat. 10-100 megabitlik bir borusu olanlar için iyidir ve burada sefil bir megabit üzerinde oturuyorsunuz ...

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Ценовые константы - Документация по MQL5
Neden: