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

 
Yurij Kozhevnikov :

Teşekkür ederim aklıma böyle bir uygulama geldi ama Value1'in kendisinin olmamasından dolayı bu pek doğru değil. Yani oluşturduğum örnek elbette son derece basitleştirilmiş ancak sınıfın ana değerinin bu olmadığı, bu tür belirli sayıda değerlerin olabileceği ve böyle bir yapının şu şekilde tanımlanabileceği anlaşıldı. her biri.

Yoksa böyle bir uygulamanın yalnızca aşırı yüklemenin uygulanacağı ayrı bir sınıf veya yapıyı tanımlaması ve bu sınıfta oluşturulan türün değişkenlerini tanımlaması mümkün müdür? Ancak, atama işlemine diğer sınıf değişkenleri dahil edilirse, yine toplanmaz.

Aslında, vbs içindeki Let/Set/Get yöntemlerine benzer bir şey uygulamak istedim.

soru tam olarak net değil, ancak C++/MQL'de anahtar özellik yok Özellik

belki bir şablon sınıfına ihtiyacınız vardır https://www.mql5.com/en/docs/basis/oop/class_templates


UPD: burada Habré hakkında aynı https://habr.com/ru/post/121799/ hakkında bir makale var, ancak bunun MQL için "kafaya" uygulanabilir olduğundan şüpheliyim

 

Çok teşekkürler!

Benim için bu biraz bilgimin ötesinde, çünkü hiç C++ eğitimi almadım ama bu tam olarak istediğim gibi görünüyor. Bunu çözmeye çalışacağım.

 
Yurij Kozhevnikov :

Çok teşekkürler!

Benim için bu biraz bilgimin ötesinde, çünkü hiç C++ eğitimi almadım ama bu tam olarak istediğim gibi görünüyor. Bunu çözmeye çalışacağım.

sorunuzu bu başlık altında kısaca formüle etmeye çalışın: https://www.mql5.com/ru/forum/85652

orada çok havalı programcılar var ve onlar böyle şeyler yapıyorlar ... peki, genel olarak, belki bu daha hızlı çözmenize yardımcı olur

 

Evet teşekkür ederim.

Bunu kullandığımı hatırlayarak, bunun Mülk denildiğini unuttum ve ne istediğimi dile getirdim.

Makalenin yorumlarında makro değiştirmeyi kullanabileceğinizden bahsedildi, bu, belki de kendinizle katı bir sözdizimi kuralı benimseyerek, pek genel olmayan bir durumu çok daha kolay uygulayabileceğiniz fikrini uyandırdı.

 
class TestClass
{
   private :
     double cValue1;
     double cValue2;
     double cValue3;
     int cIndex;
     void _Set( double mValue);
   public :
    TestClass():cIndex(- 1 ){}
     double Value1()
    { return cValue1;}

    TestClass* Value( int param)
    {
      cIndex=param;
       return & this ;
    }
     void operator =( double mValue) {_Set(mValue);}
};
//---------------------------------------------
void TestClass::_Set( double mValue){
   switch (cIndex){
       case 1 :  cValue1=mValue; break ;
       case 2 :  cValue2=mValue; break ;
       case 3 :  cValue3=mValue; break ;
   }
   cIndex=- 1 ;
}

void TestFunction()
{
  TestClass test;
  test.Value( 1 )= 0.5 ;
   Print (test.Value1());
}

void OnStart ( void )
  {
   TestFunction();
  }
Böyle bir koltuk değneği tasvir edilebilir)
 
Vladimir Simakov :
Böyle bir koltuk değneği tasvir edilebilir)

Teşekkürler, bu koltuk değneği açıkça çok daha basit, ancak içinde bile henüz her şeyi anlamadım.

Bir makro ikamesine herhangi bir karakter seti koymak imkansız mı? Bunun gibi:

#define . < один любой набор символов> ()= < второй любой набор символов> Set < один любой набор символов> ( < второй любой набор символов> )
#define . < один любой набор символов> (par1)= < второй любой набор символов> Set < один любой набор символов> (par1, < второй любой набор символов> )
 
Aleksey Mavrin :

DoubleToString'i aşırı yüklemeniz yeterlidir, boşsa "EMPTY_VALUE" dizesini döndürür, aksi takdirde :: DoubleToString'i arayın

burada hiçbir şey anlamıyorum

 
Fast235 :

burada hiçbir şey anlamıyorum

ve bu yüzden

#define DoubleToString(value,digits)  (value!=EMPTY_VALUE?DoubleToString(value,digits):"EMPTY_VALUE") 
 
Aleksey Mavrin :

ve bu yüzden

Nadir bir durumda, bir daha görmemek için kaynağı gider, yapar ve siler)


arabellek bir gösterge arabelleği olsaydı, EMPTY_VALUE değiştirme yapmak mümkün olurdu

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,BOŞ_DEĞER);

ancak bilinmeyen sayıda arabellek var
 

Tünaydın. EA'ya atr göstergesinde hesaplanan bir stop loss eklemeye çalışıyorum. giriş değişkenleri

   extern    ENUM_TIMEFRAMES    PeriodForWork_sl        =   PERIOD_H4 ;           // ТФ РАСЧЁТА ЗНАЧЕНИЙ СТОП ЛОСА ПО АТР
   extern double sl= 14 ; // ПЕРИОД АТR СТОП ЛОССА

Bir kene üzerinde, bunu stop loss için atr değerlerini bir değişkene almak için yapıyorum.

sl= iATR ( NULL ,PeriodForWork_sl,sl, 1 ); // ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА 

  Ayrıca sipariş açarken şöyle yazıyorum.


 OrderSend ( Symbol (),OP_BUY,lot,Ask,slippages,Bid-sl* Point ,Bid+tp* Point , "ДИВЕРГЕНЦИЯ НА БАЙ АО" ); // ОТКРЫВАЕМ БАЙ ОРДЕР

Ama hiçbir şey çalışmıyor. Baskı yoluyla stoploss değişkeninin değerini çıkarıyorum, değerinin = 0 olduğunu yazıyor. Neyi yanlış yapıyorum, nerede düzeltmem ve ince ayar yapmam gereken şey ne işe yarayacak?