English Русский 中文 Español Deutsch Português
preview
MQL5の統合:Python

MQL5の統合:Python

MetaTrader 5トレーディングシステム | 18 10月 2024, 12:55
392 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

はじめに

この新しい記事では、読者のプログラミングスキルにさらなる価値を加える重要なツールを紹介します。今回はPythonの統合に焦点を当てます。Pythonは読みやすくシンプルな高水準プログラミング言語であり、用途に応じてソフトウェア開発者に様々なメリットをもたらします。特にデータ分析、統計計算、機械学習の分野では、Pythonの豊富なライブラリが強力なサポートを提供します。そのため、PythonとMQL5の統合により、金融市場の参加者はデータ処理や予測分析を通じて、より良い洞察を得て成果を向上させることができます。

この記事では、Pythonの基本的な概要と、環境設定後の簡単な例を示しながら、MQL5でPythonを使用する方法を解説します。以下のトピックを通じて、それらを順にカバーしていきます。

MQL5でPythonを使用することによってどのように取引結果を改善できるかを理解するために、この興味深いトピックをさらに深く掘り下げていきましょう。


Pythonの概要

PythonはGuido van Rossumによって開発され、1991年にリリースされた高水準プログラミング言語です。その読みやすさとシンプルさから、初心者から経験豊富な開発者まで、幅広い層にとって理想的な言語となっています。Pythonはシンプルなスクリプトから複雑なシステムまで、さまざまな用途に適しており、簡潔な構文によってクリーンで保守性の高いコードが書ける点が特徴です。

Pythonの主な特徴は以下の通りです。

  • 読みやすさ:Pythonの構文は直感的で、自然言語に近い形で書くことができるため、可読性が高いです。
  • インタプリタ型言語:Pythonはコードを行単位で実行するため、デバッグや開発のスピードが向上します。
  • 動的型付け:変数の型は実行時に自動で決定されるため、柔軟なコーディングが可能です。
  • 豊富な標準ライブラリ:ファイル操作、システムコール、データ処理など、一般的なタスクをサポートする幅広いライブラリが提供されています。
  • 汎用性:オブジェクト指向、手続き型、関数型など、さまざまなプログラミングスタイルに対応しています。
  • クロスプラットフォームの互換性:PythonはWindows、macOS、Linuxなど、様々なOS上で動作し、特別な変更なしにコードを移植できます。
  • 強力なコミュニティとエコシステム:大規模なコミュニティに支えられており、多数のライブラリやツールが提供され、開発を支援しています。

Pythonの応用分野には次のようなものがあります。

  • データサイエンス:PandasやMatplotlibといったライブラリを用いたデータ解析や可視化
  • 人工知能:scikit-learnやTensorFlow、Kerasなどのツールを用いた機械学習とAI開発
  • 自動化:SeleniumやBeautiful Soupを用いた繰り返し作業の自動化
  • Web開発:DjangoやFlaskなどのフレームワークを用いたWebアプリケーションの開発
  • 科学的研究:シミュレーション、統計解析、モデル構築に理想的

Pandas、NumPy、SciPy、scikit-learn、TensorFlow、Matplotlib、Selenium、Django、Flaskは、特に人気のあるPythonライブラリやフレームワークの一部です。まとめると、Pythonがプログラミング界で長く支持され、広く使われ続けているのは、その読みやすさとシンプルさ、さらに強力なライブラリの存在が大きな要因です。


Python統合のメリット

前述の通り、PythonとMQL5の統合は多くの利便性を提供し、システムにとって重要な付加価値となります。このセクションでは、PythonをMQL5に統合することで得られる主要な利点を紹介します。

この2つのシステムを統合することで、以下のような利点があります。

  • PandasやNumPyなど、Pythonで利用可能な広範なライブラリを使用することで、高度なデータ分析テクニックを用いたデータ操作と分析が容易になります。
  • scikit-learn、TensorFlow、Kerasなどの機械学習ライブラリを組み込むことで、予測分析のための機械学習モデルの開発と実装が可能になります。
  • Pythonの堅牢なエコシステムを活用することで、自動化と効率化が進み、複雑な取引戦略の自動化と最適化が実現できます。
  • Pythonの膨大なライブラリとフレームワークを使うことで、取引アルゴリズムの強化にもつながります。

以下が詳細です。

データ分析

Pythonのライブラリを大いに活用することができます。Pythonには、PandasやNumPyなど、データ分析に特化したライブラリが多数用意されており、これらのライブラリは高度なデータ操作と統計分析を容易にします。これにより、取引戦略における分析の質と深さを向上させることができます。

  • Pandasライブラリは、迅速で簡単なデータ解析を容易にする高レベルのデータ構造とメソッドを提供します。Pandasを使用することで、ユーザーは大規模なデータセットを効率的に処理し、最小限の労力でデータのフィルタリング、グループ化、集計などの操作を実行できます。
  • NumPyは、効率的な数値計算をサポートする計算ライブラリで、数値データの大きな配列や行列を扱うのに適しています。包括的な数学演算を提供し、Pandasやscikit-learnなどの他のライブラリを構築する基礎ライブラリとして頻繁に利用されます。

機械学習

機械学習の分野では、そのシンプルさと、scikit-learn、TensorFlow、Kerasなどの堅牢なライブラリが利用できることから、Python言語が好まれています。MQL5と統合することで、トレーダーはこれらのライブラリを利用して、市場の動きを予測するために過去のデータを基にした予測モデルを構築、開発、展開することが可能になります。

  • Scikit-learn:このライブラリは、機械学習のためのシンプルかつ効果的なツールをユーザーに提供し、綿密なデータ分析とマイニングを可能にします。多様なアルゴリズムを揃えており、分類、クラスタリング、回帰など、さまざまなニーズに対応しています。
  • TensorFlowとKeras:これらはディープラーニングを目的とした開発者の間で非常に人気が高く、広く使われているツールです。高度なモデルを構築するためのニューラルネットワークの構築と訓練に必要な包括的なツール群を提供しています。

自動化と効率化

反復作業や高度な取引戦略においては、自動化が効果的な解決策となります。プロセスを自動化することで、取引業務を合理化し、ヒューマンエラーの可能性を減らすことができます。特に、複雑なストラテジーを扱う場合においては、明確で正確なコードを持つことでリスクを軽減することができます。

  • この自動化は、収集、処理、分析など、データに関連するさまざまな作業に適用でき、トレーダーの時間を解放し、戦略の開発と実行に集中できるようにします。
  • さらに、このアプローチはバックテストや最適化にも応用することが可能で、過去のデータを活用して戦略のパフォーマンスを評価し、パラメータの最適化を通じて改善すべき領域を特定することで、最終的に取引結果を向上させることができます。

包括的なライブラリとフレームワークへのアクセス

MQL5の機能は、ライブラリやフレームワークの包括的なエコシステムを利用することで強化できます。これらには、高度な統計ツール、外部データソース用のAPI、複雑な可視化が含まれており、活用することでMQL5アプリケーションの機能を拡張できます。

  • データの可視化:MatplotlibやSeabornなどのライブラリは、シンプルなものから洗練されたものまで、情報量の多いチャートを作成するためのツールを提供しています。これにより、取引成績やその他の指標など、利用可能なデータを可視化することができます。
  • APIとデータソース:Pythonのライブラリは、金融データの取得やWebスクレイピングの実行、データソースへのアクセスに便利なソリューションを提供します。これらのライブラリは多くのAPIと連携することができ、取引戦略を強化したい人にとって有利な手段となります。

このトピックには他にも多くの利点が考えられますが、ここではPythonをシステムに統合することの最も重要な利点について述べてきました。

取引に関連する分野では、実際に応用可能なわかりやすいアプリケーションを提供することで、PythonをMQL5に統合する際の取引の概念をどのように活用できるかを説明する助けとなるでしょう。これらの概念や技術がさまざまな分野でどのように使用できるかを検証し、取引プロセスにどのように統合できるかを実証します。これについては、高度アプリケーションのセクションで詳しく説明します。


環境の設定

このセクションでは、MQL5でPythonを使用できるようにするために必要なソフトウェアの設定方法について説明します。以下の手順に従ってください。

  • https://www.metatrader5.com/enにアクセスして、インストーラーをダウンロードし、MetaTrader 5を自分のデバイスにインストールします。
  • https://www.python.org/downloads/windowsから最新バージョンのPythonをダウンロードします。
  • Pythonをインストールする際、[Add Python to PATH%]にチェックを入れると、コマンドラインからPythonスクリプトを実行できるようになります。
  • クリーンで隔離された再現可能な設定を維持するために、プロジェクトごとに個別の環境を作ることが非常に重要です。以下の手順では、コマンドラインを使ってこれを実現する方法を説明します。
    • プロジェクトディレクトリに移動します。
cd /path/to/your/project
    • venuを使用してmytestenv環境(組み込み仮想環境ツール)を作成します。
python -m venv mytestenv
    • 作成された環境をアクティブにします。
mytestenv\Scripts\activate
    • MetaTrader 5モジュールはコマンドラインからインストールする必要があります。https://pypi.org/project/MetaTrader5/リンクから MetaTrader5 Pythonのパッケージにアクセスできます。
pip install MetaTrader5
    • MetaTraderインストールの詳細を表示します。
pip show MetaTrader5
    • 前述の関数の利用を容易にするために、matplotlibとpandasパッケージを追加する必要があります。
pip install matplotlib
pip install pandas
    • 非アクティブ化の場合、コマンドラインで以下のコマンドを使用できます。
deactivate

この時点で、必要なソフトウェア(MetaTrader5、Python、必要なライブラリ)がデバイスにインストールされたため、作業を開始できます。


シンプルなアプリケーション

先に述べたように、PythonとMQL5は、データ分析、機械学習、自動化など、さまざまなタスクや領域で活用できる貴重なツールです。このセクションでは、PythonスクリプトをMetaTrader 5で使用することを示す、簡単な取引関連のアプリケーションを紹介します。また、達成可能な基本的なタスクの概要についても説明します。

アプリケーション1:Pythonスクリプトを使ってMT5を開く

このアプリケーションの目的は、MetaTrader 5端末を開き、端末が初期化されたかどうかを示すメッセージを表示するPythonスクリプトを作成することです。次のコードは、スクリプト全体を表しています。「xxxxx」は、口座番号、ログイン、パスワード、ブローカーサーバーなど、関連する口座詳細情報に置き換えてください。

import MetaTrader5 as mt5
print ("MetaTrader5 PKG version: ",mt5.__version__)
if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")  
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())
 

このコードを実行すると、実行ファイルをクリックしたときと同じようにMetaTrader 5端末が初期化され、通常の取引に使用できるようになります。さらに、コンソールに次のような結果が表示されます。

  • MetaTrader5 PKG version:  5.0.4424
  • MetaTrader5 PKG author:  MetaQuotes Ltd.
  • MT5 initialized Successfully

アプリケーション2:Pythonスクリプトを使ってポジションを建てる

このアプリケーションの目的は、MetaTrader 5端末で買いポジションを建てるためのPythonスクリプトを作成することです。以下の手順を実行することで、ストップロスレベルとテイクプロフィットを設定し、XAUUSDの0.01買いポジションをAsk価格で開くスクリプトを作成します。

MetaTrader5モデルをmt5としてインポートします。

import MetaTrader5 as mt5

MetaTrader5のバージョンをパッケージ情報として印刷します。

print ("MetaTrader5 PKG version: ",mt5.__version__)

MetaTrader5の作者をパッケージ情報として印刷します。

print ("MetaTrader5 PKG author: ",mt5.__author__)

MetaTrader5接続は、初期化が成功したか失敗したかを示すメッセージと共に初期化されます。失敗した場合は、エラーコードが表示されます。ログイン、ブローカーサーバー、パスワードを含むアカウント詳細は、実際のアカウント詳細に置き換えてください。

if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())

変数symbol、lot、point、order_type、price、sl、tp、deviation、magic、comment、type_time、type_fillingを宣言します。

symbol="XAUUSD"
lot=0.01
point=mt5.symbol_info(symbol).point
order_type=mt5.ORDER_TYPE_BUY
price=mt5.symbol_info_tick(symbol).ask
sl=mt5.symbol_info_tick(symbol).ask-100
tp=mt5.symbol_info_tick(symbol).ask+150
deviation=10
magic=2222222
comment="python order"
type_time=mt5.ORDER_TIME_GTC
type_filling=mt5.ORDER_FILLING_IOC

前に宣言したように、注文の詳細と同等のリクエストを宣言して注文を送信します。

request={
    "action":mt5.TRADE_ACTION_DEAL,
    "symbol":symbol,
    "volume":lot,
    "type":order_type,
    "price":price,
    "sl":sl,
    "tp":tp,
    "deviation":deviation,
    "magic":magic,
    "comment":comment,
    "type_time":type_time,
    "type_filling":type_filling,
    } 

order_checkを使って、リクエストされた取引操作を実行するのに十分な資金があることを確認します。チェック結果はMqlTradeCheckResult構造体として返されます。

result=mt5.order_check(request)

取引操作の実行は、order_send関数を介してリクエストを送信することによっておこなわれ、これは更新として結果値と同等の役割を果たします。

result=mt5.order_send(request)

shutdown()関数を使用して以前に確立したMetaTrader 5端末への接続を終了する必要があります。

mt5.shutdown()

その結果、以下のコードブロックが示すように、完全なコードを同じ方法で見つけることができます。

import MetaTrader5 as mt5
print ("MetaTrader5 PKG version: ",mt5.__version__)
print ("MetaTrader5 PKG author: ",mt5.__author__)
if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())
symbol="XAUUSD"
lot=0.01
point=mt5.symbol_info(symbol).point
order_type=mt5.ORDER_TYPE_BUY
price=mt5.symbol_info_tick(symbol).ask
sl=mt5.symbol_info_tick(symbol).ask-100
tp=mt5.symbol_info_tick(symbol).ask+150
deviation=10
magic=2222222
comment="python order"
type_time=mt5.ORDER_TIME_GTC
type_filling=mt5.ORDER_FILLING_IOC
request={
    "action":mt5.TRADE_ACTION_DEAL,
    "symbol":symbol,
    "volume":lot,
    "type":order_type,
    "price":price,
    "sl":sl,
    "tp":tp,
    "deviation":deviation,
    "magic":magic,
    "comment":comment,
    "type_time":type_time,
    "type_filling":type_filling,
    }    
result=mt5.order_check(request)
result=mt5.order_send(request)
mt5.shutdown()

このコードを実行すると、次のような結果が得られます。

  • MetaTrader5 PKG version:  5.0.4424
  • MetaTrader5 PKG author:  MetaQuotes Ltd.
  • MT5 initialized Successfully
  • 金(XAUUSD)の買い取引は、ロットサイズ0.01、ストップロス注文はAsk価格マイナス100、利益確定はAsk価格プラス150でAsk価格で開始されました。

buyTrade

アプリケーション3:MT5 Python API を使ってデータを取得する

MQL5とPythonを活用することで、データ管理の文脈で多くのタスクを達成することができます。このセクションでは、MT5 Python APIを使用して金融データを取得する、取引に関連する簡単な例を紹介します。具体的には、2023年8月1日から現在(記事執筆時は2024年8月12日)までの金価格(XAUUSD)を取得し、印刷し、折れ線グラフとして可視化します。このプロセスの手順は以下の通りです。

必要なライブラリをインポートする必要があります。

MetaTrader5モジュールは、「mt5」と指定され、MetaTrader 5取引端末との相互作用のためのオブジェクトとして将来使用するためにインポートされます。

import MetaTrader5 as mt5

Pandasライブラリは、データ操作と分析のために「pd」としてインポートされます。

import pandas as pd

XAUUSDデータを表示するためのデータ可視化に使用するplotly.expressをpxとしてンポートします。

import plotly.express as px

plotly.offlineからプロットをインポートすることで、インターネットに接続することなくプロットを作成することができます。

from plotly.offline import plot

日付と時刻の操作を容易にするためには、datetimeからdatetimeモジュールをインポートする必要があります。

from datetime import datetime

MetaTrader5のパッケージ情報(バージョンと作者)を印刷します。

print ("MetaTrader5 PKG version: ",mt5.__version__)
print ("MetaTrader5 PKG author: ",mt5.__author__)

MetaTrader 5端末が初期化され、初期化が成功したかどうかを示すコンソールメッセージが出力されます。初期化に成功すると「MT5 initialized successfully」と表示されます。逆に、初期化に失敗した場合は、エラーコードと最後のエラーメッセージとともに「MT5 initialization failed, error code」というメッセージが表示されます。

if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())

XAUUSDの履歴データ(始値、高値、安値、終値、出来高、スプレッ ド、リアル出来高)はMetaTrader 5プラットフォームから取得しました。そのために以下のコマンドを使用しました。

  • pd.DataFrame:pd.dataFrameは、特定の条件で作成することができ、その結果、2次元のラベル付きデータ構造となります。
  • mt5.copy_rates_range:銘柄(XAUUSD)、時間枠(mt5.TIMEFRAME_D1)、開始日(datetime(2023,8,1))、終了日(datetime.now())のデータの種類を決定するために使用されます。
xauusd_data=pd.DataFrame(mt5.copy_rates_range("XAUUSD", mt5.TIMEFRAME_D1, datetime(2023,8,1), datetime.now()))

time列は、pandas.to_datetime関数を使ってUnixタイムスタンプから読みやすいdatetime形式に変換されます。

xauusd_data['time'] = pd.to_datetime(xauusd_data['time'],unit='s')

XAUUSDの検索されたデータは、以下のコード行によって表示されます。

print(xauusd_data)

取得したデータは、Plotly Expressを使って折れ線グラフを作成するために、px.line関数を利用してプロットします。このプロットは、2023年8月1日から現在までのXAUUSDの価格推移を表しています。

fig = px.line(xauusd_data, x=xauusd_data['time'], y=xauusd_data['close'])
plot(fig)

完全なコードはこのコードのブロックと同じです。

import MetaTrader5 as mt5
import pandas as pd
import plotly.express as px
from plotly.offline import plot
from datetime import datetime
print ("MetaTrader5 PKG version: ",mt5.__version__)
print ("MetaTrader5 PKG author: ",mt5.__author__)
if mt5.initialize(login=xxxxx, server="xxxxx",password="xxxxx"):
    print ("MT5 initialized Successfully")
else: print ("MT5 initialization Failed, Error code ",mt5.last_error())
xauusd_data=pd.DataFrame(mt5.copy_rates_range("XAUUSD", mt5.TIMEFRAME_D1, datetime(2023,8,1), datetime.now()))
xauusd_data['time'] = pd.to_datetime(xauusd_data['time'],unit='s')
print(xauusd_data)
fig = px.line(xauusd_data, x=xauusd_data['time'], y=xauusd_data['close'])
plot(fig)

コードを実行すると、次のような結果が得られます。

  • メッセージ「MetaTrader5 PKG version:5.0.4424」がコンソールに表示される
  • メッセージ「MetaTrader5 PKG author:  MetaQuotes Ltd.」がコンソールに表示される
  • メッセージ「MT5 initialized Successfully」がコンソールに表示される
  • 以下の図と同じXAUUSDのデータがコンソールに出力される

XAUUSD_data

  • XAUUSDのグラフをブラウザで開くと以下のようにプロットされる

XAUUSD_plot

上の図に示すように、折れ線グラフは、2023年8月から現在までの金(XAUUSD)の終値を時系列で表しています。前述の簡単なアプリケーションは、自動取引、データ分析、その他の関連タスクのさまざまな側面において、MQL5とPythonを活用する可能性を示しています。


結論

Pythonは汎用性の高い強力なプログラミング言語であり、取引や金融市場など、さまざまな分野で活用されています。Pythonを使用することで、戦略の自動化やデータ分析が可能となり、より情報に基づいた取引の意思決定が容易になります。さらに、PythonとMQL5の組み合わせにより、データと機械学習を活用した高度な取引システムの構築が実現でき、アルゴリズム取引の分野で大きな進歩をもたらします。これにより、より適応性の高いデータ主導の取引システムを構築することが可能となり、金融市場における取引成果を高める潜在能力を秘めています。

この記事では、MQL5と組み合わせたPythonの利用方法を紹介しました。また、MetaTrader 5用のPython環境を設定するための手順も概説しています。効果的なワークフローを確立することで、開発者は依存関係をより効率的に管理し、取引システムの拡張性を高めることができます。Pythonはタスクを自動化し、市場動向を分析することができます。これは、MetaTrader 5を開く、取引の実行、資産データの取得と可視化など、実践的なアプリケーションによって実証されています。

この記事がMQL5でPythonを使い始める助けになれば幸いです。様々なアプリケーションを試すことは、トレーダーと開発者の双方にとって非常に有益です。詳細については、以下の資料をご参照ください。

  • Python for Dummies (Stef Maruch)
  • Python Crash Course (Eric Matthes)
  • Python All-In-One (John Shovic と Alan Simpson)

さらに、MQL5のWebサイト(https://www.mql5.com/ja/docs/python_metatrader5)からは、詳しいドキュメントにアクセスすることができます。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/14135

添付されたファイル |
openMT5.py (0.39 KB)
openPosition.py (1.22 KB)
getData.py (0.84 KB)
Candlestick Trend Constraintモデルの構築(第8回):エキスパートアドバイザーの開発 (I) Candlestick Trend Constraintモデルの構築(第8回):エキスパートアドバイザーの開発 (I)
今回は、前回の記事で作成した指標を元に、MQL5で最初のエキスパートアドバイザー(EA)を作成します。リスク管理を含め、取引プロセスを自動化するために必要な全機能を紹介します。これにより、手動の取引執行から自動化されたシステムへとスムーズに移行できるメリットがあります。
コードロックアルゴリズム(CLA) コードロックアルゴリズム(CLA)
この記事では、コードロックを単なるセキュリティメカニズムとしてではなく、複雑な最適化問題を解くためのツールとして再考し、新たな視点から捉えます。セキュリティ装置にとどまらず、最適化への革新的アプローチのインスピレーション源となるコードロックの世界をご紹介します。各ロックが特定の問題の解を表す「ロック」の母集団を作り、機械学習や取引システム開発など様々な分野でこれらのロックを「ピッキング」し、最適解を見つけるアルゴリズムを構築します。
ニュース取引が簡単に(第3回):取引の実施 ニュース取引が簡単に(第3回):取引の実施
この記事では、ニュース取引エキスパートアドバイザー(EA)で、データベースに保存されている経済指標カレンダーに基づいて取引を開始します。さらに、EAのグラフィックを改善し、今後の経済指標カレンダーイベントに関するより適切な情報を表示する予定です。
多通貨エキスパートアドバイザーの開発(第11回):最適化の自動化(最初のステップ) 多通貨エキスパートアドバイザーの開発(第11回):最適化の自動化(最初のステップ)
良いEAを得るためには、取引戦略の複数のインスタンスから優れたパラメータセットを選択する必要があります。これを実現するためには、さまざまな銘柄で最適化を行い、最良の結果を選ぶという手動のプロセスがあります。しかし、この作業をプログラムに任せ、より生産的な活動に専念したほうが効率的です。