MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1566

 
Mikhail Tkachev :

3줄의 어드바이저가 있다면 당연히 OOP는 필요없겠죠)

이제 한 팔과 세 다리가 있는 고블린을 만들고 한 다리와 세 팔을 가진 고블린을 만들어야 하는 경우 예, 여기에서 OOP가 정말 도움이 될 것입니다. 비록 ... 또한 사실이 아닙니다.

그리고 그것은 무엇을 위해 필요합니까?

얼마나 많은 "줄"이 있는지는 중요하지 않습니다. ;)
 
Mikhail Tkachev :

int 또는 double 만?
변수가 클래스의 객체 라면?
그리고 [OnInit()]이 실행되기 전에 그러한 객체의 수를 미리 알 수 없다면?
그리고 [OnInit()]이 실행되기 전에 생성자의 매개변수를 미리 알 수 없다면?

당신은 좋은 링크를 제공했으며 클래스 선언에 대한 좋은 예가 있습니다.

어쨌든 Globals는 OnInit() 전에 선언되고 나머지는 필요할 때마다 선언됩니다.

 
MakarFX :

어쨌든 Globals는 OnInit() 전에 선언되고 나머지는 필요할 때마다 선언됩니다.

이론적으로 이것은 이해할 수 있습니다.
실제로 다음을 수행한 후:

'NB_M1' 선언은 전역 변수를 숨김 -> OnInit()의 줄당

'NB_M1'의 이전 선언 참조

Expert Advisor는 로컬 선언에 의해 숨겨지고 OnInit()에서 로컬로 초기화되지만 NB_M1이 전역(및 올바르게 초기화됨)인 것처럼 작동합니다.

이론상으로는 전혀 작동하지 않아야 합니다.

 
Mikhail Tkachev :

이론적으로 이것은 이해할 수 있습니다.
실제로 다음을 수행한 후:

'NB_M1' 선언은 전역 변수를 숨김 -> OnInit()의 줄당

'NB_M1'의 이전 선언 참조

Expert Advisor는 OnInit()의 로컬 선언에 의해 숨겨지지만 NB_M1이 전역이고 올바르게 초기화된 것처럼 작동합니다.

이론상으로는 전혀 작동하지 않아야 합니다.

NB_M1이 무엇인가요? 아마도 라이브러리에 이미 선언되어 있습니까? 그리고 일반적으로 장님과 귀머거리처럼 코드가 없습니다)
 
Сергей Таболин :


얼마나 많은 "줄"이 있는지는 중요하지 않습니다. ;)

백 두 줄의 코드가 있을 때 처음부터 이것을 조이고 싶지만 이미 이유를 잊어버렸기 때문에 이것을 조이고 나면 자연스럽게(?) 생각이 떠오를 것입니다. 간소화?" 아니면 안 됩니다.)

 
MakarFX :
NB_M1이란 무엇입니까? 아마도 라이브러리에 이미 선언되어 있습니까? 그리고 일반적으로 코드가없는 청각 장애인과 같이 시각 장애인)

NB_M1 - 각 기호에 대한 새 막대의 시작을 결정하기 위한 CIsNewBar 클래스의 개체입니다. 아니요, 라이브러리에 선언되어 있지 않습니다.
첫 번째 게시물의 코드: https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

 
Mikhail Tkachev :

NB_M1 - 각 기호에 대한 새 막대의 시작을 결정하기 위한 CIsNewBar 클래스의 개체입니다. 아니요, 라이브러리에 선언되어 있지 않습니다.
첫 번째 게시물의 코드: https://www.mql5.com/ru/forum/160683/page1547#comment_23712294

NB_M1이 클래스 내부에 선언되고 액세스 권한이 있음을 의미합니다.

이 클래스의 코드를 볼 수 있습니까?

 
NB_M1은 이 클래스의 객체입니다. 안에 어떻게 넣나요?
 //+------------------------------------------------------------------+
//|                                                     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은 이 클래스의 객체입니다. 안에 어떻게 넣나요?
이 NB_M1 변수가 필요한 이유는 무엇입니까?
 
Mikhail Tkachev :
NB_M1은 이 클래스의 객체입니다. 안에 어떻게 넣나요?

내 생각에

 bool NB_M1;
int OnInit ()
{
}

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