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

 
Mikhail Tkachev :

Üç satırlık bir danışmanınız varsa, elbette OOP'ye ihtiyacınız yok)

Şimdi, eğer bir kollu ve üç bacaklı ve sonra bir bacaklı ve üç kollu bir Goblin yaratmam gerekirse, o zaman evet, OOP bana burada gerçekten yardımcı olurdu. Her ne kadar ... aynı zamanda bir gerçek değil.

Ve sonra ne için gerekli?

Ve kaç tane "satırınız" olduğu önemli değil. ;)
 
Mikhail Tkachev :

Sadece int mi yoksa çift mi?
Değişken bir sınıfın nesnesiyse ne olur?
Ve bu tür nesnelerin sayısı önceden bilinmiyorsa [OnInit()] yürütülmeden önce?
Ve eğer yapıcıların parametreleri önceden bilinmiyorsa [OnInit()] çalıştırılmadan önce?

İyi bir bağlantı verdiniz ve sınıfları bildirmekle ilgili güzel bir örnek var.

Her durumda, Globaller OnInit()'ten önce bildirilir, geri kalanı her seferinde gerektiği gibi bildirilir.

 
MakarFX :

Her durumda, Globaller OnInit()'ten önce bildirilir, geri kalanı her seferinde gerektiği gibi bildirilir.

Teoride, bu anlaşılabilir.
Uygulamada, sonra:

'NB_M1' bildirimi, OnInit() içindeki satır başına global değişkeni -> gizler

önceki 'NB_M1' beyanına bakın

Expert Advisor, yerel bildirim tarafından gizlenmesine ve OnInit() içinde yerel olarak başlatılmasına rağmen, NB_M1 globalmiş (ve doğru şekilde başlatılmış) gibi çalışır.

Teoride, hiç çalışmamalı.

 
Mikhail Tkachev :

Teoride, bu anlaşılabilir.
Uygulamada, sonra:

'NB_M1' bildirimi, OnInit() içindeki satır başına global değişkeni -> gizler

önceki 'NB_M1' beyanına bakın

Expert Advisor, OnInit() içindeki yerel bir bildirimle gizlenmiş olmasına rağmen, NB_M1 globalmiş (ve doğru şekilde başlatılmış) gibi çalışır.

Teoride, hiç çalışmamalı.

NB_M1 nedir? Belki de zaten kütüphanede ilan edilmiştir? Ve genellikle bir kod olmadan, körle sağır gibi)
 
Сергей Таболин :


Ve kaç tane "satırınız" olduğu önemli değil. ;)

Kendi başına yüzlerce veya iki satır koda sahip olduğunuzda, çünkü bunu en baştan bozmak istiyorsunuz, ama zaten nedenini unuttunuz, sonra bunu vidalayın, sonra doğal olarak (?) Şu düşünce ortaya çıkacaktır: “Bu nasıl olur? sadeleştirilsin mi?" Yoksa olmayacak.)

 
MakarFX :
NB_M1 nedir? Belki de zaten kütüphanede ilan edilmiştir? Ve genellikle bir kod olmadan, körle sağır gibi)

NB_M1 - her sembol için yeni bir çubuğun başlangıcını belirlemek için CIsNewBar sınıfının bir nesnesi. Hayır, kütüphanede bildirilmemiştir.
İlk gönderideki kod: https://www.mql5.com/en/forum/160683/page1547#comment_23712294

 
Mikhail Tkachev :

NB_M1 - her sembol için yeni bir çubuğun başlangıcını belirlemek için CIsNewBar sınıfının bir nesnesi. Hayır, kütüphanede bildirilmemiştir.
İlk gönderideki kod: https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

NB_M1'in sınıf içinde bildirildiği ve erişim olduğu anlamına gelir

Bu sınıfın koduna bir göz atabilir misiniz?

 
NB_M1 bu sınıfın bir nesnesidir. İçeri nasıl alırsın?
 //+------------------------------------------------------------------+
//|                                                     IsNewBar.mqh |
//|                               Copyright © 2011, Nikolay Kositsin |
//|                              Khabarovsk,   farria@mail.redcom.ru | 
//+------------------------------------------------------------------+ 
#property copyright "2011,   Nikolay Kositsin"
#property link        "farria@mail.redcom.ru"
#property version    "1.00"
//+------------------------------------------------------------------+
//|  Алгоритм определения момента появления нового бара              |
//| Для каждого таймфрейма каждого символа нужно создавать объект    |
//+------------------------------------------------------------------+  
#include <Object.mqh>

class CIsNewBar: public CObject // Сделан наследником класса для возможности работы с классом CArrayObj (из библиотеки)
// class CIsNewBar   // Первоначальная редакция
  {
   //----
public :

       //---- функция определения момента появления нового бара
   bool IsNewBar()
     {
       //---- получим время появления текущего бара
       datetime TNew= datetime ( SeriesInfoInteger (m_Symbol,m_TimeFrame, SERIES_LASTBAR_DATE ));

       if (TNew!=m_TOld && TNew) // проверка на появление нового бара
        {
         m_TOld=TNew;
         return ( true ); // появился новый бар!
        }
       //----
       return ( false ); // новых баров пока нет!
     };

   //---- конструктор класса    
                     CIsNewBar( const string &pSymbol, const ENUM_TIMEFRAMES pTimeFrame){
                        m_Symbol=pSymbol; m_TimeFrame=pTimeFrame;
                        m_TOld=- 1 ;};

protected :
   datetime           m_TOld;         // Время хранится 
   ENUM_TIMEFRAMES    m_TimeFrame;   //    для каждого таймфрейма
   string             m_Symbol;       //    каждого символа

   //---- 
  };
//+------------------------------------------------------------------+
 
Mikhail Tkachev :
NB_M1 bu sınıfın bir nesnesidir. İçeri nasıl alırsın?
bu NB_M1 değişkeni neden gerekli?
 
Mikhail Tkachev :
NB_M1 bu sınıfın bir nesnesidir. İçeri nasıl alırsın?

bence olmalı

 bool NB_M1;
int OnInit ()
{
}

void OnTick ()
{
   NB_M1= new CIsNewBar( _Symbol , PERIOD_M1 );   // Эта строка потом будет в цикле для разных символов
   if (NB_M1)   // (1) Если появился новый бар M1
        {....}
    ......
}