見出し画像

MLbot(LightGBMモデル)の実行用ファイルのコード全文(FX自動売買×機械学習)

この記事では、PythonでMT5にアクセスして、機械学習モデル(LightGBM)を呼び出して売買判定の予測を行い、FX自動売買を行うためのサンプルコードを掲載しています。
内容をコピペしていけば、機械学習モデル(LightGBM)を取り入れたFX自動売買ツールの作成が可能です。
最後にこの記事で紹介したコードをまとめた.ipynbファイルをダウンロード可能にしております。


PythonでFX自動売買

FXの自動売買というと、MT4やMT5で使用されるMQL4やMQL5という言語で構築したEA(エキスパートアドバイザー)がメジャーかと思いますが、MT5ではPythonのAPIが正式に提供されていて、PythonでMT5にアクセスして自動売買というのが比較的簡単になっています。Pythonであれば、機械学習の実装も行いやすいです。

以下の記事では、シンプルなロジックでPythonによるFX自動売買ツールの全コードをご紹介しています。是非合わせてご覧ください。

LightGBMモデルの学習

以下の記事では、Google Colabを用いたLightGBMモデルの学習およびバックテストを行う方法をご紹介しました。

これはGoogle Colab上で機械学習モデルの学習を行い、学習したモデルを用いてバックテストを行うためのコードで、実際のFX取引には使えないものでした。
この学習したモデルを用いて、「実際にMT5にアクセスしてFX自動売買を行うためのサンプルコードを掲載する」というのが、本記事の内容です。

Pythonの環境設定

この記事では、基本的なPythonの環境設定は整っていて、Jupyter Notebookを使用する前提で話を進めます。

必要なライブラリのインポート

今回必要なライブラリは以下の通りです。

import MetaTrader5 as mt5
from datetime import datetime, timedelta
import numpy as np
import pandas as pd
import time
import pytz
import talib as ta
import lightgbm as lgb
import joblib

こちらを実行して、エラーになる場合は、必要なインストールが完了していない可能性が高いです。
例えば、MetaTrader5であればJupyter Notebook上で以下のコマンドを入力すればインストール可能です。

pip install MetaTrader5

その他、ある程度メジャーなライブラリかと思いますので、各自で調べて必要なインストールを完了させてから先に進んでください。

MT5に接続〜初期設定

ログイン情報を入力

PythonではAPIを介してMT5にログインする形になるので、通常MT5にログインするのと同じ以下の情報を用意します。

login_ID = 12345678 # ご自身のログインIDを入力
login_server = 'XXXXXXXXXX' # ご自身のログインサーバーを入力
login_password = 'XXXXXXXX' # ご自身のログインパスワードを入力

上記はサンプルですので、ご自身のログイン情報に書き換えてください。

MT5に接続

上記のログイン情報で指定した取引口座でMT5に接続します。

# ログイン情報で指定した取引口座でMetaTrader5に接続
if not mt5.initialize(login=login_ID, server=login_server,password=login_password):
    print("initialize() failed, error code =",mt5.last_error())
    quit()

なお、事前にMT5を起動しておいた方が処理がスムーズです。
MT5を開いたら、「ツール」→「オプション」で以下の通り、「アルゴリズム取引を許可」にチェックを入れておきます。

MT5 「ツール」→「オプション」

「外部Python APIを介したアルゴリズム取引を無効にする」にチェックが入っていないことも確認しておいてください。そうでないと、PythonからMT5にアクセスすることが出来ません。

Input設定

初期設定として、いくつかインプットを定めておきます。

symbol = "GBPJPY" # 取引対象
first_lot = 0.01 # 初期ロット数
max_lot = 0.30 # 最大ロット数
tp_factor = 2.4 # 利確係数
sl_factor = 2.3 # ストップロス係数
entry_range = 60 # エントリー幅
spread_limit = 300 # 許容スプレッド
magic_number = 10001 # マジックナンバー 
slippage = 10 # スリッページ
num_bars = 30 # 取得する四本値の本数

今回実装するのはADM-EAをベースのロジックとしていますので、そのために必要な変数もここで用意しておきます。ロジックの詳細は以下の記事をご参照ください。

テキストファイルの読み込み

このADM-EAのロジックでは、ポジションをエントリーした際のATRの値を基準に利確幅とロスカット幅を決定し、毎回の勝敗(利確 or ロスカット)に応じて次のロット数を決めるという仕組みになっています。
そのため、EA(ここではbot)を一度停止したり再起動したりした場合でもロジックを継続可能なようにATRと勝敗履歴で定まる数列を記録しておく必要があります。
そこで、利確幅とロスカット幅を決定する際に使用するcurrent_ATRと、ロット数調整に必要な分解モンテカルロ法で使用する数列(MC_list)について、テキストファイルを用意しておきます。

# current_ATR.txtを読み込み、current_ATRを取得
with open('current_ATR.txt', 'r') as f:
    current_ATR = float(f.read())

# MC_list.txtを読み込み、MC_listを生成
with open('MC_list.txt', 'r') as f:
    MC_list = [int(line.strip()) for line in f]

# MC_listの各要素を文字列に変換
MC_list_str = [str(i) for i in MC_list]
MC_list_str = ','.join(MC_list_str)

上記は「current_ATR.txt」と「MC_list.txt」というファイルから前回までの情報を読み込むための処理です。

current_ATR.txt
MC_list.txt

初回起動の場合の初期値は、ATRは0、MC_listは[0,1]となりますので、上記のファイルを実行ファイル(.ipynb)と同じフォルダに置くようにしてください。

point取得

ここでは、MT5からpoint(価格の最小単位)を取得します。symbolは先ほどのInputで指定した"GBPJPY"です。

point=mt5.symbol_info(symbol).point # 価格の最小単位

例えば、GBPJPYの価格が181.686のように小数第三位までの価格単位であれば、point=0.001が取得されます。

有料部分の内容

以上の準備を踏まえて、テクニカル指標取得のための必要な関数の定義から、現在価格を取得してLightGBM(機械学習モデル)による売買判定を行い、実際に注文を行うためのループ処理( MT4やMT5ではOnTick関数に相当するもの)のコード全文を掲載しています。

テクニカル指標を取得する関数定義

「TA-Lib」というライブラリを用いて、テクニカル指標を計算する方法、最新の足における値を取得する方法についてのサンプルコードを掲載しています。ADM-EAで必要なテクニカル指標のみを掲載していますが、少し応用すれば他のテクニカル指標取得にも用意に拡張可能です。

学習済みモデルによる売買予測を行う関数定義

学習済みのLightGBMモデルを呼び出して、売買予測を行うためのサンプルコードを掲載しています。
モデル学習用の記事において学習して保存したモデルを呼び出す前提のコードになります。合わせてご覧ください。

ループ処理

以下の一連の処理をPythonでMT5にアクセスして行うためのサンプルコードを掲載しています。

  • 現在価格、時刻の取得

  • 機械学習モデルによる売買フラグの決定

  • ポジション情報を取得

  • エントリー注文

  • クローズ注文(利確)

  • クローズ注文(ロスカット)

  • タイムスリープ

ロジックについては、以下の内容を実装しています。(ADM-EAと同等のロジックに、機械学習による予測を加えたものです。)

  • テクニカル指標(DMI、MA、ATR)および機械学習による予測を用いて、実際にエントリーを行うかを判断します。

  • ATRを用いて、利確幅と損切り幅を決定します。

  • ポジションは買いまたは売りのどちらか1つしか持ちません。そのポジションが利確または損切りをするまで、次のポジションは持ちません。

  • 分解モンテカルロ法を用いて各トレードのロット数を調整します。

.ipynbファイルのダウンロード

本記事で解説しているの全ての処理をまとめた.ipynbファイル(Jupyter Notebookで実行可能なファイル形式)をダウンロード可能にしています。記事のコードのコピペで上手くいかない場合等にご活用ください。

Python-EAをチャート上で直接実行

MT5では、Pythonスクリプトを通常のMQL5プログラムと同様にチャート上で直接実行できる機能が存在します。
この記事の最後では、掲載しているコードを全て盛り込んだ.pyファイル(MT5のチャート上で直接実行可能なファイル形式)もダウンロード可能にしています。
.pyファイルの設置方法など具体的な方法は以下の記事で解説していますので、是非合わせてご覧ください。

注意点

  • 当記事で掲載しているコードはPythonの環境設定含め、必要な準備が整っている上での実行を想定しています。以下の記事では、よりシンプルなロジックのFX自動売買ツール(bot)を無料配布しています。こちらで稼働確認してみることをおすすめいたします。

  • 当記事の中に、LightGBMモデルを学習させるためのコードは掲載されておりません。学習したモデルが保存されていて、それを呼び出すことを前提としたサンプルコードが掲載されています。モデルの学習についてはモデル学習用の記事をご参照ください。

  • 記事執筆時点で稼働確認を行なっており、エラーが出ないことを確認しておりますが、その後の環境変化等で想定通りに稼働しない可能性はございます。動作保証等はいたしかねますのでご了承ください。

  • リアル口座にアクセスして取引を行うことも可能なコードになっておりますが、必ずデモ口座で事前に稼働確認をしていただくことを推奨いたします。

  • 当記事や他記事で解説しているロジック通りの動作を保証するものではございません。あくまでFX自動売買ツール開発のためのサンプルコードとしてご活用ください。

ここから先は

28,416字 / 2画像

¥ 2,000

よろしければサポートお願いします。いただいたサポートは今後の記事の執筆に活用させていただきます。