由利恵?
#八十住さん
FXのTick情報を収集し、データを用いてテクニカル分析を行い、オンラインのデモトレードで利益や損失を確定していく。
プログラムの見やすさや、実行のしやすさにおいて、visual stdio codeを使ってpythonを書くのがおすすめ。
【Mac】
Python入門|Macにダウンロード・インストールする基礎知識
Visual Studio CodeでMacにPython開発環境を整える
【Windows】
(うまくPythonがインストールできない事例があったのでインストールの流れ書いておきます)
リンク先確認:Pythonのインストール方法(Windows)
ubuntuの場合,pipが初期でインストールされていない?からインストールしなきゃいけない.
sudo apt install python3-pip
でインストール.
Win10ではコマンドプロンプトを起動し、必要なライブラリをインストールする。
インストールの仕方はコマンドプロンプトで
pip install MetaTrader5
のように入力してインストールする。
今回インストールが必要なのは、
(インジケータの計算に利用するTA-Libはインストールの仕方が特殊なため、後述する)
以下のサイトからMT5をインストールする。
※ここでのMT5は前述したpip install MetaTrader5のMT5とは名前が同じだけで別物。
下記のリンクでインストールするものはアプリ
MetaTrader 5をダウンロードしましょう
PythonとMT5を連携させる
PythonとMT5を連携する方法を現役エンジニアが解説【初心者向け】
MT5での最低取引量は0.01lot(10000通貨)なので残高は大体10万以上にしておくべき
MT5の左上のファイル→デモ口座を開くから残高を増やすことができる
Windows環境のPythonでTA-Libを使えるようにする
「スタート」→「コントロールパネル」→「システムとセキュリティ」→「システム」ここに書いてある「システムの種類」が32ビットなのか64ビットなのかを覚えておく。
python -Vと入力するとpythonのバージョンが確認できる。
TA_Lib‑0.4.17‑cp36‑cp36m‑win_amd64.whlこれをダウンロードする。「win_amd64」がパソコンのビット数を指し、「cp36」がpythonのバージョンを指している。ここが自分の環境に合ったものをダウンロードする。
python -m pip install TA_Lib‑0.4.17‑cp36‑cp36m‑win_amd64.whlと打ち込む。(TA_Lib以下を自分がインストールしたものに書き換えるのを忘れずに)
Successfully installed ~~~と表示されたら完了。
注意点として、口座番号は上記で作ったXMの口座IDである。
今回使うファイルは5つあり、一つ目がpythonのファイルで、残りはMT5用のファイルである。
[pythonのファイル]
[MT5のファイル]
MT5用のファイルの置き場所を下記に示す
まず、MT5を起動し、左上のファイルからデータフォルダを開くを押す。
そのあと、開いたフォルダの
MQL5→includeにinitmq4.mqh、stdlib.mqh、stderror.mqhの三つを入れる。
MQL5→scriptsにTradeAI.mq5を入れる。
MQL5→FilesにTrade.csvを入れる。
demo.pyの場所は任意で大丈夫。
これでファイルの配置は終了。
次に、TradeAI.mq5のコンパイルを行う。
以下の画像のものを立ち上げる。
ナビゲーターのscriptsからTradeAI.mql5を開く。
また、修正が2か所あるため以下に示す。
①17行目から25行目までの「extern」を消す。
②402行目と420行目の{0}の中の0を消す。
以下の画像のようになればコンパイルを行う。
これでファイルのコンパイルは終了
次にUSDJPYのチャートを表示する
次にTradeAIをUSDJPYに入れる。
※もし、ウィンドウが出てきたらで自動売買の許可にチェックを入れる。
その後、上のタブからツール→オプションで下記の画像の箇所にチェックを入れ、OKを押す。
これでMT5の設定は終わり。
次にpythonのdemo.pyをテキストエディタなどで開き、Trade.csvのディレクトリを書き換える。
下記の画像の場所を自分に合ったディレクトリに変更する。
demo.pyのコード内でできる限りコメントアウトしてるので、そこを参考にして欲しい。
MT5を起動した状態でdemo.pyをコマンドプロンプトから実行することで、自動売買が開始される。
上記写真で用いている、Visual Studio Codeで実行する場合右上の緑△ボタン押すことで自動でターミナルが起動され、プログラムを実行できる。
売買の時の音が気になる場合は、MT5画面上のツールタブ→オプション→イベントの音声アラートを有効にするのチェックを外す。
実際に動作している状態の画像を下記に載せる。
Ctrl+T上記写真の赤線で囲われた取引履歴などを見るツールボックスが表示される。
また、MT5を閉じると新しいウィンドウで立ち上がるので、
を参考にウィンドウの保存を行っておく。
チャートは表示されるがナビゲーターなどが立ち上げるたびに消える時は、「全画面表示」を消す。
#ref(): File not found: "9.png" at page "動的,時間的データ利活用(FX長短期)"
2020/1/8の1:00~2020/1/8の16:00の間動かした結果 525.86円の損失だった。
#ref(): File not found: "10.png" at page "動的,時間的データ利活用(FX長短期)"
また、短期と長期の間隔を20秒、50秒から100秒、200秒に変更し同じ期間自動売買を行った結果、損失を421.5円減らすことができた。
#ref(): File not found: "demo2.py" at page "動的,時間的データ利活用(FX長短期)"
#ref(): File not found: "chart.py" at page "動的,時間的データ利活用(FX長短期)"
#ref(): File not found: "tickdeta.csv" at page "動的,時間的データ利活用(FX長短期)"
demo2.pyとchart.pyを別のターミナルで同時に実行する。#ref(): File not found: "backtest.py" at page "動的,時間的データ利活用(FX長短期)"
#ref(): File not found: "USDJPYM1.csv" at page "動的,時間的データ利活用(FX長短期)"
インジケーターのパラメーター(SMAなら短期と長期の移動平均線の期間)がどの値の時に一番利益が出るのかを見つけるためのシステム。pip install backtesting上記のコードでインストールしておく。
pip install notebookインストールが完了したらターミナル上で
jupyter notebookで起動する。(終了する時は[Ctrl]+[C])
以下はシステムの流れである.
#ref(): File not found: "dataget.png" at page "動的,時間的データ利活用(FX長短期)"
#ref(): File not found: "paraopt.png" at page "動的,時間的データ利活用(FX長短期)"
#ref(): File not found: "ruleselect.png" at page "動的,時間的データ利活用(FX長短期)"
以下は全てのプログラムが入ったファイル.
#ref(): File not found: "MT5.zip" at page "動的,時間的データ利活用(FX長短期)"
PythonやMT5等のインストール方法は上記のゼミ引き継ぎ内容と同じ.
Pythonのライブラリは必要なものは少し変わっているため,自分がプログラム内で使用しているもの全てをを以下に示す.
Python標準搭載のものもあるが,インストールが必要なものもあるので各自インストールする.
以下プログラムの説明
コードの細かい説明はコード内にコメントしてあるの見てください.
tickdata.pyの流れは以下のようになっている.
tickdata.pyはバックグラウンドで常に動かしておき,データを貯め続ける.
コードの細かい説明はコード内にコメントしてあるの見てください.
各インジケーターの最適化プログラム(indi_@@@.py)の流れは以下のようになっている.
各indi_@@@.pyのプログラムはバックグラウンドで常に動かしておき,最適なパラメータを更新し続ける.
コードの細かい説明はコード内にコメントしてあるの見てください.
Backtest_rule.pyの流れは以下のようになっている.
#ref(): File not found: "L15.png" at page "動的,時間的データ利活用(FX長短期)"
コードの細かい説明はコード内にコメントしてあるの見てください.
Trade.pyの流れは以下のようになっている.
#ref(): File not found: "detaget.png" at page "動的,時間的データ利活用(FX長短期)"
#ref(): File not found: "paraopt.png" at page "動的,時間的データ利活用(FX長短期)"
#ref(): File not found: "ruleselect.png" at page "動的,時間的データ利活用(FX長短期)"
以下の環境で,動作を確認している.
OS:Windows 10 Home(Version 20H2)
Python:Version 3.8.10
「MetaTrader 5」(以下,「MT5」)は,外国為替市場(FX)などを取引するためのプラットフォームである.
【公式サイト】からインストーラをダウンロードし,インストールする.
「Python」は,インタープリタ型のプログラミング言語であり,ほかのプログラミング言語よりも,「ライブラリ」と呼ばれる拡張機能を簡単にダウンロード,インストールし,自身のプログラムに組みこめることが特徴である.
【公式サイト】から,適切なインストーラをダウンロードし,インストールする.
バージョンは,サポート期間中のものであればどれでもよいと思われるが,
この記事を執筆したときのバージョンは,前述のとおり「3.8.10」である.
くわしい手順は,【このページ】あたりを参考にするとよいだろう.
正しくインストールされていれば,コマンドプロンプトで「py -V」とコマンドを実行すると,
インストールされているバージョンが表示されるはずである.
以下は,プログラムで使用しているPythonのライブラリである.
みどりで書かれたライブラリは,コマンドプロンプトで「py -m pip install [パッケージ名]」を実行すると,Pythonに標準で付属しているソフトウェア「pip」が,便利なことに,インターネットから勝手にダウンロードしてインストールしてくれる.
あかで書かれたライブラリ(talib)は,「pip」でもインターネットから拾ってこられないため*1,手動でダウンロードする必要がある.
【公式サイト】から,適切なものをダウンロードする.
例外もあるが,基本的には以下のようなファイル名になっている.
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~~~」と表示される.
以下のフォルダに,卒論に記載されているシステムのプログラムなどがある.
――――――――――
#ref(): File not found: "MT5.zip" at page "動的,時間的データ利活用(FX長短期)"
――――――――――
ダウンロードののち,解凍して,「C:\Users\[ユーザ名]\」など,
分かりやすいところに置くとよいだろう.
フォルダのなかは,以下のようになっている.
上記であかで書かれているプログラムは,
「in_dat」内や「out_dat」内のcsvファイルを書きこんだり,読みこんだりするときに,絶対パスを使ってあるが,
そのままでは,「C:/Users/xi/MT5/...」になっているはずである.
その「C:/Users/xi/」のところを,すべてのプログラムにおいて,すべての箇所で,
上記でフォルダ「MT5」を置いた絶対パスに修正する必要がある.
「Visual Studio Code」では,特定の文字列をすべて別の文字列に
置換する機能があるので,それを利用しよう.
以下のファイルをダウンロードする
ただし,Trade.csvは以下の手順で保存する.
「右クリック」→「名前を付けてリンク先を保存」
ファイル名は変えずにそのまま保存する.
各ファイルの配置を以下に示す.
MQL5→includeにinitmq4.mqh, stdlib.mqh, stderror.mqhの三つを入れる.
MQL5→scriptsにTradeAI.mq5を入れる.
MQL5→FilesにTrade.csvを入れる.
「common.csv」は,システムの動作を設定するものである.
そのままでは,以下のようになっているはずである.
#ref(): File not found: "common.jpg" at page "動的,時間的データ利活用(FX長短期)"
以下の項目の値が,次のようになっているか確認する.異なっているときは,変更する.
・「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
――――――――――――――
このシステムでは,PCを2台使い,インジケータの計算に用いる期間を,
一方で長期,もう一方で短期にし,それによって出力されるcsvファイルを,LANを介して共有することで,
長期と短期を組みあわせた取引を行うことができる.
まず,短期側と長期側が,どちらとも同じルータに接続されていることを確認する.
「エクスプローラ」を開き,フォルダ「MT5」で右クリックし,
「アクセスを許可する」から「特定のユーザ...」に進む.
#ref(): File not found: "01.jpg" at page "動的,時間的データ利活用(FX長短期)"
「共有する相手」から「Everyone」を選択し,「追加」する.
#ref(): File not found: "02.jpg" at page "動的,時間的データ利活用(FX長短期)"
さらに,「Everyone」の「アクセス許可レベル」を「読み取り/書き込み」にし,
「共有」する.
#ref(): File not found: "02-1.jpg" at page "動的,時間的データ利活用(FX長短期)"
「ユーザのフォルダーは共有されています.」と表示されたら,完了である.
ここで,以下の画像で,オレンジの枠で囲われたパスは,のちに使うため,
転記しておくとよいだろう.
#ref(): File not found: "03.jpg" at page "動的,時間的データ利活用(FX長短期)"
「Windows」+「R」を押し,
「ファイル名を指定して実行」で,上記で転記したパスを入力する.
#ref(): File not found: "04.jpg" at page "動的,時間的データ利活用(FX長短期)"
「ネットワーク資格情報の入力」を求められるため,
通常どおり,短期側でデスクトップにログインするときの,ユーザ名とパスワードを入力する.
#ref(): File not found: "05.jpg" at page "動的,時間的データ利活用(FX長短期)"
エクスプローラで,短期側に保存されているフォルダ「MT5」が,
長期側から閲覧できれば,完了である.
#ref(): File not found: "06.jpg" at page "動的,時間的データ利活用(FX長短期)"
以下のプログラムの,以下の行にある絶対パスのうち,
「MT5」以上を,短期側の絶対パスに変更する.
・indi_EMA.py(25行目)
・indi_BBAND.py(26行目)
・indi_MACD.py(25行目)
・indi_RSI.py(25行目)
・indi_STOCH.py(25行目)
・indi_DMI.py(25行目)
・indi_ULTOSC.py(25行目)
・rule_generator.py(37行目)
・auto_trade.py(26,43,44行目)
たとえば,以下の画像のように変更する.
#ref(): File not found: "07.jpg" at page "動的,時間的データ利活用(FX長短期)"
common.csvのうち,以下の項目の値が,
次のようになっているか確認する.異なっているときは,変更する.
・「use_data」:「long」
・「data_short」:「10S」
・「data_long」:「1T」
・「indi_number」:「7」
・「trend_frag」:「1」
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
――――――――――――――