#author("2024-11-21T04:26:08+01:00","","")
#author("2024-11-25T03:08:17+01:00","","")
[[山本T]]

[[技術資料]]

#Contents

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

*動作を確認している環境 [#t0064c54]

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

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

*準備する [#k6cdbfdb]

**MetaTrader 5 [#ya5de976]

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

***ダウンロードとインストール [#u5c54cc5]

''[[【公式サイト】:https://www.metatrader5.com/ja/download]]''からインストーラをダウンロードし,インストールする.~

**Python [#ece37e57]

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

***ダウンロードとインストール [#o75393de]

''[[【公式サイト】:https://www.python.org/downloads/]]''から,適切なインストーラをダウンロードし,インストールする.~

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

くわしい手順は,''[[【このページ】:https://www.javadrive.jp/python/install/index1.html]]''あたりを参考にするとよいだろう.

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

**Pythonのライブラリ [#i5fc50d1]

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

- ''&color(green){MetaTrader5};''
- ''&color(green){datetime};''
- ''&color(green){pandas};''
- ''&color(green){numpy};''
- ''&color(green){mplfinance};''
- ''&color(green){backtesting};''
- ''&color(green){scikit-learn};''
- ''&color(green){pulp};''
- ''&color(red){talib};''

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

''&color(red){あかで書かれたライブラリ};(talib)''は,「pip」でもインターネットから拾ってこられないため((厳密にいうと,「pip」でダウンロードできるライブラリは,「Python Package Index(PyPI)」に登録されているものだけであり,「talib」はそこに登録されていない.)),手動でダウンロードする必要がある.~

***TA-Lib(talib)のダウンロードとインストール [#n55fdf8c]

''[[【公式サイト】:https://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib]]''から,適切なものをダウンロードする.~
---------------------------------------------

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

---------------------------------------------


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

''TA_Lib-&color(blue){x.x.x};-cp&color(red){yy};-cp&color(red){yy};-win&color(green){z};.whl''~

・&color(blue){x.x.x};:TA-Libのバージョン(「0.4.21」など)~
・''&color(red){yy};:Pythonのバージョン(たとえば,「&color(red){3};.&color(red){8};.10」であれば「&color(red){38};」)''~
・''&color(green){z};:Windows OSのビット数(64ビットであれば「&color(green){_amd64};」,32ビットであれば「&color(green){32};」)''~

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

ダウンロードしたら,コマンドプロンプトで,~
「''py -m pip install .\Downloads\TA_Lib-&color(blue){x.x.x};-cp&color(red){yy};-cp&color(red){yy};-win&color(green){z};.whl''」~
を実行する.正しくインストールされれば,「''Successfully installed~~~''」と表示される.~

**プログラム [#uab55c35]

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

――――――――――~
#ref(MT5.zip)
――――――――――~

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

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

- ''src''
-- ''&color(red){tick_data.py};''
MT5を介してTickを取得するプログラム
-- ''indi''
各インジケータごとに,パラメータを最適化するプログラム
--- ''&color(red){indi_AROON.py};''
--- ''&color(red){indi_BBAND.py};''
--- ''&color(red){indi_CCI.py};''
--- ''&color(red){indi_DMI.py};''
--- ''&color(red){indi_EMA.py};''
--- ''&color(red){indi_MACD.py};''
--- ''&color(red){indi_MFI.py};''
--- ''&color(red){indi_MOM.py};''
--- ''&color(red){indi_ROC.py};''
--- ''&color(red){indi_RSI.py};''
--- ''&color(red){indi_STOCH.py};''
--- ''&color(red){indi_TRIX.py};''
--- ''&color(red){indi_TSF.py};''
--- ''&color(red){indi_ULTOSC.py};''
--- ''&color(red){indi_WillR.py};''
-- ''&color(red){rule_generator.py};''
最適なルールを選択するプログラム
-- ''&color(red){auto_trade.py};''
MT5上で取引を行うプログラム
- ''in_dat''
-- ''&color(green){common.csv};''
-- ''tick.csv''
-- ''USDJPY1M.csv''
-- ''long''
--- ''OHLCV_long.csv''
--- ''OHLCV_long_AROON.csv''
--- ''...''
-- ''short''
--- ''OHLC_short.scv''
--- ''OHLC_short.csv''
--- ''...''
- ''out_dat''
-- ''Entry_long.csv''
-- ''Entry_short.csv''
-- ''Position.csv''
-- ''rule.csv''
-- ''Strategy.csv''
-- ''long''
--- ''opt''
--- ''para''
-- ''short''
--- ''opt''
--- ''para''

&br;

***プログラムを修正する [#mc7aff8b]

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

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

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

**MT5の準備 [#ece37e47]
以下のファイルをダウンロードする~
#ref(initmql4.mqh)
#ref(stdlib.mqh)
#ref(stderror.mqh)
#ref(Trade.csv)
#ref(TradeAI.mq5)
#ref(MQL5.zip)~
ただし,Trade.csvは以下の手順で保存する.~
「右クリック」→「名前を付けてリンク先を保存」~
ファイル名は変えずにそのまま保存する.~
各ファイルの配置を以下に示す.~
MQL5→includeにinitmq4.mqh, stdlib.mqh, stderror.mqhの三つを入れる.

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

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


*システムを実行する [#k6cdbfvb]

** 1台のPCで実行する [#h7db44b0]

*** &color(green){common.csv};を確認する [#td08c96b]

「''&color(green){common.csv};''」は,システムの動作を設定するものである.~
そのままでは,以下のようになっているはずである.~

#ref(common.jpg,,50%)

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

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

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

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

・「''trend_frag''」:「''2''」~

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

*** 各プログラムを実行する [#g8df52b0]

各プログラムを,以下のとおり,''&color(red){順番に};''実行する.~

――――――――――――――~

''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''~

----------------------------------------------------------
rule_generator.py 実行時に必要な sklearn を pip でインストールする際にエラーが出た人は下のページを確認してください。(追記2024/11/25山本T)

https://qiita.com/ogawa_shuzo_cw/items/c3d9e7057ea323f82e88
----------------------------------------------------------

――――――――――――――~

** 2台のPCで実行する [#zb6967f9]

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

*** ''&color(skyblue){短期側};'':ファイルをLAN上で公開する [#g34e8jgf]

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

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

#ref(01.jpg,,50%)

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

#ref(02.jpg,,50%)

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

#ref(02-1.jpg,,50%)

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

#ref(03.jpg,,50%)

&br;

*** &color(orange){長期側};:共有されたフォルダにアクセスできるか確認する [#k93b98d7]

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

#ref(04.jpg,,70%)

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

#ref(05.jpg,,50%)

エクスプローラで,''&color(skyblue){短期側};''に保存されているフォルダ「MT5」が,~
''&color(orange){長期側};''から閲覧できれば,完了である.~

#ref(06.jpg,,50%)

&br;

*** &color(orange){長期側};:プログラムを修正する [#d2a6e4e0]

以下のプログラムの,以下の行にある絶対パスのうち,~
「MT5」以上を,''&color(skyblue){短期側};''の絶対パスに変更する.~

・''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(07.jpg,,70%)

&br;

*** &color(orange){長期側};:&color(green){common.csv};を確認する [#sf86fb01]

&color(green){common.csv};のうち,以下の項目の値が,~
次のようになっているか確認する.異なっているときは,変更する.~

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

*** &color(skyblue){短期側};:&color(green){common.csv};を変更する [#oc3c6221]

&color(green){common.csv};のうち,以下の項目の値が,~
次のようになっているか確認する.異なっているときは,変更する.~

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

*** &color(skyblue){短期側};・&color(orange){長期側};:各プログラムを実行する [#d3acc759]

各プログラムを,&color(skyblue){短期側};と&color(orange){長期側};それぞれにおいて,~
以下のとおり,''&color(red){順番に};''実行する.~

――――――――――――――~

''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''~

――――――――――――――~

動作確認用の動画
#ref(HF-data_analysis.mp4)

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