山本T

技術資料

システムの概要 

  1. MT5からTickデータを取得,指定した時間足ごとにリサンプリングし,csvファイルに保存.
    detaget.png
  2. csvファイルから時間足データを取得し,15個のインジケーターそれぞれを同時に最適化,最適なパラメータをそれぞれ保存.
    paraopt.png
  3. 全てのパラメータにおける最適な値をファイルから取得,そのパラメーターを使用し直交表に基づいた16個のルールについてバックテスト,そのときの評価指標を取得.
    直交表と評価指標を回帰分析しそれぞれのインジケーターの主効果を算出し,それらをもちいて2^15通りの組み合わせに対して評価の予測値を算出.
    全ての評価値を用いて最適なルールの組み合わせを選択する.
    ruleselect.png
  4. 最適なルールの組み合わせで実際に売買を行う.

動作を確認している環境 

以下の環境で,動作を確認している.

OS:Windows 10 Home(Version 20H2)
Python:Version 3.8.10

準備する 

MetaTrader 5 

「MetaTrader 5」(以下,「MT5」)は,外国為替市場(FX)などを取引するためのプラットフォームである.

ダウンロードとインストール 

【公式サイト】からインストーラをダウンロードし,インストールする.

Python 

「Python」は,インタープリタ型のプログラミング言語であり,ほかのプログラミング言語よりも,「ライブラリ」と呼ばれる拡張機能を簡単にダウンロード,インストールし,自身のプログラムに組みこめることが特徴である.

ダウンロードとインストール 

【公式サイト】から,適切なインストーラをダウンロードし,インストールする.

バージョンは,サポート期間中のものであればどれでもよいと思われるが,
この記事を執筆したときのバージョンは,前述のとおり「3.8.10」である.

くわしい手順は,【このページ】あたりを参考にするとよいだろう.

正しくインストールされていれば,コマンドプロンプトで「py -V」とコマンドを実行すると,
インストールされているバージョンが表示されるはずである.

Pythonのライブラリ 

以下は,プログラムで使用しているPythonのライブラリである.

みどりで書かれたライブラリは,コマンドプロンプトで「py -m pip install [パッケージ名]」を実行すると,Pythonに標準で付属しているソフトウェア「pip」が,便利なことに,インターネットから勝手にダウンロードしてインストールしてくれる.

あかで書かれたライブラリ(talib)は,「pip」でもインターネットから拾ってこられないため*1,手動でダウンロードする必要がある.

TA-Lib(talib)のダウンロードとインストール 

【公式サイト】から,適切なものをダウンロードする.


現在ではURL等変更があるため、以下のサイトを参考に行うことを推奨する(追記2024/11/14山本T) https://qiita.com/heroshi/items/9ecd4f9eabe4a0e82ef6


例外もあるが,基本的には以下のようなファイル名になっている.

TA_Lib-x.x.x-cpyy-cpyy-winz.whl

x.x.x:TA-Libのバージョン(「0.4.21」など)
yy:Pythonのバージョン(たとえば,「3.8.10」であれば「38」)
z:Windows OSのビット数(64ビットであれば「_amd64」,32ビットであれば「32」)

Pythonのバージョン,およびWindows OSのビット数は,コマンドプロンプトで,
それぞれ「py -V」,「echo %PROCESSOR_ARCHITECTURE%」を実行することで,確認できる.

ダウンロードしたら,コマンドプロンプトで,
py -m pip install .\Downloads\TA_Lib-x.x.x-cpyy-cpyy-winz.whl
を実行する.正しくインストールされれば,「Successfully installed~~~」と表示される.

プログラム 

以下のフォルダに,卒論に記載されているシステムのプログラムなどがある.

――――――――――

――――――――――

ダウンロードののち,解凍して,「C:\Users\[ユーザ名]\」など,
分かりやすいところに置くとよいだろう.

フォルダのなかは,以下のようになっている.


プログラムを修正する 

上記であかで書かれているプログラムは,
「in_dat」内や「out_dat」内のcsvファイルを書きこんだり,読みこんだりするときに,絶対パスを使ってあるが,
そのままでは,「C:/Users/xi/MT5/...」になっているはずである.

その「C:/Users/xi/」のところを,すべてのプログラムにおいて,すべての箇所で,
上記でフォルダ「MT5」を置いた絶対パスに修正する必要がある.

「Visual Studio Code」では,特定の文字列をすべて別の文字列に
置換する機能があるので,それを利用しよう.

MT5の準備 

以下のファイルをダウンロードする

ただし,Trade.csvは以下の手順で保存する.
「右クリック」→「名前を付けてリンク先を保存」
ファイル名は変えずにそのまま保存する.
各ファイルの配置を以下に示す.
MQL5→includeにinitmq4.mqh, stdlib.mqh, stderror.mqhの三つを入れる.

MQL5→scriptsにTradeAI.mq5を入れる.

MQL5→FilesにTrade.csvを入れる.

システムを実行する 

1台のPCで実行する 

common.csvを確認する 

common.csv」は,システムの動作を設定するものである.
そのままでは,以下のようになっているはずである.

common.jpg

以下の項目の値が,次のようになっているか確認する.異なっているときは,変更する.

・「use_data」:「short」または「long
インジケータを計算する期間を選択する

・「data_short」/「data_long」:「10S」,「1T」など
「use_data」が「short」のときは,「data_short」の値を,
「long」のときは,「data_long」の値を期間として,インジケータの計算を行う

・「indi_number」:「7」または「15
計算を行うインジケータの数
インジケータの計算には,ある程度の処理能力を必要とする.
「15」個は,相当のマシンパワーを必要とするので,基本的には「7」個でよい.

・「trend_frag」:「2

1台のPCで実行するときは,上記の画像のままでよい.

各プログラムを実行する 

各プログラムを,以下のとおり,順番に実行する.

――――――――――――――

1. tick_data.py

2. 各インジケータを計算するプログラム(順不同)

 「indi_number」が「7」のとき

 ・indi_EMA.py
 ・indi_BBAND.py
 ・indi_MACD.py
 ・indi_RSI.py
 ・indi_STOCH.py
 ・indi_DMI.py
 ・indi_ULTOSC.py

 「indi_number」が「15」のとき

 ・indi_AROON.py
 ・indi_BBAND.py
 ・indi_CCI.py
 ・indi_DMI.py
 ・indi_EMA.py
 ・indi_MACD.py
 ・indi_MFI.py
 ・indi_MOM.py
 ・indi_ROC.py
 ・indi_RSI.py
 ・indi_STOCH.py
 ・indi_TRIX.py
 ・indi_TSF.py
 ・indi_ULTOSC.py
 ・indi_WillR.py

3. rule_generator.py

4. auto_trade.py

――――――――――――――

2台のPCで実行する 

このシステムでは,PCを2台使い,インジケータの計算に用いる期間を,
一方で長期,もう一方で短期にし,それによって出力されるcsvファイルを,LANを介して共有することで,
長期と短期を組みあわせた取引を行うことができる.

短期側:ファイルをLAN上で公開する 

まず,短期側と長期側が,どちらとも同じルータに接続されていることを確認する.

「エクスプローラ」を開き,フォルダ「MT5」で右クリックし,
アクセスを許可する」から「特定のユーザ...」に進む.

01.jpg

「共有する相手」から「Everyone」を選択し,「追加」する.

02.jpg

さらに,「Everyone」の「アクセス許可レベル」を「読み取り/書き込み」にし,
共有」する.

02-1.jpg

「ユーザのフォルダーは共有されています.」と表示されたら,完了である.
ここで,以下の画像で,オレンジの枠で囲われたパスは,のちに使うため,
転記しておくとよいだろう.

03.jpg


長期側:共有されたフォルダにアクセスできるか確認する 

「Windows」+「R」を押し,
「ファイル名を指定して実行」で,上記で転記したパスを入力する.

04.jpg

「ネットワーク資格情報の入力」を求められるため,
通常どおり,短期側でデスクトップにログインするときの,ユーザ名パスワードを入力する.

05.jpg

エクスプローラで,短期側に保存されているフォルダ「MT5」が,
長期側から閲覧できれば,完了である.

06.jpg


長期側:プログラムを修正する 

以下のプログラムの,以下の行にある絶対パスのうち,
「MT5」以上を,短期側の絶対パスに変更する.

indi_EMA.py25行目)
indi_BBAND.py26行目)
indi_MACD.py25行目)
indi_RSI.py25行目)
indi_STOCH.py25行目)
indi_DMI.py25行目)
indi_ULTOSC.py25行目)
rule_generator.py37行目)
auto_trade.py264344行目)

たとえば,以下の画像のように変更する.

07.jpg


長期側common.csvを確認する 

common.csvのうち,以下の項目の値が,
次のようになっているか確認する.異なっているときは,変更する.

・「use_data」:「long
・「data_short」:「10S
・「data_long」:「1T
・「indi_number」:「7
・「trend_frag」:「1

短期側common.csvを変更する 

common.csvのうち,以下の項目の値が,
次のようになっているか確認する.異なっているときは,変更する.

・「use_data」:「short
・「data_short」:「10S
・「data_long」:「1T
・「indi_number」:「7
・「trend_frag」:「0

短期側長期側:各プログラムを実行する 

各プログラムを,短期側長期側それぞれにおいて,
以下のとおり,順番に実行する.

――――――――――――――

1. tick_data.py

2. 各インジケータを計算するプログラム(順不同)

 「indi_number」が「7」のとき

 ・indi_EMA.py
 ・indi_BBAND.py
 ・indi_MACD.py
 ・indi_RSI.py
 ・indi_STOCH.py
 ・indi_DMI.py
 ・indi_ULTOSC.py

 「indi_number」が「15」のとき

 ・indi_AROON.py
 ・indi_BBAND.py
 ・indi_CCI.py
 ・indi_DMI.py
 ・indi_EMA.py
 ・indi_MACD.py
 ・indi_MFI.py
 ・indi_MOM.py
 ・indi_ROC.py
 ・indi_RSI.py
 ・indi_STOCH.py
 ・indi_TRIX.py
 ・indi_TSF.py
 ・indi_ULTOSC.py
 ・indi_WillR.py

3. rule_generator.py

4. auto_trade.py

――――――――――――――


*1 厳密にいうと,「pip」でダウンロードできるライブラリは,「Python Package Index(PyPI)」に登録されているものだけであり,「talib」はそこに登録されていない.

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS