입력 변수

input 스토리지 클래스는 외부 변수를 정의합니다. input 한정자는 데이터 유형 앞에 표시됩니다. 입력 한정자가 있는 변수는 mql5 프로그램 내에서 변경할 수 없습니다. 이러한 변수는 읽기전용으로만 액세스할 수 있습니다. 입력 변수의 값은 프로그램 속성 창의 사용자만 변경할 수 있습니다. 외부 변수는 항상 OnInit()가 호출되기 직전에 다시 초기화됩니다.

예제:

//--- 입력 매개 변수
input int            MA_Period=13;
input int            MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMMA;

입력 변수는 프로그램의 입력 매개 변수를 결정합니다. 프로그램의 속성 창에서 사용할 수 있습니다.

입력 매개 변수의 값 설정

입력 탭에서 입력 파라미터의 모양을 설정하는 다른 방법이 있습니다. 이를 위해 입력 매개 변수의 설명 뒤에 같은 줄에 문자열 주석을 배치합니다. 이렇게 하면 입력 매개 변수의 이름을 사용자가 더 쉽게 이해할 수 있습니다.

예제:

//--- 입력 매개 변수
input int            InpMAPeriod=13;         // 평활 기간
input int            InpMAShift=0;           // 라인 수평 이동
input ENUM_MA_METHOD InpMAMethod=MODE_SMMA;  // 평활법

입력 매개 변수를 표시하는 합리적인 방법

참고: 복합 유형의 배열 및 변수는 입력 변수로 작동할 수 없습니다.

참고: 입력 변수에 대한 문자열 주석 길이는 63자를 초과할 수 없습니다.

 

MQL5 프로그램에서 커스텀 지표를 호출할 때 매개 변수 전달 #

커스텀 지표는 iCustom() 함수를 사용하여 호출됩니다. 커스텀 지표의 이름 뒤에는 매개 변수가 이 커스텀 지표의 입력 변수 선언에 엄격하게 따라야 합니다. 표시된 매개 변수가 호출된 커스텀 지표에 선언된 입력 변수보다 작으면 누락된 매개 변수는 변수 선언 중에 지정된 값으로 채워집니다.

커스텀 지표가 첫 번째 유형의 OnCalculate 함수를 사용하는 경우(즉, 지표가 동일한 데이터 배열을 사용하여 계산됨), 이러한 커스텀 지표를 호출할 때 다른 지표의 ENUM_APPLIED_PRICE 값 또는 핸들 중 하나를 마지막 매개변수로 사용해야 합니다. 입력 변수에 해당하는 모든 매개변수를 명확히 표시해야 합니다.

입력 매개 변수로서의 열거값

MQL5에서 제공하는 내장 열거뿐 아니라 커스텀 변수(mql5 프로그램의 입력 매개 변수)도 입력 변수로 사용할 수 있습니다. 예를 들어, 요일을 설명하는 dayOfWeek 열거를 생성하고 입력 변수를 사용하여 숫자가 아닌 일반적인 방법으로 특정 요일을 지정할 수 있습니다.

예제:

#property script_show_inputs
//--- 요일
enum dayOfWeek 
  {
   S=0,     // 일요일
   M=1,     // 월요일
   T=2,     // 화요일
   W=3,     // 수요일
   Th=4,    // 목요일
   Fr=5,    // 금요일,
   St=6,    // 토요일
  };
//--- 입력 매개 변수
input dayOfWeek swapday=W;

스크립트 시작 중에 사용자가 속성 창에서 필요한 값을 선택할 수 있도록 전처리기 명령 #property script_show_inputs 를 사용합니다. 스크립트를 시작하고 목록에서 dayOfWeek 열거값 중 하나를 선택할 수 있습니다. EnumInInput 스크립트를 시작하고 Inputs 탭으로 이동합니다. 기본적으로 스왑일 값(트리플 스왑 비용 청구일)은 수요일(W = 3)이지만 다른 값을 지정할 수 있으며 이 값을 사용하여 프로그램 작업을 변경할 수 있습니다.

입력 매개 변수로의 커스텀 열거값 예제

열거 가능한 값 수가 제한됩니다. 입력 값을 선택하기 위해 드롭다운 목록이 사용됩니다. 열거형 멤버의 니모닉 이름은 목록에 표시된 값에 사용됩니다. 이 예와 같이 설명이 니모닉 이름과 연결된 경우 니모닉 이름 대신 주석 내용이 사용됩니다.

dayOfWeek 열거의 각 값은 0에서 6 사이의 값을 가지지만 매개 변수 목록에는 각 값에 대해 지정된 설명이 표시됩니다. 이를 통해 입력 매개변수에 대한 명확한 설명이 있는 프로그램을 작성할 수 있습니다.

 

sinput 한정자가 있는 변수 #

input 한정자를 가진 변수는 프로그램을 시작할 때 외부 매개변수 값을 설정할 수 있을 뿐만 아니라 전략 테스터에서 거래 전략을 최적화할 때도 필요합니다. 문자열 유형 중 하나를 제외한 각 입력 변수를 최적화에 사용할 수 있습니다.

때로는 테스터의 모든 통과 영역에서 일부 외부 프로그램 매개변수를 제외해야 합니다. sinput 메모리 한정자가 이러한 경우에 도입되었습니다. sinput은 정적 외부 변수 선언(input = 정적 입력)을 나타냅니다. 이는 Expert Advisor 코드에 다음과 같은 선언이 있음을 의미합니다

sinput       int layers=6;   // 레이어의 수

완전 선언과 동일할 것입니다

static input int layers=6;   // 레이어의 수

sinput 한정자로 선언된 변수는 MQL5 프로그램의 입력 매개 변수입니다. 프로그램 실행 시 이 파라미터의 값을 변경할 수 있습니다. 그러나 이 변수는 입력 매개 변수의 최적화에는 사용되지 않습니다. 즉, 지정된 조건에 가장 적합한 매개변수 집합을 검색할 때 해당 값이 열거되지 않습니다.

전략 테스터의 sinput 매개 변수

위에 표시된 Expert Advisor에는 5가지 외부 매개 변수가 있습니다. "레이어 수" 는 sinput로 선언되고 6과 같습니다. 거래 전략 최적화 중에는 이 매개 변수를 변경할 수 없습니다. 그것이 더 이상 사용되는 데 필요한 값을 지정할 수 있습니다. 이러한 변수에는 시작, 단계 및 중지 필드를 사용할 수 없습니다.

따라서 변수에 대한 입력 수정자를 지정한 후에는 사용자가 이 매개 변수를 최적화할 수 없습니다. 즉, 터미널 사용자는 최적화 중에 지정된 범위의 자동 열거를 위해 전략 테스터에서 터미널의 초기 및 최종 값을 설정할 수 없습니다.

그러나 이 규칙에는 ParameterSetRange() 함수를 사용하여 최적화 작업에서 sinput 변수를 변경할 수 있다는 한 가지 예외가 있습니다. 이 함수는 모든 input 변수에 대해 사용 가능한 값 세트를 프로그램 제어하기 위해 특별히 도입 되었으며, 정적 인풋(sinput)으로 선언된 변수를 포함합니다. ParameterGetRange() 함수를 사용하면 최적화가 실행될 때(OnTesterInit() 핸들러에서) 입력 변수 값을 수신하고, 최적화된 매개변수 값이 열거될 변경 단계 값과 범위를 재설정할 수 있습니다.

이러한 방식으로 입력 매개 변수와 함께 작동하는 두 함수를 결합하면 다른 입력 매개 변수의 값에 따라 달라지는 입력 매개 변수의 최적화 간격을 설정하는 유연한 규칙을 만들 수 있습니다.

 

입력 매개 변수 정렬 #

MQL5 프로그램으로 편리하게 작업할 수 있도록 입력 매개변수를 group 키워드를 사용하여 명명된 블록으로 나눌 수 있습니다. 이를 통해 일부 매개 변수를 다른 매개 변수와 시각적으로 구분할 수 있습니다.

input group           "그룹명"
input int             variable1 = ...
input double          variable2 = ...
input diuble          variable3= ...

이러한 선언 후 차트 또는 전략 테스터에서 실행할 때 MQL5 사용자에 대한 매개 변수 구성을 단순화하는 모든 입력 매개 변수가 지정된 그룹에 시각적으로 결합됩니다. 새 그룹 선언이 나타날 때까지 각 그룹의 규격이 유효합니다:

input group           "그룹명 #1"
input int             group1_var1 = ...
input double          group1_var2 = ...
input double          group1_var3 = ...
 
input group           "그룹명 #2
input int             group2_var1 = ...
input double          group2_var2 = ...
input double          group2_var3 = ...

입력 블록을 용도에 따라 구분한 샘플 EA:

input group           "시그널"
input int             ExtBBPeriod   = 20;       // 볼린저 밴드 기간
input double          ExtBBDeviation2.0;      // 편차
input ENUM_TIMEFRAMES ExtSignalTF=PERIOD_M15;   // BB 타임프레임
 
input group           "추세"
input int             ExtMAPeriod   = 13;       // 이동평균기간
input ENUM_TIMEFRAMES ExtTrendTF=PERIOD_M15;    // MA 타임프레임
 
input group           "ExitRules"
input bool            ExtUseSL      = true;     // StopLoss 사용
input int             Ext_SL_Points = 50;       // 포인트에서 StopLoss
input bool            ExtUseTP      = false;    // TakeProfit 사용
input int             Ext_TP_Points = 100;      // 포인트에서 TakeProfit
input bool            ExtUseTS      = true;     // Trailing Stop 사용
input int             Ext_TS_Points = 30;       // 포인트에서 Trailing Stop
 
input group           "MoneyManagement"
sinput double         ExtInitialLot = 0.1;      // 초기 롯 값
input bool            ExtUseAutoLot = true;     // 자동 롯 계산
 
input group           "보조적"
sinput int            ExtMagicNumber = 123456;  // EA 매직 넘버
sinput bool           ExtDebugMessagetrue;    // 디버그 메시지 출력

전략 테스터에서 이러한 EA를 실행할 때 그룹 이름을 두 번 클릭하여 입력 블록을 축소/확장할 수 있으며 그룹 확인란을 클릭하여 최적화를 위한 모든 매개 변수를 선택할 수 있습니다.

전략 테스터에서 EA 입력 매개 변수 정렬

 

더 보기

iCustom, 열거, 프로그램 속성