#author("2021-01-18T08:03:04+00:00","","")
#author("2021-01-18T08:26:35+00:00","","")
[[技術資料]]~

*目次 [#e890b3d5]

#CONTENTS

**[[売買ルールの基礎知識]] [#o4c5ab32]

**1. 目標 [#i67428c5]
FXのTick情報を収集し、データを用いてテクニカル分析を行い、オンラインのデモトレードで利益や損失を確定していく。

**2. 【Windows】pythonのパッケージとMT5のインストール[#kbde4fb5]
-MacはMT5が対応していないため、Windowsで作業を行う。~
(以下のサイトのようにしてMacでもできないことはないが、Windowsがあるならそっちで始めた方が早い)~
参考サイト[[Mac OSでのプラットフォームのインストール:https://www.metatrader5.com/ja/terminal/help/start_advanced/install_mac]]

以下のサイトを参考にして行った。~
参考サイト[[第九回 MT5とPythonを連携してみよう!:https://metaquotes.co.jp/2019/07/01/blog09/]]

pythonは予めインストールされているものとする。~
また、プログラムの見やすさや、実行のしやすさにおいて、visual stdio codeを使ってpythonを書くのがおすすめ。~

(うまくPythonがインストールできない事例があったのでインストールの流れ書いておきます)~
リンク先確認:[[Pythonのインストール方法(Windows)]]~

ubuntuの場合,pipが初期でインストールされていない?からインストールしなきゃいけない.~
 sudo apt install python3-pip
でインストール.

Win10ではコマンドプロンプトを起動し、必要なライブラリをインストールする。
インストールの仕方はコマンドプロンプトで~

 pip install MetaTrader5

のように入力してインストールする。

今回インストールが必要なのは、
-MetaTrader5
-pytz
-pandas
-numpy
-(mplfinance)

(インジケータの計算に利用するTA-Libはインストールの仕方が特殊なため、後述する)

その後以下のサイトからMT5をインストールする。~
※ここでのMT5は前述したpip install MetaTrader5のMT5とは名前が同じだけで別物。

下記のリンクでインストールするものはアプリ~
[[MetaTrader 5をダウンロードしましょう:https://www.metatrader5.com/ja/download]]~

MT5での最低取引量は0.01lot(10000通貨)なので残高は大体10万以上にしておくべき

MT5の左上のファイル→デモ口座を開くから残高を増やすことができる

**3. TA-Libのインストール [#hde192be]
参考サイト[[Windows環境のPythonでTA-Libを使えるようにする:http://shinyaowari.com/archives/1831]]

+環境の確認
まず、使っているパソコンが何ビットなのを確認する。~
 「スタート」→「コントロールパネル」→「システムとセキュリティ」→「システム」
ここに書いてある「システムの種類」が32ビットなのか64ビットなのかを覚えておく。~
次に、使っているpythonのバージョンを確認する。コマンドプロンプトを呼び出し、~
 python -V
と入力するとpythonのバージョンが確認できる。~
~
+ダウンロード
コンパイル済みのTA-Libをダウンロードします。~
[[Unofficial Windows Binaries for Python Extension Packages:https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib]]~
上記のURLの中に「TA-Lib」があるので探す。
TA-Libにもいろんなバージョンがあり、その中で自分の環境に合ったものをダウンロードする。PCは64ビット、pythonのバージョンは3.6.4の場合、~
 TA_Lib‑0.4.17‑cp36‑cp36m‑win_amd64.whl
これをダウンロードする。「win_amd64」がパソコンのビット数を指し、「cp36」がpythonのバージョンを指している。ここが自分の環境に合ったものをダウンロードする。~
その後、ダウンロードファイルを、さきほどコマンドプロンプトを開いた際に表示されたフォルダに保存する。例えば、C:\Users\user>と出たなら、user直下に保存する~
~
+インストール
ダウンロードしたので、インストールする。コマンドプロンプトを呼び出し、~
 python -m pip install TA_Lib‑0.4.17‑cp36‑cp36m‑win_amd64.whl
と打ち込む。(TA_Lib以下を自分がインストールしたものに書き換えるのを忘れずに)~
 Successfully installed ~~~
と表示されたら完了。

**4. MT5で自動取引を行う~準備~ [#ma1025ac]


注意点として、口座番号は上記で作ったXMの口座IDである。

今回使うファイルは5つあり、一つ目がpythonのファイルで、残りはMT5用のファイルである。

[pythonのファイル]~
#ref(demo.py)

[MT5のファイル]
#ref(initmql4.mqh)
#ref(stdlib.mqh)
#ref(stderror.mqh)
#ref(Trade.csv)
#ref(TradeAI.mq5)
#ref(MQL5.zip)

MT5用のファイルの置き場所を下記に示す

まず、MT5を起動し、左上のファイルからデータフォルダを開くを押す。
#ref(1.png,,30%)
そのあと、開いたフォルダの

MQL5→includeにinitmq4.mqh、stdlib.mqh、stderror.mqhの三つを入れる。

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

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

demo.pyの場所は任意で大丈夫。

これでファイルの配置は終了。

次に、TradeAI.mq5のコンパイルを行う。

以下の画像に従う。
#ref(2.png,,30%)
#ref(3.png,,30%)

これでファイルのコンパイルは終了

次にUSDJPYのチャートを表示する
#ref(11.png,,30%)
次にTradeAIをUSDJPYに入れる。

※もし、ウィンドウが出てきたらで自動売買の許可にチェックを入れる。
#ref(12.png,,30%)

その後、上のタブからツール→オプションで下記の画像の箇所にチェックを入れ、OKを押す。
#ref(5.png,,30%)

これでMT5の設定は終わり。

次にpythonのdemo.pyをテキストエディタなどで開き、Trade.csvのディレクトリを書き換える。

下記の画像の場所を自分に合ったディレクトリに変更する。~
#ref(pathchange2.png,,30%)

**5. MT5で自動取引を行う~プログラムの説明~ [#ma1025ac]

demo.pyのコード内でできる限りコメントアウトしてるので、そこを参考にして欲しい。

**6. MT5で自動取引を行う~実行~ [#ma1025ac]

MT5を起動した状態でdemo.pyをコマンドプロンプトから実行することで、自動売買が開始される。

上記写真で用いている、Visual Studio Codeで実行する場合右上の緑△ボタン押すことで自動でターミナルが起動され、プログラムを実行できる。

売買の時の音が気になる場合は、MT5画面上のツールタブ→オプション→イベントの音声アラートを有効にするのチェックを外す。

実際に動作している状態の画像を下記に載せる。
#ref(7.png,,30%)
#ref(8.png,,30%)
Ctrl+T上記写真の赤線で囲われた取引履歴などを見るツールボックスが表示される 
**7. MT5で自動取引を行う~結果~ [#ma1025ac]
*** 【単純移動平均ゴールデンクロスの実行結果】 [#b993d560]

#ref(9.png,,30%)
2020/1/8の1:00~2020/1/8の16:00の間動かした結果
525.86円の損失だった。

#ref(10.png,,30%)
また、短期と長期の間隔を20秒、50秒から100秒、200秒に変更し同じ期間自動売買を行った結果、損失を421.5円減らすことができた。

**8. 2020/11/04追加分 [#j4e6a7d5]
-取得した分足データからローソク足グラフを作成
#ref(demo2.py)
#ref(chart.py)
#ref(tickdeta.csv)
demo2.pyとchart.pyを別のターミナルで同時に実行する。~
demo2.pyはdemo.pyとほぼ変わらないが、分足データにリサンプルした後にtickdeta.csvに保存していく部分を追加。~
66行目の~
chart.pyでtickdeta.pyから分足データを読み込み描画する。~
(描画をリアルタイムで更新するためにはpause関数で一定時間プログラムを止めなくてはならず、その間tickを取得する部分も停止してしまうので別々のプログラムにした)

-インジケーターのパラメーター最適化のためのバックテスト
#ref(backtest.py)
#ref(USDJPYM1.csv)
インジケーターのパラメーター(SMAなら短期と長期の移動平均線の期間)がどの値の時に一番利益が出るのかを見つけるためのシステム。~
pythonのライブラリにバックテストに使えるbacktesting.pyがあるのでそれを利用する。~
 pip install backtesting
上記のコードでインストールしておく。~
自分はjupyter notebook上で動かしていたのでその方法で説明する。~

--jupyter notebookのインストール~
参考サイト[[Jupyter Notebookのインストール:https://www.javadrive.jp/python/jupyter-notebook/index1.html#section1]]~
pipでインストールする。~
 pip install notebook
インストールが完了したらターミナル上で
 jupyter notebook
で起動する。(終了する時は[Ctrl]+[C])~

*大谷卒業研究 [#u1b391ed]
以下はシステムの流れである.
+MT5からTickデータを取得,指定した時間足ごとにリサンプリングし,csvファイルに保存.
#ref(dataget.png,,75%)
+csvファイルから時間足データを取得し,15個のインジケーターそれぞれを同時に最適化,最適なパラメータをそれぞれ保存.
#ref(paraopt.png,,75%)
+全てのパラメータにおける最適な値をファイルから取得,そのパラメーターを使用し直交表に基づいた16個のルールについてバックテスト,そのときの評価指標を取得.~
直交表と評価指標を回帰分析しそれぞれのインジケーターの主効果を算出し,それらをもちいて2^15通りの組み合わせに対して評価の予測値を算出.~
全ての評価値を用いて最適なルールの組み合わせを選択する.
#ref(ruleselect.png,,75%)
+最適なルールの組み合わせで実際に売買を行う.

以下は全てのプログラムが入ったファイル.
#ref(MT5.zip,,75%)

**1.データ取得 [#jeacb785]
PythonやMT5等のインストール方法は上記のゼミ引き継ぎ内容と同じ.~
Pythonのライブラリは必要なものは少し変わっているため,自分がプログラム内で使用しているもの全てをを以下に示す.
-MetaTrader5
-datetime
-time
-pandas
-numpy
-mplfinance
-talib
-backtesting
-re
-warnings
-scikit-learn

Python標準搭載のものもあるが,インストールが必要なものもあるので各自インストールする.~

以下プログラムの説明
----
コードの細かい説明はコード内にコメントしてあるの見てください.~
~
tickdata.pyの流れは以下のようになっている.
+MT5からTickデータを取得し,Tickデータに付随している時間の中でsecが変わったらデータフレームにticks_frameに保存.
+指定秒足(10S,30S,1M,5M,30M,4H)でリサンプリングしticks_frame2〜7へ保存,それぞれの新しい行が増えたら最後から1つ前の行を別のデータフレームtick_10s〜4hに保存.
+tick_10s〜4hをcsvファイルに保存(インジケータの数だけ同じデータをcsvファイルの名前を変えて保存).

tickdata.pyはバックグラウンドで常に動かしておき,データを貯め続ける.

**2.パラメータの最適化 [#lcddfb22]
コードの細かい説明はコード内にコメントしてあるの見てください.~
~
各インジケーターの最適化プログラム(indi_@@@.py)の流れは以下のようになっている.
+それぞれのインジケーターの名前が入ったcsvファイル(OHLCV_10S_@@@.csv)からOHLCVデータを取得
+Backtesting.pyをもちいてそれぞれのインジケーターの計算に必要なパラメータ(期間等)と,tpとslの幅に利用するATRの計算に必要な期間・適用時の倍率を最適化する.
+最適化したときのパラメータの結果をcsvファイル(para_@@@.csv)に保存.

各indi_@@@.pyのプログラムはバックグラウンドで常に動かしておき,最適なパラメータを更新し続ける.

**3.最適なルール選択 [#e0e6c41f]
コードの細かい説明はコード内にコメントしてあるの見てください.~
~
Backtest_rule.pyの流れは以下のようになっている.
+それぞれのインジケーターの最適なパラメータの結果をcsvファイル(para_@@@.csv)から,OHLCVデータをOHLCV_10S_RULE.csvから取得.
+L15直交表をもちいて16通りのルールを作成(1なら使用,0なら使用しない),それぞれのインジケーターの計算には先ほど取得した最適なパラメーターを使用.
+L15直交表をもちいて16通りのルールを作成(1なら使用,0なら使用しない),それぞれのインジケーターの計算には先ほど取得した最適なパラメータを使用.
#ref(L15.png,,50%)
+16個のルールでバックテストを行い,その結果得られた評価指標の値をそれぞれデータフレームに保存.
+直交表と評価指標のデータフレームで回帰分析を行い,インジケーターごとの主効果を算出.
+2^15個全ての組み合わせの直交表を作成,その直交表と主効果をまとめたデータフレームを使って全ての組み合わせにおける評価指標の予測値を算出.
+最適な組み合わせを選択し,そのときのデータフレームのindex(15桁の2進数を10進数にした値と同じ)の値をcsvファイルに保存.
+最適な組み合わせを選択し,そのときのデータフレームのindex(15桁の2進数を10進数にした値と同じ)の値をcsvファイル(Strategy.csv)に保存.

**4.トレード [#m766b80d]
コードの細かい説明はコード内にコメントしてあるの見てください.~
~
Trade.pyの流れは以下のようになっている.
+それぞれのインジケーターの最適なパラメータの結果をcsvファイル(para_@@@.csv)から,OHLCVデータをOHLCV_10S_TRADE.csvから,最適な組み合わせの値をStrategy.csvから取得.
+最適なパラメータの結果をもちいてそれぞれのインジケーターの計算を行う.
+取得した最適な組み合わせの値(10進数)を15桁の2進数に変換し,それぞれ一つずつが順番に入ったデータフレームruleを作成.
+rule[0]〜rule[14]それぞれの中身が1のとき,それに対応したインジケーターのルールで売買を行う.



トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS