본문 바로가기

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


메타트레이더 . 코딩 . 거래 수수료 . 클래스 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.
메타 트레이더 . 주문 에러. Trade is disabled . 나스닥 거래 주문에러 . Trade is disabled 2023.02.14 메타트레이더 EA 에서 나스닥( FXTM 에서 심볼명 ND100m ) 주문 시 에러 "Trade is disabled" 표시되고 주문 접수 실패발생. 아래 그림에 에러 표현된 지점. - 이전 주문은 모두 정상적으로 실행되었는데, 처음 발생한 에러. 에러 원인. FXTM 측에서 ND100m 을 청산만 가능한 것으로 설정 하여 신규 주문 접수 거부된 것이었다. 종목의 Trade 설정 상태 보려면 , 아래 그림처럼 마우스를 심볼 위에 올려두면 Trade : Close 라고 되어있음을 알 수 있다. 의미는 Close 주문만 가능하다는 의미. 정상적으로는 Trade : Full 로 되어있어야 한다. 해결. FXTM 고객센터에 문의 해보니, 기존 ND.. 2023. 2. 14.
메타 트레이더 . 외장하드 설치 . 사용자 데이터도 외장하드에서 집중관리. 개요 - 외장하드에 메타 트레이더 설치. 문제점. 여러 PC 에서 메타 트레이더 코딩 작업시 소스 파일 관리 어려움. 메타트레이더 매매전략 개발 작업을 1개의 컴퓨터에서만 하지 않고 , 노트북에서도 작업하고 집 혹은 회사에 있는 PC 에서도 작업하는 식으로 여러 PC 에서 작업하는 경우 , 각 PC에서의 작업 결과 파일이 각 PC마다 저장되어 나중에는 관리 불가능 사태 필연 발생한다. 본인 작업 결과물이 이렇게 분산 되는 방식은 절대 좋지 않은 개발환경이다. 자신이 노력한 결과물들이 일관되게 누적 저장 가능하도록 단일 저장소에 지속, 일관된 형식으로 저장되는 방식으로 개발 환경 설정해야한다. 해결책. 개발용 메타트레이더는 PC 들에 설치하지 않고, 외장하드에 메타 트레이더 설치함과 동시에 나의 작업파일도.. 2022. 12. 8.
MQL5. CCI (Commodity Channel Index) 코드. void OnTick() { double my_cci = Get_CCI(_Period,14); Print(my_cci); } double Get_CCI(ENUM_TIMEFRAMES timeframe,int ma_period) { double arr_cci[]; int CCIretv = iCCI(_Symbol,timeframe, ma_period, PRICE_TYPICAL); ArraySetAsSeries(arr_cci, true); CopyBuffer(CCIretv,0,0,3,arr_cci); return NormalizeDouble(arr_cci[0],2); } 동영상. 연관 Indicator : CCI. Commodity Channel Index 개요. 정의. where, Pt = (High .. 2021. 3. 1.
MQL5. CSymbolInfo. class for easy access to the symbol properties. CSymbolInfo - class for easy access to the symbol properties. - #include - Symbol Specification 에서의 정보들 확보가능. Swaps SwapMode Gets the swap calculation mode SwapModeDescription Gets the swap calculation mode as a string SwapRollover3days Gets the day of triple swap charge SwapRollover3daysDescription Gets the day of triple swap charge as a string Margins and flags MarginInitial Gets the value of .. 2020. 11. 21.
MQL5. Symbol Specification Symbol Specifications 아래 왼쪽은 EURUSD, 오른쪽은 BTCUSD Digits - 종목 가격의 소수점이하 자리수. - EURUSD 는 1.118542 처럼 소수점이하 5개까지, BTCUSD는 18679.105 소수점 이하 3개. Margin Currency, Profit Currency 2개 통화 가치 비율 통화1가치/통화2가치 에서 통상적으로, 분자에 있는 통화1이 Margin Currency, 분모에 있는 통화2가 Profit Currency 로 되어있음. Contract Size - 종목의 주문 수량 1 LOT 이 의미하는 기준통화의 실제 수량. - 예 : EURUSD contract size 100,000 이므로 EURUSD 주문 수량 1 은 100,000 EUR 의미, - .. 2020. 11. 21.
MQL5. 포지션 생성, 청산 시점 검출 이벤트 드리븐 코드. 개요 - 이벤트 드리븐 방식으로 포지션 생성,제거(청산) 시점 검출 코드 클래스로 구현. 백그라운드. - 메타트레이더 EA 구현시 포지션 정보를 함수 호출하여 폴링으로 확인하는건 이 코드예 에서 처럼 간단하게 구현가능하다. - 그러나, 포지션 변경이 언제 생길지 알수 없는데 수시로 함수호출하는 폴링방식으로 포지션의 생성 , 청산을 확인 하는 코드는 비효율적일 수 밖에 없기에, 이벤트 드리븐 방식으로 포지션 생성/청산 시점 검출방식으로 구현되어야 한다. - 포지션 생성, 청산시 호출되는 이벤트핸들러는 OnTrade() 이며, 이곳에서 구현하면 되는데, OnTrade 로는 포지션외에 주문관련 이벤트를 비롯하여 여러 가지 이벤트 요인에 의하여 호출된다. - OnTrade() 로 포지션 생성/청산 정보 검출하려.. 2020. 11. 9.
MQL5. CArray. 동적 배열 CArray - CArray 를 베이스 클래스로 하는 CArrayChar, CArrayDouble, CArrayFloat, CArrayInt, CArrayLong, CArrayObj, CArrayShort, CArrayString 코드예. - CArrayLong - 다른 것도 거의 동일. #include CArrayLong arr_keys_deleted; arr_keys_deleted.Add(200) ; // 요소추가. for(int idx = 0; idx 2020. 11. 9.
MQL5. CHashMap iteration.반복 MQL5 의 컬렉션은 컬렉션 자체의 반복 수단 제공되지 않으며, 컬렉션 요소를 CopyTo 로 array 로 복사한 이후 array로 루프돌림 #include CHashMap map_My; string keys[]; int values[]; map_my.CopyTo(keys, values); // 맵의 키,값을 array 로 복사하고 아래 array 에서 루프돌림. for(int idx=0; idx < map_My.Count(); idx++) { keys[idx]; values[idx]; } 첫 등록 : 2020.11.09 최종 수정 : 단축 주소 : https://igotit.tistory.com/2693 2020. 11. 9.
MQL5. 포지션 함수, 클래스 활용코드 . 심볼1개의 모든 포지션등. 1. 계정의 모든 심볼의 모든 포지션 정보들 확보하기. #include CPositionInfo m_PosiInfo; int Proc_SupplyPosition() { int num_position_all_symbol = PositionsTotal(); // 계좌의 모든 포지션 수량 반환됨. for(int idx_posi = 0 ; idx_posi < num_position_all_symbol; idx_posi++) { m_PosiInfo.SelectByIndex(idx_posi); // 인덱스로 포지션 선택하고, Proc_GetInfoPosi(); // 현재 선택된 포지션 1개에서 필요한 정보 확보. } return 1; } void Proc_GetInfoPosi() { // 필요한정보들 m_PosiI.. 2020. 11. 8.
MQL5. 밀리초, 마이크로초 단위 시간 함수 . 일반 date time GetTickCount - PC 시작 이후 경과시간 밀리초 반환.   Documentation on MQL5: Common Functions / GetTickCountGetTickCount The GetTickCount() function returns the number of milliseconds that elapsed since the system start. Return Value Note Example: #define MAX_SIZE 40 //+------------------------------------------------------------------+ //| Script for measuwww.mql5.comGetMicrosecondCount - "MQL5 프로그램" 시작이후 경과시.. 2020. 10. 15.
MQL5. MqlTick. CopyTicks. 틱 데이터. 구조체 MqlTick // 아래 멤버의 바이트 사이즈는 MQL5 의 경우임. MQL4 는 다를 수 있음. struct MqlTick { datetime time; //8바이트. Time of the last prices update double bid; //8바이트. Current Bid price double ask; //8바이트. Current Ask price double last; //8바이트. Price of the last deal (Last) ulong volume; //8바이트. Volume for the current Last price .. 2020. 10. 15.


비트코인




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