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

메타트레이더 . 코딩 . 클래스 non-static 멤버함수를 콜백함수로 전달하기

by i.got.it 2019. 5. 21.

 

 

개요

상황 : 2개의 클래스 A(예 CCyFinDevice), B(예 CCyFinOnNewBar) 가 있고, A에서 B 인스턴스 만들어 사용중이고, B에게 A측의 콜백함수를 전달해야함.

 

문제점

클래스의 멤버함수는 콜백으로 전달 불가하므로 A에서 콜백함수를 static 으로 선언하면 B 에게 전달은 가능하다. A 의 static 함수 내부에서는 A의 멤버에 접근 못하게 되고 결국에 C스타일 코드 구조가 나와 모듈화가 달성되지 않아 견고한 구조화를 심각하게 방해한다. 

 

해결책

- 클래스 A의 non-static 멤버 함수를 콜백으로 사용가능하게 한다.  

MQL5 의 EA 에서 클래스 B 로 전달할 콜백함수를 만들고, ea 의 콜백함수 내에서 클래스 A의 멤버함수를 실행하게 하고, 클래스 B측으로 EA의 함수포인터를 전달한다. 

 

/////////////////////// function pointer typedef. myglobal.mqh etc. 
typedef void(*pf_VENUMTIMEFRAMES)(ENUM_TIMEFRAMES);


////////   EA 측의 코드. 

CCyFinDevice m_CCyFinDevice(ChartGetInteger(0,CHART_WINDOW_HANDLE),1);

void cb_Proc_OnNewBar_EA(ENUM_TIMEFRAMES timeframe) // 이 함수를 CCyFinOnNewBar 에서 콜백하게됨.
{
   m_CCyFinDevice.Proc_OnNewBar_CallBack(timeframe);// non-static member function !!!! good
}

int OnInit()
{

/// EA에서 정의된 전역함수포인터를 전달하고, CCyFinDevice 내부에서 이함수 포인터를 CCyFinOnNewBar 로 전달.
   m_CCyFinDevice.RegiCallBack_forOnNewBar(cb_Proc_OnNewBar_EA); 
...

}

 

 

연관

 

 

 

함수포인터, 콜백(Callback)

함수포인터 1. int Function(int a) {... } ; 로 정의된 함수가 있다치자. 2. 위 1의 함수의 포인터(함수이름이 포인터임)를 받을 수 있는 함수포인터 변수 pFunc 선언하고 1의 함수포인터를 대입하는 방법 i

igotit.tistory.com

 

 

메타트레이더 . 코딩 . 클래스 만들기

개요 - MT4, MT5 모두 클래스 지원되며, 본 글에서는 MT4 에서 클래스 만들기 방법 정리. - 메타트레이더의 클래스 는 C++ 과 거의 동일하므로 C++ 클래스 관련 기본 지식 요구됨. 클래스 파일 생성. 메

igotit.tistory.com

 

 

 

 

메타트레이더 4. 체계정리. 활용법/지식.

MetaTrader 4 메타트레이더 4 활용정보 체계정리. - 글로벌 트레이딩 소프트웨어. - 지속 발전 가능한 안정된 시스템. - 직접 코딩 가능한 MQL4 언어. C 언어 유사 - - MQL4 에서도 클래스 사용가능하므로

igotit.tistory.com

 

 

 

메타트레이더 5. 체계정리. 활용법/지식

MetaTrader 5 메타트레이더 5 , 메타에디터, MQL5 활용정보 체계정리. 본 글에서 주요 정리대상 정보 1. 메타트레이더 5 사용법. 2. MQL5 언어 기반 "직접 코딩"하여 메타프레이더5에서 자동매매 달성하기

igotit.tistory.com

 

 

 

 

 

 


첫 등록 : 2019.05.21

최종 수정 : 2023.03.20

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


 

 

'트레이딩 > 메타트레이더 코딩' 카테고리의 다른 글

MQL5. input  (0) 2019.05.27
MQL5. memcpy 사용하기  (0) 2019.05.21
MQL5. DLL. #import  (0) 2019.05.19
MQL5. Generic Data Collection. CHashMap. 딕셔너리  (0) 2019.05.18
MQL5. Arrays. 배열  (0) 2019.05.17

댓글



 

비트코인




암호화폐       외환/나스닥/골드       암호화폐/외환/나스닥/골드 암호화폐/외환/나스닥/골드   암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)     롤오버 이자 없는 스왑프리계좌
( 스왑프리 암호화폐도 거래 가능 )    
MT4, MT5 , cTrader 모두 지원     FTMO 계좌 매매운용. MT4,MT5