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

 
Sınıfta, parametre olarak, gösterge parametreleri vb. gibi her türlü saçmalığım da var. Genel olarak, statik ve aynı ne olacak. Neden her nesne oluşturduğumda bu değerleri geçmem gerekiyor?
 
STARIJ :

bu daha mı kısa bool barup=... WindowRedraw(); yine de yürütülecek - if öğesinden kaldırıldı

daha da kısa olabilir ... dosyama bakın

Teşekkür ederim. Fibo seviyelerinin çizildiği aralık nasıl doğru bir şekilde ayarlanır? Eğer (zaman) 9.00 ise, M1'de 8.00'den 8.59'a kadar olan seviyeleri çizmelidir.
 
Juer :

Nasıl olur da sorunun ifadesi anlaşılır gibi. Aynı başlatmak için Sense.

Zaten var olmayan bir şeyi nasıl başlatacaksınız? Nesne oluşturulduktan sonra var olmaya başlar ve daha sonra zaten başlatılabilir.

Size hemen söyledim - nesne için parametrik bir kurucu yapın ve yeni oluşturulan nesnenin başlatılacağı gerekli parametreleri ona iletin.

Programın OnInit()'inde gerekli (tüm bu nesneler için sabit) verilerle doldurduğunuz yapıdan parametreleri iletebilirsiniz. Ayrıca, örneğin OnTick()'te veya başka bir standart işleyicide, kendi nesnelerinizi yaratırsınız, ancak oluştururken, örneğin şunun gibi yazın:
CMyObject nesnesi = new CMyObject(and_here_structure_with_set_parameters);

Veya nesne verileriniz programdan programa hiç değişmiyorsa ve her zaman aynı değerlere sahipse, bunları, Igor'un yukarıda söylediği gibi, başlatma listesini kullanarak gerekli parametrelerle yapıcıda açıkça başlatın:

sınıf yapıcısında bulunan başlatma listesinde yapılır:

 class CCandle
{
   int       m_nA;
   double    m_fB;
   datetime m_dtC;


   void CCandle::CCandle( void );
};

CCandle::CCandle( void )
            : m_nA( 0 )
            , m_fB( 0.0 )
            , m_dtC( 0 )
{
}

 
Artyom Trishkin :

Zaten var olmayan bir şeyi nasıl başlatacaksınız? Nesne oluşturulduktan sonra var olmaya başlar ve daha sonra zaten başlatılabilir.

Size hemen söyledim - nesne için parametrik bir kurucu yapın ve yeni oluşturulan nesnenin başlatılacağı gerekli parametreleri ona iletin.

Programın OnInit()'inde gerekli (tüm bu nesneler için sabit) verilerle doldurduğunuz yapıdan parametreleri iletebilirsiniz. Ayrıca, örneğin OnTick()'te veya başka bir standart işleyicide, kendi nesnelerinizi yaratırsınız, ancak oluştururken, örneğin şunun gibi yazın:
CMyObject nesnesi = new CMyObject(and_here_structure_with_set_parameters);

Evet açık. Teşekkür ederim. Şey, bir şekilde, bir çözüm olduğunu düşündüm, böylece bir nesne oluştururken, bunları yapıcıya veya bunun gibi bir şeye iletmeye gerek kalmadan hemen önceden ayarlanmış bazı parametrelere sahip olacaktı. Bazı ebeveyn sınıfı veya başka bir şey aracılığıyla.

 
Juer :
Sınıfta, parametre olarak, gösterge parametreleri vb. gibi her türlü saçmalığım da var. Genel olarak, statik ve aynı ne olacak. Neden her nesne oluşturduğumda bu değerleri geçmem gerekiyor?

O yüzden aktarma. Gösterdiğim gibi başlatma listesinde başlat. Sınıfın bir örneğini oluştururken, sınıf kurucusu otomatik olarak çağrılır ve bu, başlatma listesinde belirtilen tüm sınıf üyelerinin başlatılmasını gerektirir. Print işlevini CCandle yöntemine koyun ve yapıcının herhangi bir çağrı olmadan nasıl çağrıldığını göreceksiniz.

 
Juer :

Evet açık. Teşekkür ederim. Şey, bir şekilde, bir çözüm olduğunu düşündüm, böylece bir nesne oluştururken, bunları yapıcıya veya bunun gibi bir şeye iletmeye gerek kalmadan hemen önceden ayarlanmış bazı parametrelere sahip olacaktı. Bazı ebeveyn sınıfı veya başka bir şey aracılığıyla.

Tekrar. Yapıcıya veri iletmeden mümkündür.

 
Ihor Herasko :

O yüzden aktarma. Gösterdiğim gibi başlatma listesinde başlat. Sınıfın bir örneğini oluşturma anında, sınıf kurucusu otomatik olarak çağrılır ve bu, başlatma listesinde belirtilen tüm sınıf üyelerinin başlatılmasını gerektirir. Print işlevini CCandle yöntemine koyun ve yapıcının herhangi bir çağrı olmadan nasıl çağrıldığını göreceksiniz.

Anlamadım, onları yapıcıdan mı yoksa başlatma işlevinden mi geçirmek arasındaki fark nedir?

 
Ihor Herasko :

O yüzden aktarma. Gösterdiğim gibi başlatma listesinde başlat. Sınıfın bir örneğini oluşturma anında, sınıf kurucusu otomatik olarak çağrılır ve bu, başlatma listesinde belirtilen tüm sınıf üyelerinin başlatılmasını gerektirir. Print işlevini CCandle yöntemine koyun ve yapıcının herhangi bir çağrı olmadan nasıl çağrıldığını göreceksiniz.

Nasıl başlatılacaklar? Hangi değerler? belirsiz

Diyelim ki uzmanın giriş parametrelerinde başlangıç değerlerine sahibim. Burada onları bu sınıfın her nesnesine aktarmam gerekiyor. Ama her yeni yaratılana geçmemek.

 

merhaba, bana neden böyle bir döngü ile limit emirlerinin benden sadece bir limit emri ayarladıktan sonra bir sonrakinde silindiğini söyleyin. barda bir limit emri daha ayarlanmamış, yani limit emri sadece ayarlanmışsa kaldırılır ve bundan sonra limit emrinin olmadığı yerde 2 bar takip eder

 int i;
   for (i= 0 ;i<= OrderTicket ();i++)
     {
      takelimit= OrderSelect (ticket, SELECT_BY_TICKET , MODE_TRADES );

       if ( iBarShift ( Symbol (), 0 , OrderOpenTime ())== 2 ) //здесь нужно что бы на 2-ом баре если есть ордер его удалить, но удаляется он только если после его установки небыло на след баре еще лимитника
        {
         deletelimit= OrderDelete (ticket);
         if (!deletelimit)
           {
             Comment ( GetLastError ());
           }
        }
     }
if (условие для байлимита)
{ордерсенд}
else if (условие для селлимита)
{ордерсенд}
 
Juer :

Nasıl başlatılacaklar? Hangi değerler? belirsiz

Başlatma listesine yazdıklarınız.

Diyelim ki uzmanın giriş parametrelerinde başlangıç değerlerine sahibim. Burada onları bu sınıfın her nesnesine aktarmam gerekiyor. Ama her yeni yaratılana geçmemek.

Evet işte burada:

 input int       i_nA     = 10 ;
input double    i_fB     = 20.0 ;
input datetime i_dtC    = D'2018.03.08 10:12:14' ;

class CCandle
{
   int          m_nA;
   double       m_fB;
   datetime     m_dtC;
   
public :
                     CCandle( void );
};

CCandle::CCandle( void )
         : m_nA(i_nA)
         , m_fB(i_fB)
         , m_dtC(i_dtC)
{
   Print ( "Создан объект со значениями: A = " , m_nA, ", B = " , m_fB, ", C = " , m_dtC);
}

int OnInit ()
{
   CCandle arrclass[ 10 ];
     
   return ( INIT_SUCCEEDED );
}

Çalıştırırsak şunu elde ederiz:

 0        22 : 09 : 36.706     Test EURUSD,M1 inputs: i_nA= 10 ; i_fB= 20.0 ; i_dtC= 1520503934 ; 
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: Создан объект со значениями: A = 10 , B = 20.0 , C = 2018.03 . 08 10 : 12 : 14
0        22 : 09 : 36.995     Test EURUSD,M1: initialized
0        22 : 09 : 36.995     Test EURUSD,M1: uninit reason 0
0        22 : 09 : 37.062     Script Test EURUSD,M1: removed