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

 

Soru şu ki, bir şablon oluşturup bunu birden çok işleve uygulamak mümkün müdür?

 template < typename T>
void Fun1(T &y)
{тело
}
void Fun1(T &r,T k)
{тело
}
int Fun1(T &r,T k)
{тело return ( 0 );
}

Aynı türden değişkenler kullanılırsa, birkaç işlev için bir şablonun kullanılmasının mümkün olup olmadığını anlamak çok uygun olacaktır.

 
Güzel gün! Lütfen bana petrol, endeksler ve metaller için nasıl teklif ekleneceğini söyleyin
 
vfrfhjybgjakjncmrb :
Güzel gün! Lütfen bana petrol, endeksler ve metaller için nasıl teklif ekleneceğini söyleyin

Bunları yayınlayıp yayınlamaması öncelikle ofise bağlıdır. Ayrıca kullandığınız terminale de bağlıdır. Eğer ofis bunları yayınlıyorsa, o zaman bu alıntıların hangi hesaplarda ve hangi koşullarda yayınlandığını bilmeniz gerekiyor, belki de sadece enstrüman listesini açmanız gerekiyor ve bu enstrümanlar orada. Ofis bunları sizin için imkansız olan koşullarda yayınlıyorsa, bu alıntılarla bir grafik oluşturmanız ve her seferinde güncellemeniz gerekecektir. Örneğin, ofisinizin Petrol yayınladığını biliyor musunuz?

 
Seric29 :

Soru şu ki, bir şablon oluşturup bunu birden çok işleve uygulamak mümkün müdür?

Aynı türden değişkenler kullanılırsa, birkaç işlev için bir şablonun kullanılmasının mümkün olup olmadığını anlamak çok uygun olacaktır.

Numara. Ayrı ayrı, her fonksiyon için tam açıklaması verilmelidir. Aksi takdirde daha sonra bir süre sonra kendi kodunuzu okuyamayacaksınız.

 
Belirli bir göstergeyi tek bir hareketle tüm çizelgelerden nasıl kaldırabilirim? Yeni şablonla çalışmıyor. Belki bir senaryo?
 
Ilya Prozumentov :

Numara. Ayrı ayrı, her fonksiyon için tam açıklaması verilmelidir. Aksi takdirde daha sonra bir süre sonra kendi kodunuzu okuyamayacaksınız.

Çok yazık. Her durumda, çalışmazsanız, kendi kodunuzu okumaz veya okumazsınız. Ben sadece kompakt programlar yazmak istiyorum çünkü fonksiyonlarda sıklıkla aynı türden değişkenler kullanıyorsunuz, bu yüzden sordum. "Sınıflar" aracılığıyla bunun mümkün olduğunu düşündüm, ancak "sınıflar" benim için çok zor olana kadar bir şey onları çözmedi. Birçok işlev için şablonlar yapmanın gerekli olduğunu bileceğim anlamına gelir.

 

Bu kaydın neden çalışmadığını kim söyleyebilir? Diziyi depolayan ve hangi koşulun sağlanacağına bağlı olarak döndüren yapıların alanlarına atıfta bulunmak istiyorum.Koşulun yürütülmesi ArrayDimension işlevine bağlıdır.

   struct SD1{
   int a[ 10 ]; //int q[10][2];
};SD1 a1;

struct SD2{
   int a[ 10 ][ 2 ];
};SD2 a2;

template < typename T> //,typename W
void MoveArray(T & s){ //,W&e
   //Alert(ArrayDimension(s.a));
     int r= 0 ;r= ArrayDimension (s.a); Print ( "r-ранг: " ,r); if (r== 1 )пишу условие что если ранг равен 1му 
      { for ( int cn= 0 ; cn<= 8 ; cn++)                              то крутить этот цикл
     {                
      s.a[cn]=s.a[cn+ 1 ];
     }} else if (r== 2 )            если ранг равен 2ум
      { for ( int cn= 0 ; cn<= 8 ; cn++) крутить этот цикл
     {                
      s.a[cn][ 0 ]=s.a[cn+ 1 ][ 0 ];
      s.a[cn][ 1 ]=s.a[cn+ 1 ][ 1 ];
     }}  
}

Sonunda ilk döngüye tırmanacak, bu if (r== 1 ) koşulu yanlış olmasına rağmen, rank 2um ise neden oraya tırmanıyor, bir şeyin yürütüldüğü gövdeye nasıl giriyor? yalana rağmen fonksiyonu şöyle çağırırım

   MoveArray(a2);в OnTick
   for ( int i= 0 ;i< 10 ;i++){ Print ( "q: " ,i, ": " ,a2.a[i][ 0 ]);}
int yy= ArrayDimension (a2.a); Print ( "Ранг: " ,yy, " " );
 
Seric29 :

Çok yazık. Her durumda, çalışmazsanız, kendi kodunuzu okumaz veya okumazsınız. Ben sadece kompakt programlar yazmak istiyorum çünkü fonksiyonlarda sıklıkla aynı türden değişkenler kullanıyorsunuz, bu yüzden sordum. "Sınıflar" aracılığıyla bunun mümkün olduğunu düşündüm, ancak "sınıflar" benim için çok zor olana kadar bir şey onları çözmedi. Birçok işlev için şablonlar yapmanın gerekli olduğunu bileceğim anlamına gelir.

Kompaktlığın nasıl elde edileceğinin özünü kavrayamıyorum. Yukarıdaki örnekte 2 satır kaydediliyor. Onları gerçekten bu şekilde kaydetmek istiyorsanız, bir makro ikamesi yazabilir ve işlevden önceki satırda kullanabilirsiniz.

 #define templ(T) templeate< typename T>

templ(T1) void Funct(T1 a)
 
Ilya Prozumentov :
 #define templ(T) template< typename T>

templ(T1) void Funct(T1 a)

Templ(T1) kaydetmek için her işlevden önce anlamına gelir ve bir değişkeni veya gerekli argümanı kabul edecek mi? Ve neden templ(T) bildirildi ve templ(T1) çağrıldı, her işlevden önce bir sayı eklemem ( templ(T1) templ(T2) templ(T3) ) veya her yere templ(T1) yazmam gerekir mi? Ve eğer birkaç parametre şablonun içine tıkıştırılırsa < typename T> , o zaman nasıl olacak, bu şablon gibi< typename T, typename P, typename Q > - templ(T,P,Q).

 
Genel olarak, sorun bu! Başka bir EA ile karı takip etmek istiyorum, ancak bu EA kar için stop-loss çekmeme izin vermiyor! Birisi düzeltebilir mi! Yazar cevap vermiyor!
Dosyalar:
cm-MA_Gread.mq4  18 kb