サンプルコード 一覧へ戻る

MQL5サンプルコードツールや技術メモ

【MT5(MQL5)サンプルコード】PythonでMT5を操作(Pythonのインストール~実行)

PythonからMT5を操作する方法を解説します。環境の準備から実行までの基本的な流れを説明します。

スポンサーリンク / Sponsored links

MT5(MQL5)のPython連携

PythonからMT5を操作する方法を解説します。環境の準備から実行までの基本的な流れを説明します。

MT4では公式に用意されたPythonとの連携方法はありませんでしたが、MT5ではPythonと連携するためのモジュールが公式に用意されています。MT4で実現する場合はファイルだったり、WebAPIだったりで個別に連携させる仕組みを構築する必要があり面倒でしたが、MT5ではそんな手間は必要なくなりとても便利になりました。すばらしい。

Pythonは機械学習や統計などのライブラリが充実していますし、それらを解説しているウェブも多くあります。巷に溢れたPythonコードを使って予測した結果をもとにMetaTraderで売買するなんてことも容易にできるようになりました。MT5はべんり。

ただ、残念なことにWSLのUbuntu環境からは利用できないようです。PythonをWSL経由で利用している場合は、WindowsにPythonを入れ直す必要があります。

【関連記事】PythonからMT5の操作

環境の準備

まずはPythonからMetaTraderを操作するための環境を構築します。

Pythonの入手

MetaEditor → ツール → オプション から コンパイラ のタブを開きます。Python横のインストールボタンを押すとPythonファイルのダウンロードが始まります。

この方法でダウンロードされるPythonは最新バージョンではないようです(MetaTraderとの互換性確認済バージョンなのかも?)ので、最新版を利用したい場合はPythonの公式からダウンロードしましょう。

※Pythonの欄にインストールPathが記載されている場合はインストール済です。

※Pythonをインストールしたのに空欄になっている場合はPathが通っていない可能性があります。そんなときは下記の方法でインストールしましょう。

Pythonのインストール

ダウンロードしたPythonのファイルを開いてインストールしましょう。このとき「Add Python 3.9 to PATH」をチェックして、Pathを通すのを忘れずに。

Pythonのインストールが終わったら、MetaEditorを一度閉じてもう一度起動して先ほどのコンパイラのタブを見てみましょう。PythonのインストールPathが表示されているはずです。

PythonにMetaTrader5のライブラリを追加

コマンドプロンプトを起動して次のコードを打ち込みます。pipコマンドはPythonにライブラリを追加する際に使うコマンドです。

pip install MetaTrader5

そうすると↓のようにMetaTrader5のパッケージがインストールされます。

Microsoft Windows [Version 10.0.19041.1586]
(c) Microsoft Corporation. All rights reserved.

C:\Users\WDAGUtilityAccount>pip install MetaTrader5
Collecting MetaTrader5
  Downloading MetaTrader5-5.0.36-cp39-cp39-win_amd64.whl (129 kB)
     |████████████████████████████████| 129 kB 3.2 MB/s
Collecting numpy>=1.7
  Downloading numpy-1.22.3-cp39-cp39-win_amd64.whl (14.7 MB)
     |████████████████████████████████| 14.7 MB 3.3 MB/s
Installing collected packages: numpy, MetaTrader5
Successfully installed MetaTrader5-5.0.36 numpy-1.22.3
WARNING: You are using pip version 21.2.3; however, version 22.0.4 is available.
You should consider upgrading via the 'C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\python.exe -m pip install --upgrade pip' command.

C:\Users\WDAGUtilityAccount>

これで環境の準備は終わりです。

PythonからMetaTraderの操作

次はPythonでスクリプトを書いてMetaTraderを操作してみましょう。

Pythonスクリプトファイルを準備する

MetaEditor → ファイル → 新しいファイル から Pythonスクリプト を選びます。

Pythonスクリプトを書く

MetaEditorでPythonコードを書けるようになるので、「you code here」の下あたりにprint文を適当に追記してコンパイルしましょう。ここで記載するのはMQL5ではなく、Pythonの文法です。

print("MetaTrader5 Author ",mt5.__author__)
print("MetaTrader5 Version ",mt5.__version__)

MetaTraderの定数をPythonで取得して標準出力するという内容です。

コードの全文はこちら

# Copyright 2022, MetaQuotes Ltd.
# https://www.mql5.com

import MetaTrader5 as mt5

mt5.initialize()

# you code here
# 

print("MetaTrader5 Author ",mt5.__author__)
print("MetaTrader5 Version ",mt5.__version__)

mt5.shutdown()

PythonからMetaTraderの操作を実行

コンパイルを押すとPythonスクリプトが実行されて、実行結果はジャーナルに出力されます。

MetaTraderを終了していた場合はコンパイルを押したあとに自動的に起動すると思います。

これが実行までの一連の流れになります。

もう少しやってみましょう(公式のサンプルコードの実行方法)

公式にサンプルコードが載っていますので試してみましょう。

追加のパッケージをインストール

グラフをプロットしたり、数表を扱うのに便利なパッケージをインストールします。コマンドプロンプトを開いて次のコマンドを打ち込みます。

pip install matplotlib
pip install pandas

↓こんな感じでインストールされます。

C:\Users\WDAGUtilityAccount>pip install matplotlib
Collecting matplotlib
  Downloading matplotlib-3.5.1-cp39-cp39-win_amd64.whl (7.2 MB)
     |████████████████████████████████| 7.2 MB 1.7 MB/s
Collecting cycler>=0.10
  Downloading cycler-0.11.0-py3-none-any.whl (6.4 kB)
Collecting pyparsing>=2.2.1
  Downloading pyparsing-3.0.7-py3-none-any.whl (98 kB)
     |████████████████████████████████| 98 kB 548 kB/s
Collecting fonttools>=4.22.0
  Downloading fonttools-4.30.0-py3-none-any.whl (898 kB)
     |████████████████████████████████| 898 kB 234 kB/s
Collecting kiwisolver>=1.0.1
  Downloading kiwisolver-1.3.2-cp39-cp39-win_amd64.whl (52 kB)
     |████████████████████████████████| 52 kB 2.0 MB/s
Collecting packaging>=20.0
  Downloading packaging-21.3-py3-none-any.whl (40 kB)
     |████████████████████████████████| 40 kB 1.3 MB/s
Collecting pillow>=6.2.0
  Downloading Pillow-9.0.1-cp39-cp39-win_amd64.whl (3.2 MB)
     |████████████████████████████████| 3.2 MB 364 kB/s
Requirement already satisfied: numpy>=1.17 in c:\users\wdagutilityaccount\appdata\local\programs\python\python39\lib\site-packages (from matplotlib) (1.22.3)
Collecting python-dateutil>=2.7
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     |████████████████████████████████| 247 kB 345 kB/s
Collecting six>=1.5
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, pyparsing, python-dateutil, pillow, packaging, kiwisolver, fonttools, cycler, matplotlib
Successfully installed cycler-0.11.0 fonttools-4.30.0 kiwisolver-1.3.2 matplotlib-3.5.1 packaging-21.3 pillow-9.0.1 pyparsing-3.0.7 python-dateutil-2.8.2 six-1.16.0
WARNING: You are using pip version 21.2.3; however, version 22.0.4 is available.
You should consider upgrading via the 'C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\python.exe -m pip install --upgrade pip' command.

C:\Users\WDAGUtilityAccount>pip install pandas
Collecting pandas
  Downloading pandas-1.4.1-cp39-cp39-win_amd64.whl (10.5 MB)
     |████████████████████████████████| 10.5 MB 242 kB/s
Collecting pytz>=2020.1
  Downloading pytz-2021.3-py2.py3-none-any.whl (503 kB)
     |████████████████████████████████| 503 kB 226 kB/s
Requirement already satisfied: python-dateutil>=2.8.1 in c:\users\wdagutilityaccount\appdata\local\programs\python\python39\lib\site-packages (from pandas) (2.8.2)
Requirement already satisfied: numpy>=1.18.5 in c:\users\wdagutilityaccount\appdata\local\programs\python\python39\lib\site-packages (from pandas) (1.22.3)
Requirement already satisfied: six>=1.5 in c:\users\wdagutilityaccount\appdata\local\programs\python\python39\lib\site-packages (from python-dateutil>=2.8.1->pandas) (1.16.0)
Installing collected packages: pytz, pandas
Successfully installed pandas-1.4.1 pytz-2021.3
WARNING: You are using pip version 21.2.3; however, version 22.0.4 is available.
You should consider upgrading via the 'C:\Users\WDAGUtilityAccount\AppData\Local\Programs\Python\Python39\python.exe -m pip install --upgrade pip' command.

C:\Users\WDAGUtilityAccount>

サンプルコードを実行

次のスクリプトは公式ページに掲載されているコードです。

こちらをMetaEditorに貼り付けてコンパイルボタンを押して実行すると・・・グラフ作成とTickデータが出力されます。

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() failed")
   mt5.shutdown()
 
# 接続状態とパラメータをリクエストする
print(mt5.terminal_info())
# MetaTrader 5バージョンについてのデータを取得する
print(mt5.version())
 
# EURAUDから1,000ティックをリクエストする
euraud_ticks = mt5.copy_ticks_from("EURAUD", datetime(2020,1,28,13), 1000, mt5.COPY_TICKS_ALL)
# AUDUSDから2019.04.01 13:00 - 2019.04.02 13:00のティックをリクエストする
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_M1, datetime(2020,1,28,13), 1000)
eurgbp_rates = mt5.copy_rates_from_pos("EURGBP", mt5.TIMEFRAME_M1, 0, 1000)
eurcad_rates = mt5.copy_rates_range("EURCAD", mt5.TIMEFRAME_M1, datetime(2020,1,27,13), datetime(2020,1,28,13))
 
# MetaTrader 5への接続をシャットダウンする
mt5.shutdown()
 
#データ
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)
# 秒での時間をdatetime形式に変換する
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()

グラフと出力データ

MetaEditorからの実行がうまく行かない場合は・・・

MetaTraderからドラッグ&ドロップでEAを使うときのようにチャートにぽいっとするか、もしくはコマンドプロンプトでPythonのスクリプトファイル(*.py)があるディレクトリに移動して、次のようにコマンドを実行したり、期間やTick数を変えるとうまくデータを取得できるようでグラフが表示されます。

python pythontest.py

以下は実行結果です。


C:\Users\WDAGUtilityAccount\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Scripts>python pythontest.py
TerminalInfo(community_account=False, community_connection=False, connected=True, dlls_allowed=False, trade_allowed=False, tradeapi_disabled=False, email_enabled=False, ftp_enabled=False, notifications_enabled=False, mqid=False, build=3219, maxbars=100000, codepage=0, ping_last=233179, community_balance=0.0, retransmission=0.0, company='MetaQuotes Software Corp.', name='MetaTrader 5', language='English', path='C:\\Program Files\\MetaTrader 5', data_path='C:\\Users\\WDAGUtilityAccount\\AppData\\Roaming\\MetaQuotes\\Terminal\\D0E8209F77C8CF37AD8BF550E51FF075', commondata_path='C:\\Users\\WDAGUtilityAccount\\AppData\\Roaming\\MetaQuotes\\Terminal\\Common')
(500, 3219, '25 Feb 2022')
euraud_ticks( 100 )
(1643342400, 1.58302, 1.58313, 0., 0, 1643342400091, 134, 0.)
(1643342400, 1.58296, 1.58309, 0., 0, 1643342400322, 134, 0.)
(1643342400, 1.58297, 1.5831, 0., 0, 1643342400427, 134, 0.)
(1643342400, 1.58299, 1.58312, 0., 0, 1643342400539, 134, 0.)
(1643342400, 1.58299, 1.58311, 0., 0, 1643342400635, 4, 0.)
(1643342400, 1.58298, 1.58311, 0., 0, 1643342400766, 130, 0.)
(1643342401, 1.58296, 1.58315, 0., 0, 1643342401108, 134, 0.)
(1643342401, 1.583, 1.58317, 0., 0, 1643342401230, 134, 0.)
(1643342401, 1.58297, 1.58315, 0., 0, 1643342401432, 134, 0.)
(1643342403, 1.58301, 1.58317, 0., 0, 1643342403379, 134, 0.)
audusd_ticks( 115888 )
(1643256000, 0.70819, 0.70822, 0., 0, 1643256000028, 134, 0.)
(1643256000, 0.70819, 0.70823, 0., 0, 1643256000289, 4, 0.)
(1643256000, 0.70818, 0.70821, 0., 0, 1643256000410, 134, 0.)
(1643256000, 0.70817, 0.7082, 0., 0, 1643256000523, 134, 0.)
(1643256000, 0.70816, 0.7082, 0., 0, 1643256000770, 130, 0.)
(1643256001, 0.70816, 0.70819, 0., 0, 1643256001225, 4, 0.)
(1643256001, 0.70815, 0.70818, 0., 0, 1643256001353, 134, 0.)
(1643256001, 0.70815, 0.70819, 0., 0, 1643256001569, 4, 0.)
(1643256001, 0.70816, 0.70819, 0., 0, 1643256001695, 130, 0.)
(1643256002, 0.70816, 0.7082, 0., 0, 1643256002069, 4, 0.)
eurusd_rates( 100 )
(1643336460, 1.11391, 1.11391, 1.11381, 1.11381, 9, 0, 0)
(1643336520, 1.11382, 1.11388, 1.11381, 1.11385, 10, 0, 0)
(1643336580, 1.11383, 1.11387, 1.11383, 1.11385, 11, 0, 0)
(1643336640, 1.11386, 1.11403, 1.11386, 1.11403, 24, 0, 0)
(1643336700, 1.11403, 1.11418, 1.11403, 1.11415, 26, 0, 0)
(1643336760, 1.11415, 1.11418, 1.11412, 1.11412, 15, 0, 0)
(1643336820, 1.11412, 1.11413, 1.1141, 1.11412, 11, 0, 0)
(1643336880, 1.11412, 1.11421, 1.11411, 1.11421, 19, 0, 0)
(1643336940, 1.1142, 1.11424, 1.11411, 1.11413, 45, 0, 0)
(1643337000, 1.11415, 1.11421, 1.11412, 1.11419, 47, 0, 0)
eurgbp_rates( 100 )

MetaEditor以外のPython開発環境(VSCodeおすすめ)

MetaEditorを使わなくてもPythonの開発環境からなら同じように実行できます。むしろMetaEditorよりもVSCode(Visual Studio Code)などの環境を使用したほうがプログラミングは捗るでしょう。

【関連記事】PythonからMT5の操作

MetaEditorでMQLを書くことになれてしまうと気にならないかもしれませんが、VSCode(のExtension)やVisual Studioはコード補完などの入力支援が豊富ですし、構文エラーなんかも適宜指摘してくれる大変うれしい機能が多いです。

MetaEditorもそんな補助機能が豊富ならEA開発がもっと捗ることでしょうね。

【参考】WSLのUbuntuから利用できるか?

WSLのUbuntuからは利用できないようです。

ふだんのPythonプログラミングにはWSLのUbuntuを利用しているので、MetaTraderでもその環境を使えたらと思っていたのですが、pipコマンドでMetaTraderライブラリをインストールしようとしたら次のように見つかりませんエラーになってしまいました。

wu@dx:~$ pip install MetaTrader5
ERROR: Could not find a version that satisfies the requirement MetaTrader5 (from versions: none)
ERROR: No matching distribution found for MetaTrader5

とりあえずこのエラーメッセージで検索して一番最初にヒットしたstackoverflowでのやり取りをみるとWindowsにしか対応していないようです。残念。

【関連記事】PythonからMT5の操作

コメント / Comments

タイトルとURLをコピーしました