Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 221

 

Bir sınıf özelliğinin aynı sınıfın başka bir özelliğine erişimini düzenlemenin en iyi yolu nedir?

Yani, "bu" yerine "ebeveyn" gibi bir şey kullanmak istiyorum.

 struct _Seeker {
         int holder;
         void Get(){holder = parent.prize;};
};
class Map {
        _Seeker seekerForPrize;
         int prize;
};
 

Göstergede ArraySetAsSeries (array[], false) kullandım. Göstergede iMa(...,i) kullanmam gerekiyordu, bu da ters yönde indekslemeye neden oldu. iMa()'nın indeksleme sırasını bir şekilde ArraySetAsSeries olarak değiştirmesi de mümkün mü?

Şimdiye kadar bunu yaptım: Rates_total-i (diğer uçtan say), ama bunun doğru karar olup olmadığından emin değilim?
 ArraySetAsSeries (ExtMapBuffer4,Series);      
...
while (i<rates_total- 1 )
        {
         double maf= iMA ( NULL ,Used_Period,FAST_MA, 0 ,Fmode,Fprice, i ); // rates_total-i
         ExtMapBuffer4[i]=maf; // test 
...
 
Evgeny Potapov :

Bir sınıf özelliğinin aynı sınıfın başka bir özelliğine erişimini düzenlemenin en iyi yolu nedir?

Yani, "bu" yerine "ebeveyn" gibi bir şey kullanmak istiyorum.

mat.chast öğrenin)

 class Map;

struct _Seeker {
        Map* parent;
         int holder;
        _Seeker(Map* _parent):parent(_parent){}
         void Get(){holder = parent.prize;};
};

class Map {
        _Seeker seekerForPrize;
public :
         int prize;
        Map():seekerForPrize(& this ){}
};
 

Çocuklar. Lütfen göstergeyi hesap numarasına bağlamanın kodunu söyleyin, böylece hesaba bağlanmanın yanı sıra bir lisans anahtarı eklemek mümkün olur mu?) Çok teşekkür ederim...

Форум трейдеров - MQL5.community
Форум трейдеров - MQL5.community
  • www.mql5.com
MQL5: форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
 

Bir soru var, adını string olarak değiştirerek bir yapı elemanına nasıl atıfta bulunulur?

 struct My
   {
   datetime time1;
   datetime time2;
   datetime time3;
   datetime time4;
   } my;

datetime val=GetValue(my,"time3");


datetime GetValue(My &my, string name)
   {
   return (my. "name" ); ?????????
   }
Sana kim söyleyecek, aferin!
 
Nauris Zukas :

Göstergede ArraySetAsSeries(dizi[], false) kullandım. Göstergede iMa(...,i) kullanmam gerekiyordu, bu da ters yönde indekslemeye neden oldu. iMa()'nın indeksleme sırasını bir şekilde ArraySetAsSeries olarak değiştirmesi de mümkün mü?

Şimdiye kadar bunu yaptım: Rates_total-i (diğer uçtan say), ama bunun doğru karar olup olmadığından emin değilim?

Kendim cevaplayayım (belki birilerine de faydası olur). include MovingAverages.mqh (SimpleMAOnBuffer) örneğini kullanarak bir veri arabelleği oluşturabilir (yeniden oluşturabilirsiniz) ve örnekte zaten ArrayGetAsSeries olduğundan ArraySetAsSeries ile uğraşmayın.

 //+------------------------------------------------------------------+
//| Data on array                                              |
//+------------------------------------------------------------------+
int DataBuffer( const int rates_total, const int prev_calculated, const int begin,
               const double & data[], double & buffer[])
  {
   int i,limit;
//--- check for data
//--- save as_series flags
   bool as_series_data= ArrayGetAsSeries (data);
   bool as_series_buffer= ArrayGetAsSeries (buffer);
   if (as_series_data)
       ArraySetAsSeries (data, false );
   if (as_series_buffer)
       ArraySetAsSeries (buffer, false );
//--- first calculation or number of bars was changed
   if (prev_calculated== 0 ) // first calculation
     {
      limit=begin+ 1 ;
       //--- set empty value for first bars
       for (i= 0 ; i<limit- 1 ; i++)
         buffer[i]= 0.0 ;
       //--- calculate first visible value
       double firstValue= 0 ;
       for (i=begin; i<limit; i++)
         firstValue=data[i];
      buffer[limit- 1 ]=firstValue;
     }
   else
      limit=prev_calculated- 1 ;
//--- main loop
   for (i=limit; i<rates_total- 1 ; i++)
      buffer[i]=data[i];
//--- restore as_series flags
   if (as_series_data)
       ArraySetAsSeries (data, true );
   if (as_series_buffer)
       ArraySetAsSeries (buffer, true );
//---
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Aleksei Stepanenko :

Bir soru var, adını string olarak değiştirerek bir yapı elemanına nasıl atıfta bulunulur?

Sana kim söyleyecek, aferin!

derlemeden sonra değişken isimleri olmayacak,

bulmanız gereken makro ikameleri olan bir şey

Dize türünü sevmiyorum - onunla her zaman birçok beklenmedik seçenek bekliyorum, numaralandırma ile bir örnek çizdim, belki size şöyle uyacaktır:

 struct My
{
   datetime time1;
   datetime time2;
   datetime time3;
   datetime time4;
   enum ENUM_FILDS {TIME_1, TIME_2, TIME_3, TIME_4};
} my;
#define TIME_1 My::TIME_1
#define TIME_2 My::TIME_2
#define TIME_3 My::TIME_3
#define TIME_4 My::TIME_4
datetime GetValue(My &MyStruct, My::ENUM_FILDS name)
{
   datetime result = 0 ;
   switch (name)
   {
       case TIME_1: result = MyStruct.time1; break ;
       case TIME_2: result = MyStruct.time2; break ;
       case TIME_3: result = MyStruct.time3; break ;
       case TIME_4: result = MyStruct.time4; break ;
   }
   return (result);
}
//+------------------------------------------------------------------+
void OnStart ()
{
   GetValue(my,TIME_1);
}
//+------------------------------------------------------------------+


UPD:

Alanlarla çalışma yöntemini yapıya sokmak daha mantıklı olsa da, yani. Böyle:

 struct My
{
   datetime time1;
   datetime time2;
   datetime time3;
   datetime time4;
   enum ENUM_FILDS {TIME_1, TIME_2, TIME_3, TIME_4};
   datetime GetValue(ENUM_FILDS name)
   {
       datetime result = 0 ;
       switch (name)
      {
         case TIME_1: result = time1; break ;
         case TIME_2: result = time2; break ;
         case TIME_3: result = time3; break ;
         case TIME_4: result = time4; break ;
      }
   return (result);
   }
} my;
#define TIME_1 My::TIME_1
#define TIME_2 My::TIME_2
#define TIME_3 My::TIME_3
#define TIME_4 My::TIME_4

//+------------------------------------------------------------------+
void OnStart ()
{
   my.GetValue(TIME_1);
}
//+------------------------------------------------------------------+
 
Igor Makanu :

derlemeden sonra değişken isimleri olmayacak,

Anlaşıldı, Igor, incelikle görmek işe yaramayacak. Netlik sağlamak için verilere giden yolu kısaltmayı düşündüm, ancak vaka sayfaları ve makro ikameleri alacağım. Muhtemelen uzun bir yazı bırakacağım. Tekrar düşünmeme rağmen, çözüm ilginç. Teşekkür ederim!

 
Aleksei Stepanenko :

Bir soru var, adını string olarak değiştirerek bir yapı elemanına nasıl atıfta bulunulur?

Sana kim söyleyecek, aferin!
 struct My
{
   datetime time1;
   datetime time2;
   datetime time3;
   datetime time4;
   
   datetime operator []( const string name )
   {
       if ( name == "time1" )
         return time1;
       if ( name == "time2" )
         return time2;
       if ( name == "time3" )
         return time3;
       if ( name == "time4" )
         return time4;
       return datetime ( 0 );
   }
};

datetime GetValue( My& my, const string name )
{
   return my[ name ];
}

void OnStart ()
{
   My my;
   datetime val = GetValue( my, "time3" );
}
 
Koldun Zloy :
Teşekkürler, eşleşen bir liste olmadan sihirli bir ikame seçeneği olduğunu düşündüm. Ama bu kader değil. Teşekkür ederim!