mql5 언어의 특징, 미묘함 및 작업 방법 - 페이지 111

 
pavlick_ :

...

내장된 텍스트 형식 을 사용하십시오. 메시지 입력 필드 위에 메뉴가 있습니다. 모든 것이 있습니다. 그리고 바로 가기 키도 거기에 설명되어 있습니다.

나는 당신의 인용문을 수정했습니다.

 
pavlick_ :

어떻게 똑같나요? 자동으로 복사 생성자가 있고 모든 조작은 다음과 같습니다.

... 
ar.Add( new (q));


내가 알기로는 새로운 Q(q)를 의미했습니다. 이제 MQL에 자동 복사 생성자가 없다는 것이 분명해졌습니다.

 

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2018.12.21 10:23

알 수 없습니다. 도와주세요. 그런 시간이 있습니다

 int GetHandle() { return ( 0 ); }

bool SelectHandle( int ) { return ( true ); }
  
int NewHandle = 0 ;  
int PrevHandle = GetHandle();    

datetime time = SelectHandle(NewHandle) ? TimeCurrent () : 0 ;  
SelectHandle(PrevHandle);


동일한 작업을 수행하는 매크로를 작성하는 방법

time = MACROS(NewHandle, TimeCurrent ()); // Макрос


문제는 매크로에서 PrevHandle을 만들 수 없다는 것입니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

오류, 버그, 질문

fxsaber , 2018.12.21 22:15

나는 NewHandle이 상수일 수 있다는 것을 분명히 할 것입니다. 저것들. 유효한 전화
time = MACROS( 0 , TimeCurrent ()); // TimeCurrent из 0-хендла.
time = MACROS( 1 , TimeCurrent ()); // TimeCurrent из 1-хендла.

MACROS( 0 , SymbolInfoTick ( _Symbol , Tick)); // SymbolInfoTick из 0-хендла.

#define Bid SymbolInfoDouble ( _Symbol , SYMBOL_BID )
Price = MACROS( 3 , Bid ); // Bid из 3-хендла.


결정

 template < typename T>
T Memory( const T NewValue, const bool SetFlag = true )
{
   static T PrevValue;
  
   if (SetFlag)
    PrevValue = NewValue;
 
   return (PrevValue); 
}

template < typename T1, typename T2>
T2 MacrosFunc( const T1, const T2 Value, const T1 )
{
   return (Value);
}

#define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false )), B, SelectHandle(Memory(A)))


 
fxsaber :

결정

...
template < typename T1, typename T2>
T2 MacrosFunc( const T1, const T2 Value, const T1 )
{
   return (Value);
}

#define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false )), B, SelectHandle(Memory(A)))


표현식 B 는 나머지에 관계없이 항상 평가되고 반환됩니다.

 
Alexey Navoykov :

표현식 B 는 나머지에 관계없이 항상 평가되고 반환됩니다.

보조 기능의 입력 매개변수를 순차적으로(오른쪽에서 왼쪽으로) 계산합니다.

 
fxsaber :

보조 기능의 입력 매개변수를 순차적으로(오른쪽에서 왼쪽으로) 계산합니다.

그것은 무엇을 변경합니까? 매크로는 항상 값 B를 반환합니다.
 
Alexey Navoykov :
그것은 무엇을 변경합니까? 매크로는 항상 값 B를 반환합니다.

결정을 반박하려고 노력하십시오. 오류가 표시되지 않습니다.


먼저 NewHandle로 전환한 다음 B를 가져온 다음 이전 핸들로 전환합니다.

 
fxsaber :

먼저 NewHandle로 전환한 다음 B를 가져온 다음 이전 핸들로 전환합니다.

원래 작업은 다음과 같습니다.

SelectHandle(NewHandle) ? TimeCurrent () : 0 ; SelectHandle(PrevHandle);

저것들. 조건이 충족되어야 합니다
 
Alexey Navoykov :

원래 작업은 다음과 같습니다.

그래서 같은

 template < typename T1, typename T2>
T2 MacrosFunc( const T1 NewHandle, const T2 Value )
{
   return (Value);
}

#define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false )), SelectHandle(Memory(A)) ? B : 0 )


그런 다음 그는 작업을 다소 일반화하는 주석을 제공했습니다. SymbolInfoTick 및 SymbolInfoDouble 등이 모두 있습니다.

 

그런데 일반적인 경우 함수의 반환값의 타입이 절대적으로 any이면 MQL 도구를 사용하여 작업을 해결할 수 없다는 결론에 이르렀습니다. 여기에 없는 decltype이 필요합니다.

사유: