개요 

- 이벤트 드리븐 방식으로 포지션 생성,제거(청산) 시점 검출 코드 클래스로 구현. 

 

 

백그라운드. 

 

- 메타트레이더 EA 구현시 포지션 정보를 함수 호출하여 폴링으로 확인하는건   이 코드예 에서 처럼 간단하게 구현가능하다. 

 

- 그러나, 포지션 변경이 언제 생길지 알수 없는데 수시로 함수호출하는 폴링방식으로 포지션의 생성 , 청산을 확인 하는 코드는 비효율적일 수 밖에 없기에, 이벤트 드리븐 방식으로 포지션 생성/청산 시점 검출방식으로 구현되어야 한다. 

 

- 포지션 생성, 청산시 호출되는 이벤트핸들러는 OnTrade() 이며, 이곳에서 구현하면 되는데, OnTrade 로는 포지션외에 주문관련 이벤트를 비롯하여 여러 가지 이벤트 요인에 의하여 호출된다.  

 

- OnTrade() 로 포지션 생성/청산 정보 검출하려면 사용자가 직접 로직을 설계하고 필요에 맞게 구현해야한다. 

 

 

코드 구현 개념. 

 

1. CHashMap<long, int> map_PosiSymbol; 맵에는 항상 현재 시점 심볼1개(EA 적용중인 챠트의 심볼)포지션 오픈된것만 저장해두는 용도. 

2. 초기 EA 실행시점 심볼의 모든 포지션 ticket 을 맵의 키에 저장 . 

3. 이벤트 핸들러 OnTrade 에서 클래스 함수 OnTrade_CyManagerPosi(); 호출해두면 함수 내부적으로 포지션 신규 생성, 제거된것 검출 이뤄짐. 

 

 

 

 

실행샷 

- 상기 코드를 메타트레이더에서 실행시켜보면 아래 화면의 Experts 출력부분에 포지션 추가, 제거시마다 해당 정보 검출되어 표현. 

 

 

 

 

 

 

재료들 

 

 

 

 

MQL5. 클래스 만들기

MQL5 에서는 C++과 동일 문법의 클래스 만들 수 있고, 활용가능하다. 통상 C++ 에서는 클래스 코드작성시 헤더파일에 선언 몰아두고 함수정의는 c 파일에서 작성하나, MQL5 에서는 확장자mqh (헤더파

igotit.tistory.com

 

 

 

MQL5. 포지션 함수, 클래스 활용코드 . 심볼1개의 모든 포지션등.

1. 계정의 모든 심볼의 모든 포지션 정보들 확보하기. #include CPositionInfo m_PosiInfo; int Proc_SupplyPosition() { int num_position_all_symbol = PositionsTotal(); // 계좌의 모든 포지션 수량 반환됨. f..

igotit.tistory.com

 

 

MQL5. CHashMap iteration.반복

MQL5 의 컬렉션은 컬렉션 자체의 반복 수단 제공되지 않으며, 컬렉션 요소를 CopyTo 로 array 로 복사한 이후 array로 루프돌림 #include CHashMap map_My; string keys[]; int values[]; map_my.CopyTo(keys, val..

igotit.tistory.com

 

 

MQL5. CArray. 동적 배열

CArray - CArray 를 베이스 클래스로 하는 CArrayChar, CArrayDouble, CArrayFloat, CArrayInt, CArrayLong, CArrayObj, CArrayShort, CArrayString 코드예. - CArrayLong - 다른 것도 거의 동일. #include..

igotit.tistory.com

 

 

 

상위정리

 

 

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

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

igotit.tistory.com

 

 


첫 등록 : 2020.11.09

최종 수정 : 

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

 


 

 

Posted by 리치굿맨
TAG

댓글을 달아 주세요