열거 형을 순차적으로 반복하는 방법은 무엇입니까?

 

열거형이 있다고 가정해 보겠습니다. 예를 들어 루프에서 이 열거형의 가능한 모든 값을 순차적으로 가져오는 방법은 무엇입니까?

 ENUM_TIMEFRAMES tf1;

저것들. tf1++는 일관되게 PERIOD_M1 , PERIOD_M2 , PERIOD_M5를 반환해야 합니다... 언어 도구를 사용하여 이 작업을 수행할 수 없다고 생각합니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
마침표 값이 1 증가하지 않기 때문에 이렇게 할 수 없습니다. 다음과 같이 고유한 열거 인덱스를 구성해야 합니다.
 int TF( int i)
{
 switch (i)
 {
   case 1 : return ( PERIOD_M1 );
   case 2 : return ( PERIOD_M5 );
   case 3 : return ( PERIOD_M15 );
   case 4 : return ( PERIOD_M30 );
   case 5 : return ( PERIOD_H1 );
   case 6 : return ( PERIOD_H4 );
   case 7 : return ( PERIOD_D1 );
   case 8 : return ( PERIOD_W1 );
   case 9 : return ( PERIOD_MN1 );
 }
}
 
sergey1294 :
마침표 값이 1 증가하지 않기 때문에 이 작업을 수행할 수 없습니다. 다음과 같이 고유한 열거 인덱스를 구성해야 합니다.

모든 것이 그렇게 간단하다면. 값이 고르게 분포되지 않습니다. PERIOD_H1이 60이고 다음 기간 PERIOD_H2 가 이미 120이라고 가정해 보겠습니다.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Периоды графиков - Документация по MQL5
 
C-4 :
모든 것이 그렇게 간단하다면. 값이 고르게 분포되지 않습니다. PERIOD_H1이 60이고 다음 기간 PERIOD_H2 가 이미 120이라고 가정해 보겠습니다.

아마도 두 가지 함수를 도입해야 할 것입니다. 1 - 열거형의 요소 수를 반환하고, 2 - 숫자별로 요소를 반환합니다.

 
Interesting :

아마도 두 가지 함수를 도입해야 할 것입니다. 1 - 열거의 요소 수를 반환하고, 2 - 숫자별로 요소를 반환합니다.


맞아, MT4에서 내가 그랬어
 
C-4 :
모든 것이 그렇게 간단하다면. 값이 고르게 분포되지 않습니다. PERIOD_H1이 60이고 다음 기간 PERIOD_H2 가 이미 120이라고 가정해 보겠습니다.

결론은 열거형은 미리 정의된 것이며 모든 값을 볼 수 있다는 것입니다.

그러므로 친애하는 sergey1294 , 그는 번역 테이블을 직렬 호출로 설명하도록 조언했습니다.

여기서 값이 1만큼 증가하면 목록의 다음 열거 값이 호출됩니다.

 
일반적으로 해결책은 하나뿐입니다. 각 열거에 대해 특별한 열거자 함수를 작성하십시오. 예를 들어 타임프레임의 경우:
 ENUM_TIMEFRAMES GetPeriodEnumerator(uchar i);
이제 얼마나 많은 열거가 있고 거기에 얼마나 많은 변환기 기능이 있어야 하는지 추정해 봅시다(각 열거에 대해 하나씩).
 
C-4 :
일반적으로 해결책은 하나뿐입니다. 각 열거에 대해 특별한 열거자 함수를 작성하십시오. 예를 들어 Timeframes의 경우: 이제 얼마나 많은 열거형이 있고 거기에 얼마나 많은 변환기 기능이 있어야 하는지 추정해 보겠습니다(각 열거형에 대해 하나씩).
MT5에는 21개의 타임프레임이 있습니다. 최종 버전은 다음과 같습니다.
 ENUM_TIMEFRAMES GetPeriodEnumerator( uchar i)
  {
   switch (i)
     {
       case 0    return ( PERIOD_M1 );
       case 1    return ( PERIOD_M2 );
       case 2    return ( PERIOD_M3 );
       case 3    return ( PERIOD_M4 );
       case 4    return ( PERIOD_M5 );
       case 5    return ( PERIOD_M6 );
       case 6    return ( PERIOD_M10 );
       case 7    return ( PERIOD_M12 );
       case 8    return ( PERIOD_M15 );
       case 9    return ( PERIOD_M20 );
       case 10 return ( PERIOD_M30 );
       case 11 return ( PERIOD_H1 );
       case 12 return ( PERIOD_H2 );
       case 13 return ( PERIOD_H3 );
       case 14 return ( PERIOD_H4 );
       case 15 return ( PERIOD_H6 );
       case 16 return ( PERIOD_H8 );
       case 17 return ( PERIOD_H12 );
       case 18 return ( PERIOD_D1 );
       case 19 return ( PERIOD_W1 );
       case 20 return ( PERIOD_MN1 );
     }
   return (- 1 );
  }
 
sergey1294 :
MT5에는 21개의 타임프레임이 있습니다. 최종 버전은 다음과 같습니다.
나머지 표준 열거자(식별자)에 대해 동일한 작업을 수행해야 합니다. + 다른 경우 사용자 지정 항목을 잊지 마세요...
 
다른 옵션이 있습니다 . 시간 프레임 값 을 배열에 쓰고 이 배열을 반복하여 필요한 값을 얻습니다.
Документация по MQL5: Предопределенные переменные / _Period
Документация по MQL5: Предопределенные переменные / _Period
  • www.mql5.com
Предопределенные переменные / _Period - Документация по MQL5
 

일반적으로 두 가지 옵션이 있습니다

함수를 사용하는 첫 번째, 마지막 게시물에 콜론을 넣는 것을 잊었습니다.

 ENUM_TIMEFRAMES GetPeriodEnumerator( uchar i)
  {
   switch (i)
     {
       case 0 :   return ( PERIOD_M1 );
       case 1 :   return ( PERIOD_M2 );
       case 2 :   return ( PERIOD_M3 );
       case 3 :   return ( PERIOD_M4 );
       case 4 :   return ( PERIOD_M5 );
       case 5 :   return ( PERIOD_M6 );
       case 6 :   return ( PERIOD_M10 );
       case 7 :   return ( PERIOD_M12 );
       case 8 :   return ( PERIOD_M15 );
       case 9 :   return ( PERIOD_M20 );
       case 10 : return ( PERIOD_M30 );
       case 11 : return ( PERIOD_H1 );
       case 12 : return ( PERIOD_H2 );
       case 13 : return ( PERIOD_H3 );
       case 14 : return ( PERIOD_H4 );
       case 15 : return ( PERIOD_H6 );
       case 16 : return ( PERIOD_H8 );
       case 17 : return ( PERIOD_H12 );
       case 18 : return ( PERIOD_D1 );
       case 19 : return ( PERIOD_W1 );
       case 20 : return ( PERIOD_MN1 );
     }
   return (- 1 );
  }
배열을 사용하는 두 번째 옵션
 ENUM_TIMEFRAMES GetPeriodEnumerator[ 21 ]=
  {
   PERIOD_M1 ,
   PERIOD_M2 ,
   PERIOD_M3 ,
   PERIOD_M4 ,
   PERIOD_M5 ,
   PERIOD_M6 ,
   PERIOD_M10 ,
   PERIOD_M12 ,
   PERIOD_M15 ,
   PERIOD_M20 ,
   PERIOD_M30 ,
   PERIOD_H1 ,
   PERIOD_H2 ,
   PERIOD_H3 ,
   PERIOD_H4 ,
   PERIOD_H6 ,
   PERIOD_H8 ,
   PERIOD_H12 ,
   PERIOD_D1 ,
   PERIOD_W1 ,
   PERIOD_MN1
  };
사유: