개요
메타트레이더에 연결된 계좌에 따라 수수료 계산 방식이 다르다. BYBIT 과 FXTM 의 거래 수수료 계산 방식 상세 . 에서 정리했듯이 BYBIT 의 경우 진입, 청산 각각 개별적으로 거래수수료가 계산되고 FXTM MT4 계좌에서는 진입시에 1회 거래수수료가 모두 부과되는 방식이다.
EA 매매로직 코드 에서 거래 수수료 관련 정보를 이용하려는 경우 수수료 계산 방식이 다른 것을 고려하여 코드 작성해야 한다.
메타트레이더 코드 내에서 거래수수료 정보 고려한 로직을 만들려면 입력변수로 거래수수료 비율 등을 사용자가 입력 가능하게 해야 한다. (심볼의 Specification 으로 수수료 정보는 제공안됨.)
본 글에서는 메타트레이더 코드에서 거래수수료 활용하기 위한 코드 작성 예 정리한다.
enum 정의
- 수수료 계산방식이 다른 것을 식별하고 핸들링 하기 위한 enum 변수를 아래 처럼 정의하자.
enum CyENUM_COMMISSION_TYPE
{
em_CommissionType_OpenOnly // Open Only. ex FXTM
,em_CommissionType_OpenCloseEach // Open Close Each. ex BYBIT
};
EA 입력변수
입력변수 로 수수료 비율 과 타입 을 사용자가 입력 가능하게 한것.
기본 값은 FXTM 의 거래수수료 비율과 타입으로 해뒀다.
input string ui_grp_2 = ""; // Parameter Group Commission
input double ui_commission_percent = 0.004; // Commission %
input CyENUM_COMMISSION_TYPE ui_em_commission_type = em_CommissionType_OpenOnly; // Commission Type
위 입력 변수들은 EA 속성창에서 보면 아래 붉은 박스 처럼 보인다.
EA 적용대상이 BYBIT 종목인 경우에는 Commission % 에 0.06 기록하고 Commission Type 은 Open Close Each 선택하면 됨.
수수료 처리 코드 예.
- 수수료 관련 처리 코드를 클래스 형식으로 구현해본다. ( 클래스 만드는 방법 보기 )
- 클래스 이름 : CCy_Commission_1
- 클래스 주요 멤버 함수
int GetPoints_BreakEven(double _price_open, CyENUM_POSI_TYPE _em_posi_type)
기능 : 입력 인자로 포지션 진입가격 과 Long, Short 입력하면 수익이 수수료 와 동일하게 되는 가격 폭을 포인트 단위로 반환함.
CCy_Commission 클래스 활용예.
EA 에서 아래와 같은 형식으로 코딩하면 기능 확인가능.
input string ui_grp_2 = ""; // Parameter Group Commission
input double ui_commission_percent = 0.004; // Commission %
input CyENUM_COMMISSION_TYPE ui_em_commission_type = em_CommissionType_OpenOnly; // Commission Type
#include "CySDK_MT4/CCy_Commission_1.mqh"
CCy_Commission_1 Cy_Commission;
int OnInit()
{
Cy_Commission.Proc_OnInit(ui_commission_percent, ui_em_commission_type);
return(INIT_SUCCEEDED);
}
void OnTick()
{
int points_breakeven_sell = Cy_Commission.GetPoints_BreakEven(Bid, em_PosiShort);
int points_breakeven_buy = Cy_Commission.GetPoints_BreakEven(Ask, em_PosiLong);
Print("Points Break Even for Sell = " , points_breakeven_sell);
Print("Points Break Even for Buy = " , points_breakeven_buy);
}
실행예.
- 아래 그림은 FXTM 의 금 에 적용한 경우이며, 매수든 매도든 진입 가격 대비 7 포인트 지점이 수수료 상쇄(손익분기점, BreakEven )하는 가격 지점임을 보여준다.
의미.
위 챠트에서 XAUUSD 의 현재가격은 Bid 1944.80 , Ask 1944.89 이다.
현재 "매도" 진입한다면 진입가격은 Bid 가격인 1944.80 이 된다. 손익분기점에 해당하는 청산가격은 진입가격 - 7포인트 이므로 1944.73( = 1944.80 - 0.07) 이다. 즉, Ask 가격이 1944.73이 되어야 하는데 현재 Ask 가격이 1944.89 이므로 16포인트 더 하락해줘야 1944.73 이 된다.
현재 "매수" 진입한다면 진입가격은 Ask 가격인 1944.89 이고, 손익분기점에 해당하는 청산가격은 진입가격 + 7포인트 이므로 1944.96 ( = 1944.89 + 0.07 ) 이다. 즉, Bid 가격이 1944.96이 되어야 하는데 현재 Bid 가격이 1944.80 이므로 16포인트 더 상승해줘야 1944.96 이 된다.
연관
첫 등록 : 2023.03.22
최종 수정 :
단축 주소 : https://igotit.tistory.com/4293
'트레이딩 > 메타트레이더 코딩' 카테고리의 다른 글
메타트레이더 . 다 종목 매매 전략 백테스팅 MT5 만 가능 (0) | 2023.04.02 |
---|---|
메타트레이더 . 코딩 . 파일 . 클래스 CCy_File (0) | 2023.03.31 |
메타트레이더 . 코딩 . input 입력 변수 . (0) | 2023.03.21 |
메타트레이더 . 코딩 . 클래스 만들기 (0) | 2023.03.20 |
메타트레이더 4 . 챠트 . 오류 SL, TP 가격 차이 표현 단위 Pips (0) | 2023.03.14 |
댓글