본문 바로가기
트레이딩

메타트레이더5. 파이썬에서 금융시계열 데이터 쉽게 활용하기

by i.got.it 2019. 4. 21.

 

 

 

개요

  파이썬에서 금융시계열 데이터  가져와서 활용하기 위한  방법으로 메타트레이더5 기반한 방법. 


사전 필수 준비사항.

1. 메타트레이더 5 설치된 상태. 
 - MT5 설치 상세 (FXTM 의 MT5 ): https://igotit.tistory.com/1802 
 - 암호화폐 거래소 바이빗의 MT5 설치 상세 : https://igotit.tistory.com/5765
 - - 2개 중 아무거나 설치해도 됨. 


2. 상기 1의 MT5 에서 Account 연결된 상태.
- 계정 연결 상세 : https://igotit.tistory.com/1803
- 계정은 모의계좌여도 됨. 
- Account 연결되어있어야 데이터 공급받을 수 있기 때문에 필수. 


3. 파이썬 3.7 개발/실행환경 
- 본 예에서는 Visual Studio 2019 의 파이썬 개발환경 이용. 
- VS2019 의 파이썬 개발환경 설치 상세 : https://igotit.tistory.com/2113
- PyCharm 이용해도 됨. 


4. 파이썬용 메타트레이더5 패키지 
- 본 패키지에 의하여 파이썬에서 상기1의 MT5 프로그램과 통신가능해짐. 
- MT5 for Python 설치 상세 : https://igotit.tistory.com/2112

 

본글의 설명에서 최종구현모습.

 

 

MT5 for Python 사용법 상세 - step by step

 

단계1. 파이썬 프로젝트 만들기. 

- VS2019 에서 파이썬 프로젝트 생성. 

 

 

단계2. 파이썬 코드 작성 1 - MT5 실행

- MT5 패키지 활용 위한 기본 골격 부분부터  먼저 작성.

from MetaTrader5 import *
MT5Initialize() #connect to MT5
MT5WaitForTerminal() # wait till MT5 ready



MT5Shutdown() # shut down connection to MT5

 

위 코드 실행결과 

- MT5 가 실행되어있지 않은 경우 MT5 가 실행되는것까지. 

 

 

단계3. 파이썬 코드 작성 2 - 캔들 데이터 확보 

- 캔들 데이터 획득 함수 3개 : MT5CopyRatesFrom, MT5CopyRatesFromPos, MT5CopyRatesRange

- 아래예에서는 MT5CopyRatesFromPos 이용하여 종목 EURUSD 주기 1일 짜리  캔들 100개 받아와서 print 로 출력하는예.

- 앞의 단계2 대비 추가된것은 파란색 글자 부분. 

- 함수 MT5CopyRatesFromPos  인자 "EURUSD" 가 종목명이며, GPBUSD, EURGPB, ... 등을 기록한다. 

함수 MT5CopyRatesFromPos 인자 MT5_TIMEFRAME_D1 은 일단위의 캔들 의미하며, MT5_TIMEFRAME_M1 기록하면 1분 캔들 데이터를 받을 수 있다. 

함수 MT5CopyRatesFromPos 인자 0 은 가장 최근데이터 부터 라는 의미임. 

- 함수 MT5CopyRatesFromPos 마지막 인자 100 은 총 캔들 수량 지정하는 것이며, 1000 등 필요한 수량 기록하면됨. 가장 최근데이터 부터 라는 의미임.

 

실행결과 

함수 MT5CopyRatesFromPos 반환값을 그대로 출력한 예이며 아래와 같다. 

MT5Rate(time=datetime.datetime(2019, 4, 3, 15, 0), open=1.12431, low=1.12543, high=1.12335, close=1.12341, tick_volume=11735, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 3, 19, 0), open=1.12339, low=1.12487, high=1.12247, close=1.12439, tick_volume=15241, spread=8, real_volume=0)

 

 

단계4. 데이터 형식 변경. 

앞의 단계3의 데이터 형식은 사용하기 불편하다.  활용하기  편하게 형식 변경 한다. 

from MetaTrader5 import *
import pandas as pd
pd.set_option('display.max_columns', 500) # number of columns to be displayed
pd.set_option('display.width', 1500) # max table width to display

MT5Initialize() # connect to MT5
MT5WaitForTerminal() # wait till MT5 ready

### get candle data
eurusd_candle = MT5CopyRatesFromPos("EURUSD", MT5_TIMEFRAME_D1,0,100)

MT5Shutdown() # shut down connection to MT5
### DATA print as is
for val in eurusd_candle:
print(val)


### DATA format change
eurusd_candle_dataframe = pd.DataFrame(list(eurusd_candle),
columns=['time', 'open', 'low', 'high', 'close', 'tick_volume', 'spread', 'real_volume'])

### DATA print data frame
print(eurusd_candle_dataframe)

실행결과. 

- 위 코드를 실행하면 eurusd_candle_dataframe 을 출력하면 아래 처럼 table 형식이다.  

time open low high close tick_volume spread real_volume
0 2018-11-29 09:00:00 1.13658 1.14013 1.13483 1.13925 72933 2 0
1 2018-11-30 09:00:00 1.13924 1.14001 1.13050 1.13155 67622 4 0
2 2018-12-03 09:00:00 1.13499 1.13793 1.13189 1.13534 63645 3 0
3 2018-12-04 09:00:00 1.13535 1.14185 1.13181 1.13423 82664 4 0
4 2018-12-05 09:00:00 1.13413 1.13609 1.13104 1.13445 50759 2 0
5 2018-12-06 09:00:00 1.13447 1.14123 1.13205 1.13746 91693 3 0
6 2018-12-07 09:00:00 1.13767 1.14233 1.13600 1.13962 83663 4 0
7 2018-12-10 09:00:00 1.13893 1.14423 1.13500 1.13552 91188 3 0
8 2018-12-11 09:00:00 1.13548 1.14001 1.13059 1.13163 82309 2 0
9 2018-12-12 09:00:00 1.13160 1.13868 1.13146 1.13680 83664 3 0
10 2018-12-13 09:00:00 1.13686 1.13930 1.13307 1.13583 74268 3 0
11 2018-12-14 09:00:00 1.13574 1.13646 1.12694 1.13053 69178 2 0
12 2018-12-17 09:00:00 1.12995 1.13574 1.12957 1.13471 66070 3 0
13 2018-12-18 09:00:00 1.13469 1.14018 1.13363 1.13600 70991 3 0
14 2018-12-19 09:00:00 1.13599 1.14388 1.13599 1.13760 91875 3 0
15 2018-12-20 09:00:00 1.13762 1.14855 1.13690 1.14452 103392 4 0
16 2018-12-21 09:00:00 1.14453 1.14736 1.13556 1.13665 93835 2 0

.....

 

 

단계5. 데이터 플로팅 해보기. 

- 본 설명글의 최종. 

- 앞의 단계4의 변수 eurusd_candle_dataframe 의 종가들을 챠트로 표현해보자. 

- 앞의 단계3의 코드에  matplotlib 관련 코드 추가되었다.  

 

소스코드 - 최종. 

 

 

실행모습. 

 

 

 

 

 

 

 본 글 포함된 상위 정리글


1. MetaTrader 5  https://igotit.tistory.com/1775 
2. System Trading https://igotit.tistory.com/840  의 마켓데이터.

 


첫등록 : 2019년 4월 21일 

최종수정 : 

 

본 글 단축주소 : https://igotit.tistory.com/2124

 


 

 

댓글



 

비트코인




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