본문 바로가기

트레이딩/메타트레이더 코딩   ( 70 )


MQL5. 외부 프로그램으로 실시간 데이터 송신 . SendMessage, PostMessage, WM_COPYDATA 개요 - 메타트레이더5 . EA 에서 외부 프로그램(=프로세스) 으로  실시간 데이터 송신 가능. - 아래 이미지는 메타트레이더 (바이빗 MT5 )의 종목 챠트에 ea 배치하고 OnTick 시점에 ask, bid 등의  틱 정보를 외부 프로그램으로 실시간 송신 중.    - 아래 코드예는 64비트용으로 제작되었기 때문에 64비트인 메타트레이더5 에서만 정상 동작하며, 32비트인 MT4 에서는 정상 동작 안된다. 또한, 통신 상대방도 64비트 프로그램이어야 정상 통신 가능하다.   SendMessage, PostMessage , FindWindow   HTML 삽입미리보기할 수 없는 소스   생성자: CCy_WindowMessage(string name_wnd_tgt, int msg = WM_USER + .. 2024. 9. 6.
메타트레이더 5 . ONNX 모델 직접 지원 . 메타트레이더 5 . ONNX 모델 직접 지원 .  ONNX 처리 가능한 함수 전체  MQL5 provides the following functions for working with ONNX:FunctionActionOnnxCreateCreate an ONNX session, loading a model from an *.onnx fileOnnxCreateFromBufferCreate an ONNX session, loading a model from a data arrayOnnxReleaseClose an ONNX sessionOnnxRunRun an ONNX modelOnnxGetInputCountGet the number of inputs in an ONNX modelOnnxGetOutputCoun.. 2024. 8. 29.
MQL5 . 메타 시간을 UTC 로 변환하기 . 일광절약 시간제 (DST) 고려 개요 - 메타트레이더 에서의 시각은  UTC 로 통일되어 있지 않고 브로커 마다 다르며 , 통상 UTC + 2, UTC +3 으로 되어있다.  브로커의 서버 위치의 로컬 시라고 설명하고 있으나 꼭 그렇지도 않다. 암튼 난 이 시간을 메타시간이라고  표현한다.    - 메타 트레이더 코딩 하는 경우에도 모든 시간들은 메타 시간으로 반환되기 때문에  UTC 가 아니어서 더 헷갈리게 만들고 있으며, 시간 관련 주요 정보 활용하는 코드 작성시 일관성 훼손하는 주범이다.   - - 예로 캔들 데이터 구조체인 MqlRate 의 멤버로 time 이 있는데 이 시간 역시 메타시간 이다. 그 외  mql5 의 모든 시간이 메타시간 임.  -  utc 로 변환하는 함수들은 직접 구현해야 하는데, 단순이 UTC+2 처럼 항.. 2024. 8. 28.
MQL5 . 기본 자료형 바이트 크기 및 표준 자료형 대응표 메타트레이더 5 의 언어 MQL5 에서는 표준 정수형(uint32_t , int64_t ,..) 지원되지 않고 int,  long, ulong, .. 형식만 지원된다. 아래 표에 MQL5 의 기보 자료형의 바이트 사이즈 정리하였고, 해당 자료형에 대응하는 stdint 의 자료형 정리.   MQL5 자료형 바이트 크기sdtint.h  대응 자료형. char1int8_tuchar1uint8_tshort2int16_tushort2uint16_tint4int32_tuint4uint32_tlong8int64_tulong8uint64_tfloat4N/A (C 표준 실수형 float)double8N/A (C 표준 실수형 double)color4N/A (특정형 없음)bool1bool (C 표준 bool)datetime.. 2024. 8. 28.
메타트레이더 . VSCode 에서 MQL Tools 기반 쾌적 코딩 환경 구축 개요 - VSCode 에서 extension  MQL Tools 설치하여, 메타트레이더( MT4 , MT5 )에서 기본 제공되는 코드 작업툴인 메타에디터 보다 훨씬 쾌적, 효율적  코딩 환경 구축 가능.  사전준비 1. 메타트레이더 설치되어있어야 함.  - 본 예에서는 메타트레이더 포터블 설치 된 상황. 개발용 메타트레이더는 포터블 설치 강력 추천. - 메타트레이더 포터블 설치 방법 보기 :  https://igotit.tistory.com/3861  2. VSCode 포터블 설치되어 있어야 함.   - VSCode 포터블 설치 방법 보기 : https://igotit.tistory.com/4313   VSCode 에 MQL Tools 설치 VSCode 실행하여 Extensions (아래 그림의 왼쪽 메.. 2024. 5. 27.
메타트레이더 . 코딩 . OnTimer . 시간격 이벤트 메타트레이더 EA 의 타이머 - 1개의 EA 당 1개의 타이머만 구동 가능. - 타이머 이벤트 핸들러 함수는 EA 파일의 void OnTimer() - 함수 EventSetTimer 호출하면 타이머 시작되어 지정한 시간격 되면 EA 의 void OnTimer() 실행 - 함수 EventKillTimer 호출하면 타이머 중지. 함수 EventSetTimer 인자 : 초단위의 시간 bool EventSetTimer( int seconds // number of seconds ); 상기 함수 호출한 시점 이후 인자에서 지정한 시간이 되면 ea 의 void OnTimer() 실행된다. 함수 EventKillTimer 이 함수 호출된 이후에는 OnTimer 이벤트 발생하지 않음. void EventKillTime.. 2023. 5. 4.
메타트레이더 . 코딩 . 시간 . MqlDateTime . 년 월 일 시 분 초 요일 메타트레이더 시간 관련 함수 함수 전체 : https://www.mql5.com/en/docs/dateandtime 함수 TimeCurrent - 2개 함수형태 제공된다. 반환값 자료형은 모두 datetime , 인자 있는 함수는 MqlDateTime 구조체 형식으로 데이터 받을 수 있어 편리. - 반환 받는 시간은 메타 트레이더 시간 datetime TimeCurrent( MqlDateTime& dt_struct // structure type variable ); datetime TimeCurrent(); 구조체 MqlDateTime - 년 월 일 시 분 초 요일 정보 각각 확보 편리. struct MqlDateTime { int year; // Year int mon; // Month int day.. 2023. 5. 4.
메타트레이더 . 코딩 . 터미널 전역변수 . 멀티스레드 EA 동기화 처리 터미널 전역 변수 . Global Variables of the Client Terminal - 메타트레이더 에서 실행 중인 2개 이상의 EA에서 동시 접근 가능한 전역변수 . 비교 : C/C++ 에서의 일반적인 "전역 변수"의 스코프는 1개의 EA 내부에서만 접근가능한 반면 터미널 전역 변수는 여러 EA 에서 접근 가능. - 터미널 전역변수는 스레드 세이프함. 메타트레이더의 EA 각각은 개별적으로 작동하는 비동기 스레드이며 여러 EA 에서 터미널 전역변수에 비동기 접근 하더래도 1번에 1개의 EA 만 전역변수 접근 된다. 즉 사용자가 별도의 동기화 코드 작성하지 않아도 메타트레이더에서 제공되는 터미널 전역변수는 스레드 세이프하다. - 터미널 전역변수 자료형은 double 만 가능. - 터미널 전역변수는.. 2023. 4. 30.
메타트레이더 . 코딩 . 여러 EA 구동시 가용마진 확인 방법 . 터미널 전역 변수 활용 개요 - 문제 상황 메타트레이더에서 여러 EA를 동시에 구동하면서 각 EA에서 주문하기 전에 주문 가능한 가용 마진(Free Margin) 확인하면서 주문 실행 해야 하는 경우가 있다. 1개의 EA 만 실행될 때는 코드에서 Free Margin 요청하여 현재 주문 하려는 수량이 주문 접수 가능한지 점검가능하면 된다. 그러나, 2개 이상의 EA 가 실행되는 경우에는 각각의 EA 에서 서버 측으로 Free Margin 정보 요청하는 방식으로는 필연 오류 발생한다. Free Margin 값은 주문이 완료되어 포지션 오픈 된 이후에 포지션 오픈 되고 남은 잔량이 표시되기 때문에, 아래와 같은 상황에서는 문제 발생함. 상황예. 2개의 EA 1, 2 에서 주문 송신 전 단계에서 아래처럼 Free Margin 확인하.. 2023. 4. 28.
메타트레이더 . 다 종목 매매 전략 백테스팅 MT5 만 가능 개요 메타 트레이더의 1개의 EA 에서 거래 하는 종목이 EA 가 실행되는 챠트의 종목 외에 다른 종목의 틱 데이터 활용하면서 동시 주문 하는 전략을 백테스팅 하려면 메타트레이더 5 에서만 가능하며, MT4 의 Strategy Tester 에서는 시험 불가함. ( MT4 Strategy Tester 가 다종목 지원하지 않는 것이며, MT4 실거래 모드에서는 다종목 매매 가능.) MT5 백테스팅 예 EA 의 틱데이터 처리부에 아래처럼 S&P500 , 나스닥 지수 종목의 틱 데이터를 활용하려고 한다. void OnTick() { MqlTick mql_tick_base; SymbolInfoTick("SPX500_m", mql_tick_base);// S&P500 MqlTick mql_tick_quote; Sy.. 2023. 4. 2.
메타트레이더 . 코딩 . 파일 . 클래스 CCy_File 개요 - 메타트레이더에서 파일 출력하기 읽기 - 클래스 CCy_File 구현예. 파일 관련 함수 MT4 의 파일관련 함수 전체 - https://docs.mql4.com/files/ 파일 기본 경로 FileOpen() 에서 인자 file_name 에 경로 설정하지 않은 겨우, \MQL4\Files 를 기본 경로로 함. 파일 출력하기 FileOpen() 호출하여 받은 핸들로 FileWrite() 호출. 클래스 CCy_File 구현예. - 사전 지식 : 클래스 만들기 방법 - 파일 출력 기능 구현. 실행결과 - 상기 코드 가장 아래 있는 EA 를 메타트레이더의 챠트에 배치하면 1분봉 캔들 이전 100개의 O,H,L,C 가격을 파일에 출력한다(아래그림. 나스닥 - FXTM 에서 심볼명 NQ100_m ). - .. 2023. 3. 31.
메타트레이더 . 코딩 . 거래 수수료 . 클래스 CCy_Commission 개요 메타트레이더에 연결된 계좌에 따라 수수료 계산 방식이 다르다. BYBIT 과 FXTM 의 거래 수수료 계산 방식 상세 . 에서 정리했듯이 BYBIT 의 경우 진입, 청산 각각 개별적으로 거래수수료가 계산되고 FXTM MT4 계좌에서는 진입시에 1회 거래수수료가 모두 부과되는 방식이다. EA 매매로직 코드 에서 거래 수수료 관련 정보를 이용하려는 경우 수수료 계산 방식이 다른 것을 고려하여 코드 작성해야 한다. 메타트레이더 코드 내에서 거래수수료 정보 고려한 로직을 만들려면 입력변수로 거래수수료 비율 등을 사용자가 입력 가능하게 해야 한다. (심볼의 Specification 으로 수수료 정보는 제공안됨.) 본 글에서는 메타트레이더 코드에서 거래수수료 활용하기 위한 코드 작성 예 정리한다. enum 정.. 2023. 3. 22.
메타트레이더 . 코딩 . input 입력 변수 . 메타트레이더 4 입력변수 - 메타트레이더 EA 파일 상단에 아래예 처럼 기록하면 EA 속성창에서 사용자 입력 가능한 UI 로 자동 연결됨. - input string ui_grp_1 = "" 로 기록한 것은 속성창에서 시각적 구분자 용도로 사용하는 예. input string ui_grp_1 = ""; // Parameter Group 1 input int ui_MagicNumber = 90310001; // Magic Number input double ui_OrderVolume = 0.01; // Order Volume input string ui_grp_2 = ""; // Parameter Group 2 input double ui_sl_percent = 0.1; // SL % input doubl.. 2023. 3. 21.
메타트레이더 . 코딩 . 클래스 만들기 개요 - MT4, MT5 모두 클래스 지원되며, 본 글에서는 MT4 에서 클래스 만들기 방법 정리. - 메타트레이더의 클래스 는 C++ 과 거의 동일하므로 C++ 클래스 관련 기본 지식 요구됨. 클래스 파일 생성. 메타에디터의 왼쪽 Navigator 에서 클래스 만들 폴더 선택하고 우마우스 클릭 하여 New File 클릭 여러 종류의 파일 형식 보인다. 이 중에서 New Class 선택하고 다음 클릭. 클래스 이름 지정 (아래그림 붉은 박스) 하면 자동으로 파일명(파란박스) 만들어진다. - 자동으로 만들어지는 파일명에는 클래스 이름에 CC 처럼 C 가 중복되면 첫 C 는 빼고 파일명 만들어지는데, 나의 경우에는 파일이 클래스 파일임을 의미하는 C 를 수동 추가 함. - 클래스 이름 마지막에 _1 은 유사.. 2023. 3. 20.
메타트레이더 4 . 챠트 . 오류 SL, TP 가격 차이 표현 단위 Pips 메타트레이더 4 . - 챠트에서 주문의 진입가격과 SL, TP 의 가격 차이 표현시 Points 로 표현 되어야 하는데 Pips 로 표현 하는 오류 있음. MT4 챠트에서 주문에 설정되어있는 StopLoss 가격과 TakePropfit 가격 라인에 마우스 올리면 진입가격 대비 SL / TP 가격 차이를 보여준다. 아래 그림에서 Pips 라고 표현되어 있는 부분이 매도진입한 가격과 TP 가격 차이를 보여주는 부분인데 Pips 가 아니라 Points 로 표현되어야 정상이다. MT4 의 표현 오류임. 참고 : 아래 챠트는 심볼 XAUUSD (골드) 인 경우이고 소수점 이하 2자리 지점인 0.01 이 1포인트. 한편, 본 오류는 시각적 표현에서의 오류이며, 자동 실행되는 코드 내에서 계산과정에서 오류 일으키는 .. 2023. 3. 14.
메타 트레이더4 . MQL4 . 주문 (포지션) 검색 코드 개요 - 본 글에서는 메타트레이더4 에서 진입 주문 체결된 주문(= 포지션) 정보를 EA 에서 검색 하는 방법 및 코드 정리. - 메타 트레이더의 탭 "Trade" (아래 붉은 박스) 에는 아직 진입 되지 않은 지정가 주문들과 주문 체결되어 있으면서 미청산 상태인 주문(즉 포지션)들의 리스트가 보인다. Balance 라인 ( 아래 그림 녹색박스) 기준으로 아래 부분은 진입되지 않은 지정가 주문들 , Balance 라인 위쪽으로는 진입되어 있는 미청산 주문들이 리스팅된다. - - 참고 : 탭 "Account History" (아래 파란박스)에는 청산 주문들 및 입 / 출금 내역, 수수료 정보들이 보인다. 이미 청산된 주문 정보만 보여주므로 매매중 관리대상은 아니고 매매 결과 검토 하는 경우에만 필요. - .. 2023. 3. 6.
메타 트레이더 . 주문 가격 규격화 Digits 으로는 불완전. 해결책. 개요 - 메타트레이더 EA 에서 주문 송신시 가격 인자에 값을 기록시 해당심볼의 가격 규격에 맞게 정리해서 주문 송신 해야한다. - 가격 규격이라 함은 심볼의 specification 에서 지정되어있는 Digits 와 Tick Size 이다. - 규격에 맞게 가격 표현을 정리한다 함은 EA 내부적으로 가격 관련 연산 과정 거치게 되면 필연 숫자들이 심볼에서 지정된 규격에 맞지 않는 수치들이 만들어진다.예 124.5678934512320987 등. 이 상태의 숫자를 그대로 주문 함수의 가격에 기록하면 서버에서 거부되기 때문에, 해당 심볼의 Digits 와 Tick Size 규격에 맞게 정리된 가격을 주문 함수 의 가격 인자에 기록해야 한다. - 메타트레이더의 백테스팅 도구 시험 할 때는 가격이 규격에 맞지.. 2023. 3. 5.
메타 트레이더 . 주문 종류 . stop limit pending Market Order (시장가 주문)- 시장가 Buy 주문 접수된 시점의 Ask 가격 (이상) 으로 즉시 체결. - 시장가 Sell 주문 접수된 시점의 Bid 가격 (이하)으로 즉시 체결.   Pending Order ( 대기 주문) -  Limit  ,  Stop ,  Stop Limit  - Pending 주문 에는 Buy, Sell 각각  Limit  ,  Stop , Stop Limit 형식의 주문 방식이 있다.  - 통상 Pending 주문 형식 중 많이 활용하는 것이 Limit 주문이다.( 일반 거래소들에서 호가창에 보이는 주문들이 Limit 지정가 주문들이다.)   Pending Order   3종    주문종류설명 Buy Limit- Buy Limit 주문 가격은 종목의 현재 Ask 가격.. 2023. 2. 16.


 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5