Pythonとの統合のためのMetaTraderモジュール

MQL5は金融市場での高性能取引アプリケーションの開発向けに設計されており、アルゴリズム取引で使用される他の特殊言語の中では他に類を見ないものです。MQL5プログラムの構文と速度は可能な限りС++に近いもので、 OpenCLならびMS Visual Studioとの統合がサポートされています。また、統計ファジィ論理ALGLIBのライブラリも用意されています。MetaEditor開発環境はネイティブで.NETライブラリをサポートしており、「スマート」な関数インポート機能があるため、特別なラッパーを開発する必要がありません。サードパーティ製のC++ DLLも利用できます。 С++ソースコードファイル(CPPとH)はエディタから直接編集してDLLにコンパイルすることができます。これには、ユーザのPCにインストールされているMicrosoft Visual Studioを使用することができます。

Pythonは、スクリプトやアプリケーションを開発するための現代的な高級プログラミング言語で、機械学習、プロセス自動化、ならびにデータ分析および視覚化のための複数のライブラリが含まれます。

Python用MetaTraderパッケージは、MetaTrader 5ターミナルから直接プロセッサ間通信を介して交換データを便利に素早く取得するために設計されています。このようにして受信したデータは、統計計算や機械学習にも使用できます。

コマンドラインからのパッケージのインストール:

 pip install MetaTrader5

コマンドラインからのパッケージの更新:

 pip install --upgrade MetaTrader5

MetaTrader 5とPythonを統合するための関数

関数

アクション

initialize

MetaTrader 5ターミナルとの接続を確立します

login

指定されたパラメータを使用して取引口座に接続します

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

気配値表示ウィンドウで銘柄を選択したり、ウィンドウから銘柄を削除したりします。

market_book_add

MetaTrader5ターミナルを指定された銘柄の市場深度変更イベントにサブスクライブします

market_book_get

指定された銘柄のMarketDepthエントリを特徴とするBookInfoからタプルを返します

market_book_release

MetaTrader5ターミナルの指定された銘柄の板情報変更イベントへの購読をキャンセルします

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をインストールする際には、[Add Python 3.8 to PATH%]のチェックをオンにしてPythonスクリプトをコマンドラインから実行できるようにします。
  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() 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()

  1. データとチャートを取得します。
    python_script_chart

[2, 'MetaQuotes-Demo', '16167573']
[500, 2325, '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)