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

 
클래스에서 매개 변수로 표시 매개 변수와 같은 모든 종류의 넌센스도 있습니다. 일반적으로 정적이고 동일합니다. 객체를 생성할 때마다 이 값을 전달해야 하는 이유는 무엇입니까?
 
STARIJ :

이게 더 짧나요? bool barup=... WindowRedraw(); 여전히 실행됩니다 - if에서 제거됨

더 짧을 수 있습니다 ... 내 파일 참조

고맙습니다. Fibo 수준이 그려지는 간격을 올바르게 설정하는 방법은 무엇입니까? (시간) 9.00이면 M1에서 8.00에서 8.59까지의 레벨을 그려야 합니다.
 
Juer :

질문의 진술은 어떻게 이해할 수 있습니까? 같은 초기화 감각.

이미 존재하지 않는 것을 어떻게 초기화하시겠습니까? 객체 가 생성된 후 존재하기 시작하며 이미 초기화될 수 있습니다.

나는 즉시 당신에게 말했다 - 객체에 대한 매개변수 생성자를 만들고 그것에 필요한 매개변수를 전달하면 새로 생성된 객체가 초기화됩니다.

프로그램의 OnInit()에서 필요한(모든 개체에 대한 상수) 데이터로 채우는 구조를 통해 매개변수를 전달할 수 있습니다. 또한, 예를 들어 OnTick() 또는 다른 표준 처리기에서 고유한 개체를 생성하지만 생성할 때는 예를 들어 다음과 같이 작성합니다.
CMyObject 개체 = 새로운 CMyObject(and_here_structure_with_set_parameters);

또는 개체 데이터가 프로그램마다 전혀 변경되지 않고 항상 동일한 값을 갖는 경우 Igor가 위에서 말한 것처럼 초기화 목록을 사용하여 필요한 매개변수를 사용하여 생성자에서 명시적으로 초기화합니다.

클래스 생성자에 있는 초기화 목록에서 수행됩니다.

 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 :

이미 존재하지 않는 것을 어떻게 초기화하시겠습니까? 객체를 생성한 후 객체 는 존재하기 시작하며 이미 초기화될 수 있습니다.

나는 즉시 당신에게 말했다 - 객체에 대한 매개변수 생성자를 만들고 그것에 필요한 매개변수를 전달하면 새로 생성된 객체가 초기화됩니다.

프로그램의 OnInit()에서 필요한(모든 개체에 대한 상수) 데이터로 채우는 구조를 통해 매개변수를 전달할 수 있습니다. 또한, 예를 들어 OnTick() 또는 다른 표준 처리기에서 고유한 개체를 생성하지만 생성할 때는 예를 들어 다음과 같이 작성합니다.
CMyObject 개체 = 새로운 CMyObject(and_here_structure_with_set_parameters);

네, 분명합니다. 고맙습니다. 글쎄, 어떻게 든 나는 객체를 생성 할 때 생성자 또는 이와 유사한 것에 전달할 필요없이 사전 설정 매개 변수를 즉시 가질 수 있도록 솔루션이 있다고 생각했습니다. 어떤 부모 수업이나 다른 것을 통해.

 
Juer :
클래스에서 매개 변수로 표시 매개 변수 등과 같은 모든 종류의 넌센스도 있습니다. 일반적으로 정적이고 동일합니다. 객체를 생성할 때마다 이 값을 전달해야 하는 이유는 무엇입니까?

그러니 넘기지 마세요. 내가 보여준 것처럼 초기화 목록에서 초기화하십시오. 클래스의 인스턴스를 생성하는 순간 클래스 생성자가 자동으로 호출되며 초기화 목록에 지정된 모든 클래스 멤버의 초기화가 수반됩니다. CCandle 메서드에 Print 함수를 넣으면 호출 없이 생성자가 어떻게 호출되는지 알 수 있습니다.

 
Juer :

네, 분명합니다. 고맙습니다. 글쎄, 어떻게 든 나는 객체를 생성 할 때 생성자 또는 이와 유사한 것에 전달할 필요없이 사전 설정 매개 변수를 즉시 가질 수 있도록 솔루션이 있다고 생각했습니다. 어떤 부모 수업이나 다른 것을 통해.

다시. 생성자에 데이터를 전달하지 않고도 가능합니다.

 
Ihor Herasko :

그러니 넘기지 마세요. 내가 보여준 것처럼 초기화 목록에서 초기화하십시오. 클래스의 인스턴스를 생성하는 순간 클래스 생성자가 자동으로 호출되며 초기화 목록에 지정된 모든 클래스 멤버의 초기화가 수반됩니다. CCandle 메서드에 Print 함수를 넣으면 호출 없이 생성자가 어떻게 호출되는지 알 수 있습니다.

이해하지 못했습니다. 생성자를 통해 전달하거나 초기화 함수를 통해 전달하는지 여부의 차이점은 무엇입니까?

 
Ihor Herasko :

그러니 넘기지 마세요. 내가 보여준 것처럼 초기화 목록에서 초기화하십시오. 클래스의 인스턴스를 생성할 때 클래스 생성자가 자동으로 호출되며 초기화 목록에 지정된 모든 클래스 멤버의 초기화가 수반됩니다. CCandle 메서드에 Print 함수를 넣으면 호출 없이 생성자가 어떻게 호출되는지 알 수 있습니다.

어떻게 초기화됩니까? 어떤 가치? 불분명

전문가의 입력 매개변수 에 초기값이 있다고 가정해 보겠습니다. 여기에서 이 클래스의 각 개체로 전송해야 합니다. 그러나 새로 생성된 모든 항목에 전달하는 것은 아닙니다.

 

안녕하세요, 왜 그런 주기로 지정가 주문이 지정가 주문을 설정한 후 다음 때에만 지정가 주문이 삭제되는지 알려주세요. 바에 한 번 더 지정가 주문이 설정되지 않았습니다. 즉 지정가 주문이 설정된 경우에만 지정가 주문이 제거되고 그 후에 지정가 주문이 없는 곳에 2개의 바가 따릅니다.

 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 :

어떻게 초기화됩니까? 어떤 가치? 불분명

초기화 목록에 적어둔 것들.

전문가의 입력 매개변수 에 초기값이 있다고 가정해 보겠습니다. 여기에서 이 클래스의 각 개체로 전송해야 합니다. 그러나 새로 생성된 모든 항목에 전달하는 것은 아닙니다.

예, 여기 있습니다:

 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 );
}

실행하면 다음을 얻습니다.

 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