OnInit

이 함수는 Init 이벤트가 발생할 때 지표 및 EA로 호출됩니다. 실행 중인 MQL5 프로그램을 초기화하는 데 사용됩니다. 두 가지 함수 유형이 있습니다.

결과를 반환하는 버전

int  OnInit(void);

반환 값

int 타입 값, 0은 초기화가 성공했음을 의미합니다.

INIT_FAILED를 반환하면 EA가 차트에서 강제로 언로드됩니다.

INIT_FAILED를 반환하면 지표가 차트에서 언로드되지 않습니다. 차트에 남아 있는 지표는 작동하지 않습니다. — 이벤트 핸들러는 지표에서 호출되지 않습니다.

실행 결과를 반환하는 OnInit() 호출은 프로그램 초기화를 허용할 뿐 아니라 프로그램이 조기에 종료되는 경우 오류 코드를 반환하므로 사용하는 것이 좋습니다.

결과 반환 없는 버전은 이전 코드와의 호환성을 위해서만 유지됩니다. 사용을 권장하지 않습니다

void  OnInit(void);

참고

Init 이벤트는 EA 또는 지표를 로드한 후 즉시 생성됩니다. 스크립트에 대한 이벤트가 생성되지 않았습니다. OnInit() 함수는 MQL5 프로그램을 초기화하는 데 사용됩니다. OnInit()의 반환 값이 int 유형인 경우, 0이 아닌 반환 코드는 초기화에 실패했음을 의미하며 Deinit 이벤트를 REASON_INITFAILED 초기화 해제 근거 코드를 사용하여 생성합니다.

OnInit()의void 타입의 함수는 항상 성공적인 초기화를 의미하며 사용하지 않는 것이 좋습니다.

최적화를 EA 입력에 대해서 하려면, 반환 코드로 ENUM_INIT_RETCODE 열거값의 값을 사용하는 것이 좋습니다. 이러한 값은 가장 적합한 테스트 에이전트의 선택을 포함하여 최적화 프로세스 관리를 확립하기 위한 것입니다. 테스트를 시작하기 전에 EA 초기화 중 TerminalInfoInteger() 함수를 사용하여 에이전트 구성 및 리소스(코어 수, 사용가능한 메모리 양 등)에 대한 데이터를 요청할 수 있습니다. 획득한 데이터에 따라 테스트 에이전트 사용을 허용하거나 EA 최적화를 금지할 수 있습니다.

ID

Description

INIT_SUCCEEDED

초기화에 성공하면 EA 테스트를 계속할 수 있습니다.

이 코드는 0 값과 동일함을 의미합니다. 테스터에서 EA가 성공적으로 초기화되었습니다.

INIT_FAILED

초기화 실패. 어쩔 수 없는 오류로 인해 테스트를 계속하는 것은 의미가 없다. 예를 들어 EA 작업에 필요한 지표를 생성할 수 없습니다.

이 값의 반환은 0과 다른 값을 반환하는 것과 동일함을 의미합니다. 테스터에서 EA 초기화가 실패했습니다.

INIT_PARAMETERS_INCORRECT

프로그래머의 잘못된 입력 매개변수 집합을 나타내도록 설계되었습니다. 일반 최적화 표에서 이 반환 코드가 포함된 결과 문자열이 빨간색으로 강조 표시됩니다.

그러한 EA 입력 세트에 대한 테스트는 수행되지 않습니다. 에이전트가 새 태스크를 수신할 준비가 되었습니다.

이 값이 수신되면 전략 테스터는 반복 실행을 위해 이 태스크를 다른 에이전트에 전달하지 않습니다.

INIT_AGENT_NOT_SUITABLE

초기화 중 프로그램 실행 오류가 없습니다. 그러나 어떤 이유로 이 에이전트는 테스트를 수행하기에 적합하지 않습니다. 예를 들어 RAM이 충분하지 않거나, OpenCL 지원하지 않음, 등이 있습니다.

이 코드를 반환한 후, 에이전트는 이 최적화가 끝날 때까지 더 이상 태스크를 수신하지 않습니다.

OnInit(), INIT_FAILED/INIT_PARAMETERS_INCORRECT을 테스터에서 반환하는 함수, 는 EA를 최적화할 때 고려해야 할 몇 가지 특성이 있습니다:

  • OnInit()가 반환한 INIT_PARAMETERS_INCORRECT 매개변수 집합은 테스트에 적합하지 않은 것으로 간주되며 유전적 최적화 중 다음 모집단을 얻는 데 사용되지 않습니다. "폐기된" 파라미터 세트가 너무 많으면 최적의 EA 파라미터를 검색할 때 결과가 잘못될 수 있습니다. 검색 알고리즘은 최적화 기준 함수가 스무스하며 입력 파라미터의 전체 수에 대한 공백이 없다고 가정합니다.
  • OnInit()가 INIT_FAILED를 반환하는 경우, 이는 테스트를 시작할 수 없으며 EA가 에이전트의 메모리에서 언로드됨을 의미합니다. 새 파라미터 세트를 사용하여 다음 패스를 수행하기 위해 EA가 다시 로드됩니다. TesterStop() 호출에 비해 다음 최적화 패스를 시작하는 데 훨씬 더 많은 시간이 소요됩니다.

EA에 대한 샘플 OnInit() 함수

//--- 입력 매개 변수
input int      ma_period=20; // 이동 평균 기간
 
//--- EA에 사용되는 지표의 핸들
int indicator_handle;   
//+------------------------------------------------------------------+
//| Expert 초기화 함수                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- ma_period 유효성 검증
   if(ma_period<=0)
     {
      PrintFormat("유효하지 않은 ma_period 입력 값: %d",ma_period);
      return (INIT_PARAMETERS_INCORRECT);
     }
//--- 최적화 중
   if(MQLInfoInteger(MQL_OPTIMIZATION))
     {
      //--- 에이전트에 사용 가능한 RAM 확인
      int available_memory_mb=TerminalInfoInteger(TERMINAL_MEMORY_TOTAL);
      if(available_memory_mb<2000)
        {
         PrintFormat("테스트 에이전트에 사용할 메모리가 부족함: %d MB",
                     available_memory_mb);
         return (INIT_AGENT_NOT_SUITABLE);
        }
     }
//--- 지표 검증
   indicator_handle=iCustom(_Symbol,_Period,"My_Indicator",ma_period);
   if(indicator_handle==INVALID_HANDLE)
     {
      PrintFormat("My_Indicator 핸들을 생성하지 못했습니다. Error code %d",
                  GetLastError());
      return (INIT_FAILED);
     }
//--- EA 초기화 성공
   return(INIT_SUCCEEDED);
  }

더 보기

OnDeinit, Event handling functions, Program running, Client terminal events, Initialization of variables, Creating and deleting objects