#author("2022-11-24T04:12:59+00:00","","") #author("2022-11-24T05:07:12+00:00","","") [[専門ゼミ 榊原]] *目次 [#e890b3d5] #CONTENTS *windows [#od25cfe1] **実行環境 [#y83a28e2] -OS:Windows10 64bit バージョン1803 (OS ビルド 17134.165) **このページでできるようになること [#k785c6e9] -C言語でデータ分析をし、それに基づいてMT4で取引 -Windows10上でのUbuntuの利用(WSL) -Windows10上でのX windowの使用 -Windows10のコマンドプロンプト上でのC言語プログラムコンパイル ** MT4のインストール(必須) [#l13dd3af] 通常版のMT4をダウンロードできる場所が無くなったので、~ 企業が提供しているMT4を使う。(今回はIFCMarketsのMT4とデモ口座を使う)~ [[https://www.oanda.jp/]]~ 上記のURLから、MT4をダウンロードしインストールする。~ ダウンロードからインストール完了までの流れは以下の図の通り。 #ref(mt4-3.png,,20%) &size(50){ ↓}; #ref(mt4-1.png,,50%) &size(50){ ↓}; #ref(mt4-2.png,,50%) &size(50){ ↓}; #ref(mt4-4.png,,50%) **[[売買ルールの基礎知識]] [#o4c5ab32] **1. 目標 [#i67428c5] FXのTick情報を収集し、データを用いてテクニカル分析を行い、オンラインのデモトレードで利益や損失を確定していく。 ** Windows Subsystem for Linuxのインストール(必須)[#nc31b632] ここでは、Windows10内で、WSLを用いて、Ubuntuを使う方法を述べる。~ まず、Windows側でLinux Subsystemを有効化する必要がある。~ スタートボタンを右クリックして、アプリと機能をクリックする。~ #ref(wsl-1.png,,50%) &size(50){ ↓}; #ref(wsl-2.png,,50%) さらに、右上にあるプログラムと機能をクリックする。~ #ref(wsl-3.png,,50%) 左側の一覧から、Windowsの機能の有効化または無効化をクリックする。~ #ref(wsl-4.png,,50%) Windows Subsystem for Linuxを探し、チェックを入れ、OKをクリックする。~ #ref(wsl-5.png,,50%) インストールが始まるので終わるまで待つ。終わったら再起動する。 #ref(wsl-6.png,,50%) &size(50){ ↓}; #ref(wsl-7.png,,50%) これで、WSLを使うことができるようになるが、肝心のOSが入っていない。~ Microsoft Storeを起動し、今回は、Ubuntuを使いたいので、右上の検索窓でUbuntuと検索し、enter(return)。~ #ref(wsl-8.png,,25%) &size(50){ ↓}; #ref(wsl-9.png,,25%) そしてダウンロードしたいバージョンのUbuntuをクリックし、入手する。~ #ref(wsl-10.png,,25%) &size(50){ ↓}; #ref(wsl-11.png,,25%) Microsoft Store上でのインストール作業が終わったら、スタートに追加されるUbuntuを起動して、インストールの完了を待つ。完了すると、内部で使用するユーザー名とパスワードの設定を求められるので、プロンプトに従って入力する。~ なお、パスワードは入力しても表示されないので、正確に入力する。 #ref(wsl-12.png,,25%) &size(50){ ↓}; #ref(wsl-13.png,,50%) Ubuntuインストール完了。 Ubuntuを起動して、以下のコマンドを入力しておくとアップデートされる。 sudo apt-get update sudo apt-get upgrade また、ロケールを日本語にしたいときは、以下のコマンドを入力する。 sudo apt-get install language-pack-ja sudo update-locale LANG=ja_JP.UTF-8 ** vcxsrvのインストール(必須) [#i2aba0d1] SourceForgeからVcXsrvをダウンロードしてインストールする。~ https://sourceforge.net/projects/vcxsrv/files/vcxsrv/~ #ref(vx-1.png,,20%) インストールはすべて、同意、はい、次へをクリックしてOK~ 起動方法は、VcXsrvをスタートメニューから探し、XLaunchを起動する。~ そして、全て、同意、はい、次へをクリックして起動完了。~ 次に、使えるかどうか確認する。~ まず、Windowsの右下に行って`「この数字」の部分を確認する。~ #ref(vx-2.png,,50%)~ #ref(vx-3.png,,50%)~ Ubuntuを起動し、以下のコマンドを入力する。0.0のところは適宜、確認した数字に変更する。~ export DISPLAY=localhost:0.0 sudo apt-get install x11-apps xeyes 入力して、下のような画像が出てきたら起動できてる。~ #ref(vx-4.png,,50%) **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/]] ** MinGWのインストール(任意) [#de7bc0a6] http://yohshiy.blog.fc2.com/blog-entry-292.html pythonは予めインストールされているものとする。~ また、プログラムの見やすさや、実行のしやすさにおいて、visual stdio codeを使ってpythonを書くのがおすすめ。~ ** Windows10でのMT4とC言語の自動取引 [#m5d557d7] #ref(C++ 2.zip)~ まず、↑のzipファイルをダウンロードして展開する。~ https://qiita.com/funafuna/items/c3bb78a546cf2605205d~ 次に、ターミナルで、../C++/srcまで移動しartificial.cを下のコマンドでコンパイルする。~ sudo apt install gcc gcc artificial.c -lm -lX11 -L/usr/X11/lib -I/usr/X11R6/include -o ../artificial Xutil.hが入ってないとかでたら~ sudo apt-get install xorg そして、またコンパイルするとコンパイル完了~ その後、下のコマンドで起動すると思う。~ ../artificial これでC言語の準備完了。次にMT4の準備へ。~ #ref(MQL4.zip)~ 上のファイルを解凍して、MT4のファイルの中のMQL4に貼り付けすると、準備完了~ まず、MT4を開いて一分足から月足までのUSDJPYのチャートを開く。~ (うまくPythonがインストールできない事例があったのでインストールの流れ書いておきます)~ リンク先確認:[[Pythonのインストール方法(Windows)]]~ -足出し方~ MT4のファイルの新規チャートよりM1~MNまでの個数分のUSDJPYのチャートを作る。~ それぞれのチャートをM1~MNまでのどれかに設定する。~ M1に10secChartMakerと30secChartMakerのインジケーターを入れる。~ すると、DLLを許可するというのがあるので、それを許可する。~ ファイルのオフラインチャートより10Sと30Sのチャートを出す。 ubuntuの場合,pipが初期でインストールされていない?からインストールしなきゃいけない.~ sudo apt install python3-pip でインストール. -CSVファイルの作り方~ 上記で出したチャート全てに、CSV_UpdaterをDLLを許可していれる。~ ファイルのデータフォルダを開くより、MQL4のFilesにCSVファイルができているか確認する。 Win10ではコマンドプロンプトを起動し、必要なライブラリをインストールする。 インストールの仕方はコマンドプロンプトで~ -シンボリックリンク~ mklink /D mklink /D 他のディレクトリを表示したい場所 表示するディレクトリ~ 上のコマンドで、in_dat/FilesとMQL4/Filesのシンボリックリンクを作る pip install MetaTrader5 のように入力してインストールする。 今回インストールが必要なのは、 -MetaTrader5 -pytz -pandas -numpy -(mplfinance) -カラー変更~ https://twinbird-htn.hatenablog.com/entry/2018/02/10/231137 (インジケータの計算に利用するTA-Libはインストールの仕方が特殊なため、後述する) -ホームディレクトリ変更~ https://qiita.com/funafuna/items/c3bb78a546cf2605205d その後以下のサイトからMT5をインストールする。~ ※ここでのMT5は前述したpip install MetaTrader5のMT5とは名前が同じだけで別物。 下記のリンクでインストールするものはアプリ~ [[MetaTrader 5をダウンロードしましょう:https://www.metatrader5.com/ja/download]]~ -起動方法~ ../artificialのあとに、MT4でM1のチャートにスクリプトにあるTradeAI3を入れれば起動 MT5での最低取引量は0.01lot(10000通貨)なので残高は大体10万以上にしておくべき ** 参考URL [#a9ce3a7c] https://qiita.com/Aruneko/items/c79810b0b015bebf30bb~ http://itcweb.cc.affrc.go.jp/affrit/documents/guide/x-window/x-win-xming~ https://qiita.com/fukuramikake/items/283b817c16725af79a28 MT5の左上のファイル→デモ口座を開くから残高を増やすことができる *Mac [#wac9d681] **実行環境 [#h5ecf808] MAC **MAC対応のMT4インストールする方法 [#p83f8e23] https://tetori.jp/mt4/mt4-beginner/mac-mt4-xm/~ 上記のサイトに従ってすると、MT4インストールから口座開設までできる。 **3. TA-Libのインストール [#hde192be] 参考サイト[[Windows環境のPythonでTA-Libを使えるようにする:http://shinyaowari.com/archives/1831]] **C言語とMT4のスクリプトのファイル [#dff87f36] #ref(C++ 2.zip)~ まず、↑のzipファイルをダウンロードして展開する。~ 次に、ターミナルで、../C++/srcまで移動しartificial.cを下のコマンドでコンパイルする。~ sudo apt install gcc gcc artificial.c -lm -lX11 -L/usr/X11/lib -I/usr/X11R6/include -o ../artificial Xutil.hが入ってないとかでたら~ sudo apt-get install xorg sudo apt install libx11-dev そして、またコンパイルするとコンパイル完了~ その後、下のコマンドで起動すると思う。~ ../artificial これでC言語の準備完了。次にMT4の準備へ。~ #ref(MQL4.zip)~ 上のファイルを解凍して、MT4のファイルの中のMQL4に貼り付けすると、準備完了 +環境の確認 まず、使っているパソコンが何ビットなのを確認する。~ 「スタート」→「コントロールパネル」→「システムとセキュリティ」→「システム」 ここに書いてある「システムの種類」が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 ~~~ と表示されたら完了。 **使い方 [#t2995687] いざwindowsと同じ方法でやってみるとできなかったので、修正中 **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なら使用しない),それぞれのインジケーターの計算には先ほど取得した最適なパラメータを使用. #ref(L15.png,,50%) +16個のルールでバックテストを行い,その結果得られた評価指標の値をそれぞれデータフレームに保存. +直交表と評価指標のデータフレームで回帰分析を行い,インジケーターごとの主効果を算出. +2^15個全ての組み合わせの直交表を作成,その直交表と主効果をまとめたデータフレームを使って全ての組み合わせにおける評価指標の予測値を算出. +最適な組み合わせを選択し,そのときのデータフレームの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のとき,それに対応したインジケーターのルールで売買を行う.