Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 111

 
pavlick_ :

...

Lütfen yerleşik metin biçimlendirmesini kullanın - mesaj giriş alanının üzerinde bir menü var - her şey orada. Ve kısayol tuşları da orada açıklanmıştır.

Alıntılarınızı düzelttim.

 
pavlick_ :

Nasıl aynı? Otomatik olarak bir kopya oluşturucu vardır ve tüm işlemler şöyle görünür:

... 
ar.Add( new (q));


Anladığım kadarıyla, yeni Q(q) kastediliyordu. Şimdi bunun MQL'de otomatik bir kopya oluşturucunun olmamasıyla ilgili olduğu açıktır.

 
Görev

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2018.12.21 10:23

Çözemiyorum, lütfen bana yardım edin. Böyle bir zaman var

 int GetHandle() { return ( 0 ); }

bool SelectHandle( int ) { return ( true ); }
  
int NewHandle = 0 ;  
int PrevHandle = GetHandle();    

datetime time = SelectHandle(NewHandle) ? TimeCurrent () : 0 ;  
SelectHandle(PrevHandle);


Aynı şeyi yapan bir makro nasıl yazılır

time = MACROS(NewHandle, TimeCurrent ()); // Макрос


Sorun, PrevHandle'ın makroda oluşturulamamasıdır.

Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

Hatalar, hatalar, sorular

fxsaber , 2018.12.21 22:15

NewHandle'ın - bir sabit olabileceğini açıklığa kavuşturacağım. Onlar. geçerli bir arama
time = MACROS( 0 , TimeCurrent ()); // TimeCurrent из 0-хендла.
time = MACROS( 1 , TimeCurrent ()); // TimeCurrent из 1-хендла.

MACROS( 0 , SymbolInfoTick ( _Symbol , Tick)); // SymbolInfoTick из 0-хендла.

#define Bid SymbolInfoDouble ( _Symbol , SYMBOL_BID )
Price = MACROS( 3 , Bid ); // Bid из 3-хендла.


Karar

 template < typename T>
T Memory( const T NewValue, const bool SetFlag = true )
{
   static T PrevValue;
  
   if (SetFlag)
    PrevValue = NewValue;
 
   return (PrevValue); 
}

template < typename T1, typename T2>
T2 MacrosFunc( const T1, const T2 Value, const T1 )
{
   return (Value);
}

#define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false )), B, SelectHandle(Memory(A)))


 
fxsaber :

Karar

...
template < typename T1, typename T2>
T2 MacrosFunc( const T1, const T2 Value, const T1 )
{
   return (Value);
}

#define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false )), B, SelectHandle(Memory(A)))


B ifadeniz, geri kalanı ne olursa olsun, her zaman değerlendirilecek ve döndürülecektir.

 
Alexey Navoykov :

B ifadeniz, geri kalanı ne olursa olsun, her zaman değerlendirilecek ve döndürülecektir.

Yardımcı fonksiyonların giriş parametrelerinin sıralı (sağdan sola) hesaplanması vardır.

 
fxsaber :

Yardımcı fonksiyonların giriş parametrelerinin sıralı (sağdan sola) hesaplanması.

Neyi değiştirir? Makro her zaman B değerini döndürür
 
Alexey Navoykov :
Neyi değiştirir? Makro her zaman B değerini döndürür

Kararı reddetmeye çalışın. Herhangi bir hata görmüyorum.


Önce NewHandle'a geçer, ardından B alınır, ardından önceki tutamaca geçer.

 
fxsaber :

Önce NewHandle'a geçer, ardından B alınır, ardından önceki tutamaca geçer.

Orijinal görev şuydu:

SelectHandle(NewHandle) ? TimeCurrent () : 0 ; SelectHandle(PrevHandle);

Onlar. koşul yerine getirilmelidir
 
Alexey Navoykov :

Orijinal görev şuydu:

yani aynı

 template < typename T1, typename T2>
T2 MacrosFunc( const T1 NewHandle, const T2 Value )
{
   return (Value);
}

#define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false )), SelectHandle(Memory(A)) ? B : 0 )


Sonra görevi biraz genelleştiren bir yorum yaptı - hem SymbolInfoTick hem de SymbolInfoDouble vb.

 

Bu arada, genel durumda, bir fonksiyonun dönüş değerinin türü kesinlikle herhangi bir ise, görevin MQL araçları kullanılarak çözülemeyeceği sonucuna vardım. Burada olmayan Decltype gerektirir.