Python과의 통합을 위한 MetaTrader 모듈

MQL5는 금융 시장에서 고성능 트레이딩 애플리케이션을 개발하기 위해 고안되었으며, 알고리즘 트레이딩에 사용되는 다른 전문 언어 중에서 비교할 수 없습니다. MQL5 프로그램의 구문과 속도는 가능한 한 С++에 가까우며, OpenCLMS 비쥬얼 스튜디오와의 통합이 지원됩니다. 통계, 퍼지 로직ALGLIB 라이브러리도 사용할 수 있습니다. MetaEditor 개발 환경은 "스마트" 기능 가져오기 기능을 통해 기본적으로 .NET 라이브러리 지원하므로 특별한 래퍼 개발이 필요하지 않습니다. 타사 C++ DLL도 사용할 수 있습니다.  С++ 소스 코드 파일(CPP 및 H)은 편집기에서 직접 편집하여 DLL로 컴파일할 수 있습니다. 사용자의 PC에 설치된 마이크로소프트 비쥬얼 스튜디오를 이를 위해 사용할 수 있습니다.

Python은 스크립트 및 애플리케이션 개발을 위한 현대적인 고급 프로그래밍 언어입니다. 여기에는 머신러닝, 프로세스 자동화, 데이터 분석 및 시각화를 위한 여러 라이브러리가 포함되어 있습니다.

Python용 MetaTrader 패키지는 MetaTrader 5 터미널에서 프로세서 간 통신을 통해 교환 데이터를 쉽고 빠르게 얻을 수 있도록 설계되었습니다. 이러한 방식으로 수신된 데이터는 통계 계산 및 기계 학습에 추가로 사용될 수 있습니다.

명령줄에서 패키지 설치:

  pip install MetaTrader5

명령줄에서 패키지 업데이트:

  pip install --upgrade MetaTrader5

MetaTrader 5 및 Python 통합 기능

Function

Action

initialize

MetaTrader 5 터미널과의 연결 설정

login

MetaTrader 5 터미널과의 연결 설정

shutdown

이전에 설정한 MetaTrader 5 터미널 연결을 닫습니다

version

MetaTrader 5 터미널 버전 반환

last_error

마지막 오류에 대한 데이터 반환

account_info

현재 거래 계정에 대한 정보를 가져옵니다

terminal_Info

연결된 MetaTrader 5 터미널의 상태 및 매개 변수를 가져옵니다

symbols_total

MetaTrader 5 터미널에 있는 모든 금융상품의 수

symbols_get

MetaTrader 5 터미널에서 모든 금융상품을 가져옵니다

symbol_info

지정된 금융상품에 대한 데이터을 가져옵니다

symbol_info_tick

지정된 금융상품에 대한 마지막 틱을 가져옵니다

symbol_select

MarketWatch 창에서 기호를 선택하거나 창에서 기호를 제거합니다

market_book_add

MetTrader 5 터미널을 특정 심볼에 대한 Market Depth 변경 이벤트에 등록합니다.

market_book_get

지정된 기호에 대한 Market Depth 항목이 포함된 BookInfo 튜플을 반환합니다.

market_book_release

지정된 심볼에 대한 MetaTrader 5 터미널 Market Depth 변경 이벤트 구독 취소

copy_rates_from

지정된 날짜부터 MetaTrader 5 터미널에서 막대를 가져옵니다

copy_rates_from_pos

지정된 인덱스에서 시작하는 MetaTrader 5 터미널에서 막대를 가져옵니다

copyrates_range

MetaTrader 5 터미널에서 지정된 날짜 범위의 막대를 가져옵니다

copy_ticks_from

지정된 날짜부터 MetaTrader 5 터미널에서 틱을 가져옵니다

copy_ticks_range

MetaTrader 5 터미널에서 지정된 날짜 범위에 대한 틱을 가져옵니다

orders_total

활성 주문 수를 가져옵니다

orders_get

심볼 또는 티켓별로 필터링할 수 있는 기능으로 활성 주문을 가져옵니다

order_calc_margin

지정된 거래 작업을 수행할 계정 통화의 마진 반환

order_calc_profit

지정된 거래 작업에 대한 계정 통화로 수익 반환

order_check

다음에 대한 계정 통화로 수익 반환: 지정된 거래 작업

order_send

거래 작업을 수행하기 위한 요청 전송

positions_total

오픈 포지션 수를 가져옵니다

positions_get

심볼 또는 티켓별로 필터링할 수 있는 오픈 포지션을 가져옵니다

history_orders_total

지정된 간격 내에 거래 기록의 주문 수를 가져옵니다

history_orders_get

티켓 또는 포지션별로 필터링할 수 있는 기능으로 거래 내역에서 주문을 가져옵니다

history_deals_total

지정된 간격 내에 거래 기록의 거래 수를 가져옵니다

history_deals_get

티켓 또는 직급별로 필터링할 수 있는 기능으로 거래 기록에서 거래를 가져옵니다

Python을 MetaTrader 5에 연결하는 예

  1. Python 3.8 최신 버전 다운로드 하기 : https://www.python.org/downloads/windows
  2. Python을 설치할 때 명령줄에서 Python 스크립트를 실행할 수 있도록 하려면 "Add Python 3.8 to PATH%"를 체크하십시오.
  3. 명령줄에서 MetaTrader 5 모듈 설치

  pip install MetaTrader5

  1. matplotlib 및 pandas 패키지 추가

  pip install matplotlib
  pip install pandas

  1. 테스트 스크립트 실행

from datetime import datetime
import matplotlib.pyplot as plt
import pandas as pd
from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()
import MetaTrader5 as mt5
 
# MetaTrader 5 연결
if not mt5.initialize():
    print("initialize() 실패")
    mt5.shutdown()
 
# 연결 상태 및 매개 변수 요청
print(mt5.terminal_info())
# MetaTrader 5 버전에 대한 데이터를 가져옵니다
print(mt5.version())
 
# EURAUD에 1000 틱 요청
euraud_ticks = mt5.copy_ticks_from("EURAUD"datetime(2020,1,28,13), 1000mt5.COPY_TICKS_ALL)
# 2019.04.01 13:00 - 2019.04.02 13:00 이내에 AUDUSD로 틱 요청
audusd_ticks = mt5.copy_ticks_range("AUDUSD"datetime(2020,1,27,13), datetime(2020,1,28,13), mt5.COPY_TICKS_ALL)
 
# 여러 가지 방법으로 다른 심볼에서 막대를 가져옵니다
eurusd_rates = mt5.copy_rates_from("EURUSD"mt5.TIMEFRAME_M1datetime(2020,1,28,13), 1000)
eurgbp_rates = mt5.copy_rates_from_pos("EURGBP"mt5.TIMEFRAME_M101000)
eurcad_rates = mt5.copy_rates_range("EURCAD"mt5.TIMEFRAME_M1datetime(2020,1,27,13), datetime(2020,1,28,13))
 
# MetaTrader 5에 대한 연결 종료
mt5.shutdown()
 
#DATA
print('euraud_ticks(', len(euraud_ticks), ')')
for val in euraud_ticks[:10]: print(val)
 
print('audusd_ticks(', len(audusd_ticks), ')')
for val in audusd_ticks[:10]: print(val)
 
print('eurusd_rates(', len(eurusd_rates), ')')
for val in eurusd_rates[:10]: print(val)
 
print('eurgbp_rates(', len(eurgbp_rates), ')')
for val in eurgbp_rates[:10]: print(val)
 
print('eurcad_rates(', len(eurcad_rates), ')')
for val in eurcad_rates[:10]: print(val)
 
#PLOT
# 가져온 데이터로 DataFrame 생성
ticks_frame = pd.DataFrame(euraud_ticks)
# 시간(초)을 날짜 시간 형식으로 변환
ticks_frame['time']=pd.to_datetime(ticks_frame['time'], unit='s')
# 차트에 틱 표시
plt.plot(ticks_frame['time'], ticks_frame['ask'], 'r-', label='ask')
plt.plot(ticks_frame['time'], ticks_frame['bid'], 'b-', label='bid')
 
# 레전드 표시
plt.legend(loc='upper left')
 
# 헤더 추가
plt.title('EURAUD ticks')
 
# 차트 표시
plt.show()

  1. 데이터 및 차트를 가져옵니다
    python_script_chart

[2, 'MetaQuotes-Demo', '16167573']
[5002325, '19 Feb 2020']
 
euraud_ticks( 1000 )
(1580209200, 1.63412, 1.63437, 0., 0, 1580209200067, 130, 0.)
(1580209200, 1.63416, 1.63437, 0., 0, 1580209200785, 130, 0.)
(1580209201, 1.63415, 1.63437, 0., 0, 1580209201980, 130, 0.)
(1580209202, 1.63419, 1.63445, 0., 0, 1580209202192, 134, 0.)
(1580209203, 1.6342, 1.63445, 0., 0, 1580209203004, 130, 0.)
(1580209203, 1.63419, 1.63445, 0., 0, 1580209203487, 130, 0.)
(1580209203, 1.6342, 1.63445, 0., 0, 1580209203694, 130, 0.)
(1580209203, 1.63419, 1.63445, 0., 0, 1580209203990, 130, 0.)
(1580209204, 1.63421, 1.63445, 0., 0, 1580209204194, 130, 0.)
(1580209204, 1.63425, 1.63445, 0., 0, 1580209204392, 130, 0.)
audusd_ticks( 40449 )
(1580122800, 0.67858, 0.67868, 0., 0, 1580122800244, 130, 0.)
(1580122800, 0.67858, 0.67867, 0., 0, 1580122800429, 4, 0.)
(1580122800, 0.67858, 0.67865, 0., 0, 1580122800817, 4, 0.)
(1580122801, 0.67858, 0.67866, 0., 0, 1580122801618, 4, 0.)
(1580122802, 0.67858, 0.67865, 0., 0, 1580122802928, 4, 0.)
(1580122809, 0.67855, 0.67865, 0., 0, 1580122809526, 130, 0.)
(1580122809, 0.67855, 0.67864, 0., 0, 1580122809699, 4, 0.)
(1580122813, 0.67855, 0.67863, 0., 0, 1580122813576, 4, 0.)
(1580122815, 0.67856, 0.67863, 0., 0, 1580122815190, 130, 0.)
(1580122815, 0.67855, 0.67863, 0., 0, 1580122815479, 130, 0.)
eurusd_rates( 1000 )
(1580149260, 1.10132, 1.10151, 1.10131, 1.10149, 44, 1, 0)
(1580149320, 1.10149, 1.10161, 1.10143, 1.10154, 42, 1, 0)
(1580149380, 1.10154, 1.10176, 1.10154, 1.10174, 40, 2, 0)
(1580149440, 1.10174, 1.10189, 1.10168, 1.10187, 47, 1, 0)
(1580149500, 1.10185, 1.10191, 1.1018, 1.10182, 53, 1, 0)
(1580149560, 1.10182, 1.10184, 1.10176, 1.10183, 25, 3, 0)
(1580149620, 1.10183, 1.10187, 1.10177, 1.10187, 49, 2, 0)
(1580149680, 1.10187, 1.1019, 1.1018, 1.10187, 53, 1, 0)
(1580149740, 1.10187, 1.10202, 1.10187, 1.10198, 28, 2, 0)
(1580149800, 1.10198, 1.10198, 1.10183, 1.10188, 39, 2, 0)
eurgbp_rates( 1000 )
(1582236360, 0.83767, 0.83767, 0.83764, 0.83765, 23, 9, 0)
(1582236420, 0.83765, 0.83765, 0.83764, 0.83765, 15, 8, 0)
(1582236480, 0.83765, 0.83766, 0.83762, 0.83765, 19, 7, 0)
(1582236540, 0.83765, 0.83768, 0.83758, 0.83763, 39, 6, 0)
(1582236600, 0.83763, 0.83768, 0.83763, 0.83767, 21, 6, 0)
(1582236660, 0.83767, 0.83775, 0.83765, 0.83769, 63, 5, 0)
(1582236720, 0.83769, 0.8377, 0.83758, 0.83764, 40, 7, 0)
(1582236780, 0.83766, 0.83769, 0.8376, 0.83766, 37, 6, 0)
(1582236840, 0.83766, 0.83772, 0.83763, 0.83772, 22, 6, 0)
(1582236900, 0.83772, 0.83773, 0.83768, 0.8377, 36, 5, 0)
eurcad_rates( 1441 )
(1580122800, 1.45321, 1.45329, 1.4526, 1.4528, 146, 15, 0)
(1580122860, 1.4528, 1.45315, 1.45274, 1.45301, 93, 15, 0)
(1580122920, 1.453, 1.45304, 1.45264, 1.45264, 82, 15, 0)
(1580122980, 1.45263, 1.45279, 1.45231, 1.45277, 109, 15, 0)
(1580123040, 1.45275, 1.4528, 1.45259, 1.45271, 53, 14, 0)
(1580123100, 1.45273, 1.45285, 1.45269, 1.4528, 62, 16, 0)
(1580123160, 1.4528, 1.45284, 1.45267, 1.45282, 64, 14, 0)
(1580123220, 1.45282, 1.45299, 1.45261, 1.45272, 48, 14, 0)
(1580123280, 1.45272, 1.45275, 1.45255, 1.45275, 74, 14, 0)
(1580123340, 1.45275, 1.4528, 1.4526, 1.4528, 94, 13, 0)