#author("2024-02-18T23:17:22+00:00","","") #author("2024-02-18T23:18:09+00:00","","") [[由利恵]] #木下さん,蒲田さん [[専門ゼミ(八十住)]] *目次 [#e890b3d5] #CONTENTS **【FXについて】[#i495c384] FXとは「Foreign Exchange(フォーリン・エクスチェンジ)」の頭文字を取った言葉である。~ 正式名称は、「外国為替証拠金取引」である。~ 円や米ドルなどといった通貨の交換を行い、その差額で損益が決まる。 為替レートは常に変動しており、通貨の価値は一定ではない。~ 例えば、需要が高い通貨は買われ、低い通貨は売られる。~ FXは、この為替レートの変動を利用して損益を発生させる投資である。 **【ゴールデンクロスとデッドクロス】[#i495c384] ゴールデンクロスとは短期の移動平均が中期の移動平均を下から上へクロスすることであり、買いのサインと言われている。 デッドクロスとは短期の移動平均が中期の移動平均を上から下へクロスすることであり、売りのサインと言われている。 今回はこの2つを使って自動売買を行った。 #ref(1.png,,70%) **【ボリンジャーバンド】[#i495c384] 過去の値動きを表す移動平均線に、過去の値動きから計算される値動きの幅の目安となる線を加えたものである。目安の線の価格帯をバンドと呼ぶ。チャートに設定するには、「σ(シグマ)」という値を入れる。統計学的に価格がその移動平均線の上下のバンドの間で動く確率を想定している。 順張り~ レンジ相場でバンドが挟まっている状態で、バンドの拡大をともなって相場が動いた際にはそのトレンドの方向に順張りでエントリーするという手法である。ボリンジャーバンドの開発者はこの方法を推奨していると言われている。~ 他にもいろいろな方法がある。 今回はこの方法で自動売買をしていないが、またチャレンジしたい。 #ref(2.png,,70%) **【実行環境】[#rde624e4] ・MetaTrader5 **【環境構築】 [#udebb2c6] 以下のページを見ながら環境構築を行った。~ [[MetaTrader5とPythonによる自動売買]] **【プログラムコード】[#q403d9b3] slippage、stoploss、takeprofitを3に変更したプログラムコードを以下に示す。(もともとのコードはこの3つは5であった。) #ref(3.png,,50%) 次にslippage、stoploss、takeprofitを10に変更したプログラムコードを以下に示す。 #ref(5.png,,50%) **【結果】[#q403d9b3] slippage、stoploss、takeprofitを3に変更して、30分動かした結果を以下に示す。もともと100,000円あったが一気に減った。 #ref(4.png,,40%) 次にslippage、stoploss、takeprofitを10に変更して、30分動かした結果を以下に示す。だいだい1,000円ぐらい儲かった。 #ref(6.png,,40%) slippage、stoploss、takeprofitを3に変更したときは何かの間違いかもしれないが大きく負けた。10に変更したときは少し勝ったのでやはり投資系は長い目で見た方が良いと思われる。 **【参考資料】[#n524e1f0] FXとは?どのような投資?初めての方でも知っておきたい9つの基礎知識~ https://www.oanda.jp/lab-education/beginners/aboutfx/fx_trading/ 売り時買い時どんな時? テクニカル分析学び時!~ https://www.japannetbank.co.jp/investment/fx/analysis.html [[技術資料]]~ *目次 [#e890b3d5] #CONTENTS **[[売買ルールの基礎知識]] [#o4c5ab32] **1. 目標 [#i67428c5] FXや金,株価のtickを取得しそれらから時間足データを作成する.時間足データを用いて テクニカル分析,グレンジャー因果性分析をすることでオンラインのデモトレードを行う. **2 wsl [#kbde4fb5] とりあえず、WSL2のインストールから始める。 管理者権限でPowerShellを開き、次のコマンドを入力する。 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 次に、同じくpowershellでwindowsのどのシステムを使用しているか次のコマンドで確認する。 systeminfo | Select-String "システムの種類" コマンドプロンプトの場合はこれ systeminfo | find "システムの種類" 次にwindowsのバージョンを確認する。バージョンとビルド番号を確認するには、 Windows ロゴ キー + R キー を押して、「 winver 」と入力し、 [OK] を選択します。 (または、Windows コマンド プロンプトで ver コマンドを入力します)。 一つ前の手順で調べたシステムに必要な最新の Windows バージョンを満たしてない場合、更新します。 -x64 システムの場合: バージョン 1903 以降、 ビルド 18362 以上。 -ARM64 システムの場合: バージョン 2004 以降、 ビルド 19041 以上。 -18362 より前のビルドは WSL 2 をサポートしていません。 Windows 更新アシスタントを使用して、お使いのバージョンの Windows を更新します。Windows 10 バージョン 1903 または 1909 を実行している場合は、Windows メニューから [設定] を開き、[更新とセキュリティ] に移動して、[更新プログラムのチェック] を選択します。 ビルド番号は、18362.1049+ または 18363.1049+ で、マイナー ビルド番号は .1049 より大きい必要があります。windowsのマイナービルド番号を満たしていない場合は、windowsマークをクリックして、歯車マークをクリックして設定を開きWindows Updateを行う。 WSL 2 をインストールする前に、" 仮想マシン プラットフォーム " オプション機能を有効にする必要があります。管理者として PowerShell を開き、以下を実行します。 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart お使いのパソコンを&size(20){&color(red,white){再起動};};して WSL のインストールを完了し、WSL 2 に更新します。 次にWSL2Linuxカーネル更新プログラムパッケージをダウンロードする。システムがx64の場合はx64、ARM64の場合はARM64をクリックする。 [[x64:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi]] [[ARM64:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_arm64.msi]] ダウンロード後、ダウンロードしたファイルを実行する。 次に、次のコマンドで、新しい Linux ディストリビューションをインストールする際の既定のバージョンとして WSL 2 を設定します。 wsl --set-default-version 2 次に、Ubuntu 20.04 LTSをMicrosoft Storeからインストールする。 下のリンクに行って入手を選択する。 [[Ubuntu 20.04 LTS:https://www.microsoft.com/store/apps/9n6svws3rx71]] 複数のデバイスで使うか聞かれたら必要ないと答える。 その後、起動し、ユーザー名とパスワードを設定する。もちろん、どちらも覚えるか記録しておく。 このユーザー名およびパスワードは、インストールする Linux ディストリビューションごとに固有であり、Windows ユーザー名とは関係ありません。 ユーザーがユーザー名およびパスワードを作成すると、そのアカウントがディストリビューションの既定のユーザーとなり、起動時に自動的にサインインされます。 このアカウントは、Linux 管理者と見なされ、sudo (Super User Do) 管理コマンドを実行できます。 **3. 【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の左上のファイル→デモ口座を開くから残高を増やすことができる **4. 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である。 最初に自分が取引に使用する市場の気配値を表示させる. ※もし、ウィンドウが出てきたらで自動売買の許可にチェックを入れる。 #ref(MT5準備.png,,30%) その後、上のタブからツール→オプションで下記の画像の箇所にチェックを入れ、OKを押す。 #ref(5.png,,30%) これでMT5はpythonを用いたオーダーリクエストに応じてくれるようになり、アルゴリズムトレードが可能になる。 *木下卒業研究 [#u1b391ed] *プログラムの流れ [#e890b3d5] **1,データ取得 [#g329190e] MT5から市場のtickデータを取得し,common.csvで指定した時間足ごとにリサンプリングを行いcsvに保存する.これらを各市場に対して行う. #ref(15.png,,30%) tickdata.pyやgolddata.pyなどの流れは以下のようになっている. +MT5からTickデータを取得し,Tickデータに付随している時間の中でsecが変わったらデータフレームにticks_frameに保存. +指定秒足(10S,30S,1M)でリサンプリングしそれぞれのデータフレームへ保存, +最新の時間足データが保存されたデータフレームを、次のインジケータのバックテストに使用するためにcsvファイルに保存する. OHLCVが保存されたcsvは指定した行数に達すると,古い順から削除され最新のデータが入るようになっている tickdata.pyやgolddata.pyはバックグラウンドで常に動かしておき,データを貯め続ける. **2.パラメータの最適化 [#lcddfb22] csvファイルから時間足データを取得し,使用するインジケーターそれぞれを同時に最適化,最適なパラメータをそれぞれ保存.すべての市場に対して行う #ref(backtest.png,,30%) 各インジケーターの最適化プログラム(indi_@@@.py)の流れは以下のようになっている. +それぞれのインジケーターの名前が入ったcsvファイル(OHLCV_10S_@@@.csvやOHLCV_1T_@@@.csv)からOHLCVデータを取得 +Backtesting.pyをもちいてそれぞれのインジケーターの計算に必要なパラメータ(期間等)と,tpとslの幅に利用するATRの計算に必要な期間・適用時の倍率を最適化する. +最適化したときのパラメータの結果をcsvファイル(para_@@@.csv)に保存. +各時間足で最適化されたパラメータを用いた際の評価指標を比較し,一番良かった時間足とパラメータを選択する. 各indi_@@@.pyのプログラムはバックグラウンドで常に動かしておき,最適なパラメータを更新し続ける. **3.市場間分析 [#lcddfb22] 円ドルや株価などの異なる市場間の分析を行う.時間足データを用いてグレンジャー因果分析また相関を求める. #ref(市場間分析.PNG,,30%) causal.pyの流れとしては単位根検定,共和分検定を行った後に,グレンジャー因果分析に使用できると判断された市場データを用いてVARモデルを推定し グレンジャー因果分析を行う。相関はすべての市場で求めて、因果性の有無と相関をまとめた情報をcausal.csvに保存する. このプログラムもバックグラウンドで常に動かす. 詳しくは木下のところにある参考文献から勉強してください. -[[参考文献:https://www.pu-toyama.ac.jp/IS/IIE/Wiki.IIE.IS.20211128.toyama.pu/lab_log/wiki_lab.php?%E5%8D%92%E6%A5%AD%E7%A0%94%E7%A9%B6%28%E6%9C%A8%E4%B8%8B%29#face3bc8]] プログラムを実装するにあたり参考にしたサイトも張っておきます。 -[[pythonで時系列解析(因果推論):https://qiita.com/omuram/items/3d71881c5488d3aabd27]] **4.各市場に出ている売買シグナルの抽出 [#lcddfb22] バックテストにおいて時間足を選択しパラメータの選択を行った.今度はそれらが保存されたcsvを用いて最適な時間足のおけるパラメータを使用して現在の市場を分析した際,売買シグナルが出ているのかということを抽出する. #ref(シグナル.png,,30%) 画像のように各市場対する各インジケータのシグナルをcsvに保存する.これも常に動かす **5.シグナルと市場間分析の結果を用いた取引 [#lcddfb22] #ref(teian3.PNG,,30%) ~ **order request [#g329190e] https://metasys-seeker.com/index/%E6%A8%99%E6%BA%96%E7%9A%84%E3%81%AA%E5%AE%9A%E6%95%B0%E3%80%81%E5%88%97%E6%8C%99%E3%81%A8%E6%A7%8B%E9%80%A0%E4%BD%93/%E5%8F%96%E5%BC%95%E5%AE%9A%E6%95%B0/