본문 바로가기
트레이딩

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

by 리치굿맨 2019. 4. 21.

 

 

 

개요

 

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

 

사전 필수 준비사항.

1. 메타트레이더 5 설치된 상태.

 - MT5 설치 상세 : https://igotit.tistory.com/1802

 

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

 


 

 

댓글2

  • 나그네 2021.01.24 11:27

    파이썬을 이용한 MT5 EA 개발을 제대로 배워보고싶은데 혹시 한글로된 관련 강좌 설명글 같은것들이 있을까요?
    주인장분께서 올려주신 강좌들도 정말 구글링해도 안나오는 몇 안되는 소중한 한국어 강좌입니다만.. 제가 초보인지라 기초적인부분에서 더 많은 설명이 필요할것 같네요.. ㅠㅠ 혹시 배울수 있는 곳이 있다면 추천 부탁드립니다.
    MQL5보다는 Python으로 개발하는게 기능적면에서 더욱 좋다고 하여서 파이썬을 배우고있는 중입니다.

    답글

    • Favicon of https://igotit.tistory.com BlogIcon 리치굿맨 2021.01.24 17:28 신고

      넵 반갑습니다. ~

      파이썬 기반 코딩 위해서는
      1. 파이썬 개발환경 구축.
      2. 상기 1환경에서 파이썬 코딩하고 실행시키기

      1번은 제 경험으로는 본 글의 설명에 있는 Visual Studio 2019 로 파이썬 개발환경 구축한 것이 가장 편했습니다.

      2번 문제는 저의 경험상 가장 효율적인 스킬 확보 방법론은 아래와 같았습니다.

      파이썬 기본 자료형, 기본적인 문법 대충 개별적으로 구글링 해서 감만 잡을정도만 파악하고 나서, 내가 지금 필요한 것을 구현하기 위하여 즉시 프로젝트 생성하고 코딩 시작합니다.

      코딩진행하면서도 세부 문법적인 사항들은 구글에서 검색해보면 항상 정리된 정보가 있기에 즉시 코드에 적용하면서 빠르게 진행가능합니다.

      위와 같은 문제 해결 방법론에 익숙해 지는게 프로그래밍 과정에서는 필수 인듯 합니다. 왜냐하면 언어와 툴 사용법을 충분히 익혔다고 하더래도 본인의 로직을 구현하는 프로그래밍 과정에서도 자신이 구현하려는 기능 전체를 외부에서 구할 수 없고 본인만이 해결해야할 상황이 항상 발생하고, 이럴 때도 동일한 방법론이 적용되어야 하는 경우가 많은것 같습니다. 내가 구현하려는 것에 필요한 일부 파편적인 세부 정보는 구글링 하면 항상 정보를 얻을 수 있는데 이들을 조합하고 통합하여 내가 원하는 것을 달성, 구현해내는 건 구글링 해도 정보가 안나오고 개발자 본인이 해결 주체여야 하는 것 같습니다.


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT