본문 바로가기
트레이딩/메타트레이더 코딩

MT5. EA 종료 . IsStopped() , OnDeinit() , ExpertRemove()

by i.got.it 2025. 11. 1.

 

 

 

 

MT5. EA 종료 흐름 . IsStopped() , OnDeinit() 

 

EA 종료 흐름

MQL5에서 EA 종료 시 발생하는 순서.

  1. 사용자가 EA 제거 버튼 클릭 / ExpertRemove() 호출 / 터미널 종료 등 EA 종료 요청 발생
  2. EA 내부에서 IsStopped()가 true를 반환
  3. OnTick(), 타이머 이벤트, 루프 등 EA 코드가 실행되는 중이면, 이 시점에서 IsStopped() 체크 가능
  4. EA가 완전히 종료되기 직전에 OnDeinit(const int reason) 이벤트 호출
  5. EA가 메모리에서 제거

 

핵심 포인트

  • IsStopped()는 OnDeinit보다 “조금 더 먼저” 상태를 알 수 있음
    • 즉, EA 종료 요청이 발생했지만 아직 OnDeinit 이벤트가 호출되기 전, EA 코드 내에서 종료 여부를 감지할 수 있음
    • 루프나 반복 작업에서 체크하면, EA가 종료되기 전에 정리 작업이나 안전한 종료 처리가 가능
  • OnDeinit는 EA가 완전히 종료 직전에 호출되는 콜백이므로,
    이때는 이미 EA의 IsStopped() 상태가 true임

 

예제: 루프 내 안전한 종료 처리

void OnTick()
{
    for(int i=0; i<1000000; i++)
    {
        // EA 종료 요청 감지
        if(IsStopped())
        {
            Print("EA 종료 요청 감지, 루프 종료");
            break;
        }

        // 반복 작업 수행
        Sleep(1);
    }
}

 

  • 위처럼 루프 중간에 IsStopped() 체크하면,
    사용자가 EA 제거 버튼을 누르거나 ExpertRemove 호출 시 즉시 루프 종료 가능

 

결론:

  • EA 종료 요청 → IsStopped() true → EA 코드에서 종료 처리 가능
  • OnDeinit는 EA 제거 직전에 호출되므로, 종료 요청 확인용으로는 IsStopped()로  먼저 알 수 있음 

 

 

IsStopped() 시점과 OnDeinit() 시점 차이


 

항목 IsStopped() OnDeinit()
호출 시점 EA 코드가 실행 중일 때, EA 종료 요청 직후 EA 종료 직전, EA 코드 실행 종료 직후
호출 조건 EA 제거 버튼 / ExpertRemove() / 터미널 종료 EA 제거 직전
반복 체크 가능 가능 (루프, 타이머 등) 불가능 (자동 호출)
메모리 접근 EA 코드 실행 중이므로, 동적 할당/포인터 접근 가능 동일

 

IsStopped 시점에 ea 에서의  메모리 해제등 처리해도 됨. 

 

 

ExpertRemove() ; EA 코드 내에서 EA 중단하는 함수 

 

ExpertRemove();// EA 제거

 

주의 : ExpertRemove() 로 제거하면 OnDeinit 의 reason 이 REASON_REMOVE 가 아니고 REASON_PROGRAM 으로 들어옴.  

 

연관 

 

 

OnInit, OnDeinit . EA에서 1회만 실행 위한 코드 구조

개요  - 메타트레이더 EA의  필수 이벤트 핸들러 함수인 OnInit, OnDeinit 이 실행되는  시점은 EA 로딩 , 언로딩 시점 외에도 입력 파라미터 변경, 챠트의 타임프레임 변경 시 등에서도 여러 번 실행

igotit.tistory.com

 

 


첫 등록 : 2025.11.01

최종 수정 : 

단축 주소 : https://igotit.tistory.com/6304


 

댓글



비트코인




            암호화폐/외환/나스닥/골드          
       
현물 |선물 인버스 |선물 USDT , bybit MT5               프랍 트레이딩. MT4,MT5