개요
- 메타트레이더 EA의 필수 이벤트 핸들러 함수인 OnInit, OnDeinit 이 실행되는 시점은 EA 로딩 , 언로딩 시점 외에도 입력 파라미터 변경, 챠트의 타임프레임 변경 시 등에서도 여러 번 실행되기 때문에 EA 실행 이후 1회만 실행되어야 하는 것들 실행 위한 코드 작성법.
아래 코드는 가장 기본적인 OnInit, OnDeinit 함수 형태이다.
int OnInit()
{
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
}
OnInit, OnDeinit 에서 EA 실행 이후 1회만 실행 위한 코드 구조
- 요점
OnDeinit 실행될때마다 인자로 전달되는 OnDeinit 사유를 전역 변수 REASON_USING_IN_ONINIT (초기화는 -1로 했음) 라는 변수에 받게 하고 OnInit 실행 시 이 변수값을 참조하여 EA 실행 이후 첫 실행되는 OnInit 시점에서 처리할 사항, 사용자 입력이 변경된 경우 처리할 사항 등을 분리 처리 하도록 한다.
EA 실행이후 첫 실행되는 OnInit에서 주로 이뤄지는 처리는 클래스 인스턴스 동적 생성류이다.
동적 생성한 것들을 제거하는 것은 OnDeinit 의 OnlyOnceExec_OnDeinit(); 에서 이뤄지게 한다.
// OnDeinit 에서 REASON 값을 받아서 OnInit 에서 확인하기 위한 변수.
// 이 변수값은 ea 초기 실행시점에만 -1이므로 OnInit 내에서 1회 실행만 원하는 경우에도 활용가능.
int REASON_USING_IN_ONINIT = -1;
int OnInit()
{
if(REASON_USING_IN_ONINIT == -1) // EA 실행되고 첫 실행되는 OnInit()인 경우
{
OnlyOnceExec_OnInit();
}
else if(REASON_USING_IN_ONINIT == REASON_PARAMETERS) // 사용자가 파라메타 수정한 경우
{
Proc_Parameter_OnInit();
}
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason)
{
REASON_USING_IN_ONINIT = reason;
// reason 값이 REASON_CHARTCLOSE (차트 닫힘) / REASON_REMOVE (EA 제거)일 때 / MT5종료 인 경우에 실행할것들. 예. 클래스 인스턴스 동적 생성한것 삭제
if(reason == REASON_CHARTCLOSE || reason == REASON_REMOVE || reason == REASON_CLOSE)
{
OnlyOnceExec_OnDeinit();
}
}
위 코드 의 앞부분에 , 클래스 동적 생성, 제거하는 예 들 구현된 EA 코드 패턴 예.
연관
메타트레이더 5. 체계정리. 활용법/지식
MetaTrader 5 메타트레이더 5 , 메타에디터, MQL5 활용정보 체계정리. 본 글에서 주요 정리대상 정보 1. 메타트레이더 5 사용법.2. MQL5 언어 기반 "직접 코딩"하여 메타프레이더5에서 자동매매 달성
igotit.tistory.com
시스템 트레이딩. System Trading.
System Trading 자동매매 시스템 구현/운용 위한 실전 정보.자동매매뿐만 아니라 손매매시에도 유용한 정보.증권사 API 기반 자동매매 시스템 개발 . - API 활용 방법 정리.상용툴 S/W 기반 자동매매
igotit.tistory.com
첫 등록 : 2025.03.04
최종 수정 :
단축 주소 : https://igotit.tistory.com/5995
'트레이딩 > 메타트레이더 코딩' 카테고리의 다른 글
MT5 . 종목별 주문가능 최소수량 (1) | 2025.03.06 |
---|---|
MQL5 . SQLite 데이터베이스 직접 지원 . 활용 코드예 (1) | 2024.10.26 |
MT5 . 주문 체결 에러 . No Prices . TRADE_RETCODE_PRICE_OFF (=10021) (3) | 2024.10.10 |
bybit MT5 통신 속도 확인 . AWS 일본 , 싱가포르 (1) | 2024.10.09 |
MQL5. 외부 프로그램으로 실시간 데이터 송신 . SendMessage, PostMessage, WM_COPYDATA (0) | 2024.09.06 |
댓글