Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1566

 
Mikhail Tkachev:

Se você tem um EA de três linhas, então é claro que você não precisa de OOP).

Mas se eu tivesse que criar o Goblin com um braço e três pernas, e depois com uma perna e três braços - então, sim, é aí que o OOP realmente me ajudaria. Embora... Eu também não sei.

De que adianta tê-lo aqui?

E não importa em absoluto quantas "linhas" você tem. ;)
 
Mikhail Tkachev:

Somente int ou duplo?
E se a variável for um objeto de uma classe?
E se o número desses objetos for desconhecido de antemão [antes da execução do OnInit()]?
E se os parâmetros dos construtores são desconhecidos antecipadamente [antes do OnInit()]?

Você deu um bom elo e exemplo sobre a declaração de aulas.

Em qualquer caso, os globais são declarados antes do OnInit(); os outros são declarados cada vez que são necessários

 
MakarFX:

Em qualquer caso, as globais são declaradas antes do OnInit(), as outras são declaradas cada vez que são necessárias

Isto é claro em teoria.
Na prática, após :

declaração de 'NB_M1' esconde variável global -> por linha no OnInit()

ver declaração anterior de 'NB_M1'.

o especialista trabalha como se NB_M1 fosse global (e corretamente inicializado), embora esteja escondido por uma declaração local e inicializado como local no OnInit().

Por idéia, não deve funcionar em absoluto.

 
Mikhail Tkachev:

Em teoria, isto faz sentido.
Na prática, após :

declaração de 'NB_M1' esconde variável global -> por linha no OnInit()

ver declaração anterior de 'NB_M1'.

o especialista trabalha como se NB_M1 fosse global (e corretamente inicializado), embora esteja escondido pela declaração local no OnInit().

Por idéia, não deve funcionar em absoluto.

O que é NB_M1? Talvez já tenha sido declarado na biblioteca? E sem nenhum código, como surdos com cegos)
 
Сергей Таболин:


E não importa quantas "cordas" você tenha. ;)

Quando você tiver cem ou duas linhas de código, porque quer começar com isto, então esqueça para que serve, depois acrescente isto, depois naturalmente (?) surgirá o pensamento: "Como organizá-lo?" ou não).

 
MakarFX:
O que é NB_M1? Talvez já tenha sido declarado na biblioteca? E sem código algum, é como surdo e cego)

NB_M1 é um objeto da classe CIsNewBar para definir o início de uma nova barra para cada personagem. Não, não é declarado na biblioteca.
Código no primeiro post :https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

 
Mikhail Tkachev:

NB_M1 é um objeto da classe CIsNewBar para definir o início de uma nova barra para cada personagem. Não, não é declarado na biblioteca.
O código no primeiro post :https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

Portanto, NB_M1 é declarado dentro da classe e pode ser acessado lá

Podemos dar uma olhada no código desta classe?

 
NB_M1 é um objeto desta classe. Como colocá-lo dentro ?
//+------------------------------------------------------------------+
//|                                                     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 é um objeto desta classe. Como colocá-lo dentro ?
para que serve esta variável NB_M1 ?
 
Mikhail Tkachev:
NB_M1 é um objeto desta classe. Como colocá-lo dentro ?

Acho que é assim que deve ser

bool NB_M1;
int OnInit()
{
}

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