TradingViewバックテストを自動化する
ねくすこです。(@tenten1091)
今回は、TradingViewのバックテストを自動化する方法を紹介します。
そこそこ良い成績のストラテジーが手元にあり、
そのポテンシャルを最大限に生かしたパラメータを見つけ出したい
という方におすすめです。
■概要
思いつくアプローチとしては、
①TradingView上で手動で行っている最適化を自動化する
②Pineのコンパイル環境、取引所のtickデータを用意して最適化する
といった感じですが、②については相当な手間が必要なため、
この記事では①のアプローチを紹介します。
内容としては、PythonのseleniumとGoogleChromeを使用した
スクレイピングにより作業の自動化を行います。
ブラウザでの操作を自動化するアプローチのため、
②の方法に比べるとパフォーマンスは悪く、
手動で行うよりは時間を短縮できるという程度です。
下で紹介する方法では、
・純利益
・勝率
・PF
・最大DD
・使用パラメーター
の5つをパターン分まとめたものをcsvとして出力します。
それらをエクセルやスプレッドシートでグラフ化して、
良さげなパラメーターを選択する感じになります。
■用意するもの
・GoogleChromeDriver
・Python(3.x)
・seleniumパッケージ
GoogleChromeDriverについては
お使いのChromeのバージョンに合ったものをインストールして下さい。
インストール方法はこちらの記事が分かりやすくなっています。
pip install selenium
seleniumは上記コマンドでインストールが行えます。
■使用するプロジェクト
コードを含むプロジェクトは
GitHubからダウンロード、もしくはCloneして下さい。
■使用方法
前準備として、TradingView上でチャートを1つのみの表示にし、
テストしたいストラテジーをチャートに適応させておきます。
その際、左右のビューは全て閉じ、
ストラテジーテスターの概要タブを表示させておいて下さい。
上記に加えて、ストラテジーの設定画面を開いた時に
入力タブが表示されるようにしておいて下さい。
ブラウザを開き直し、画像のような見た目になっていれば準備完了です。
今回は説明用にStochastic Slow Strategyを使用しています。
次に、プロジェクト内のcommon.iniファイルを開き、
それぞれの項目を入力します。
[settings]
DRIVER_PATH = ChromeDriverへのパス
CHART_URL = TradingViewのチャートURL
ACCOUNT = TradingViewのアカウント
PASSWORD = TradingViewのパスワード
ChromeDriverへのパスについては
上でダウンロードしたドライバの実行ファイルへのパスを入力して下さい。
C:\Users\UserName\chrome\chromedriver.exe といった感じです。
TradingViewのチャートURLについては
前準備で表示していたチャート画面のURLを入力して下さい。
https://jp.tradingview.com/chart/XXXXXXXX/
こんな感じのURLになっているかと思います。
次に、バックテスト用の設定ファイルを作成します。
サンプルとしてstrategy_example.iniを入れていますので、
そちらを例に説明を行います。
[settings]
PARAM_START = 14 80 20
PARAM_END = 20 80 25
PARAM_STEP = 1 1 1
PARAM_STARTからPARAM_ENDまでのパラメーターをテストします。
その間の間隔をPARAM_STEPに入力して下さい。
上記の設定だと、
1つ目のパラメーターが14から20
2つ目のパラメーターが80固定
3つ目のパラメーターが20から25
それぞれを1ずつ進めるため、計42パターンをテストします。
※PARAM_STARTの値がPARAM_ENDの値以下になるように設定して下さい。
パラメーターが小数の場合も入力可能です。
パラメーターの個数と数値は
そのストラテジーの入力できるパラメーターの順番に対応しています。
今回の場合は、
1つ目が期間、2つ目がOverBougth、3つ目がOverSoldと紐づいています。
数値として扱えないパラメーター(プルダウンやチェックボックス)は
個数に含まれず飛ばされます。
設定ファイルのパラメーター数がストラテジーのパラメーター数
未満の場合は、それより下のパラメーターは無視されます。
そのため、テストから省きたいパラメーターはPineのコードを弄り、
下のほうに移動させておくとテストが行いやすいです。
■起動方法
# 起動コマンド
python backtest.py [設定ファイルへのパス]
# サンプルの場合
python backtest.py strategy_example.ini
プロジェクトのディレクトリまで移動後、
上記のコマンドでプログラムが立ち上がります。
同時にChromeブラウザが立ち上がり、
①ログイン失敗画面
②ログイン画面
③チャート画面
④パラメーター入力
⑤結果保存
上記のフローを辿り、パターン分だけ④と⑤を繰り返します。
起動後、パターン数とおおよその所要時間が表示され、
1パターンがログに出力されるごとに進捗を表示していきます。
全てのパターンが終了するとブラウザが閉じ、
logファイルの中に[設定ファイル名]_[起動時刻].csvが吐き出されます。
中身はこんな感じになっており、
左から 純利益、勝率、PF、最大DD、使用パラメーター
が出力されています。
それらをエクセルやスプレッドシートなどでグラフにして、
良さそうなパラメーターを選んでみて下さい。
■注意点
1パラメーターにつき4.5秒ほどかかるため、割と時間がかかります。
出かける前や寝る前などに使用すると良いかと思います。
起動中、ブラウザへの操作や他ソフトのウィンドウが割り込むと
正しく動作しない可能性があります。(スリープ設定等も怪しいです)
※Pro以下の場合はTradingViewへの多重アクセスも動作に影響します。
基本的に、次に操作するパーツがブラウザで有効になるのを待機していますが、値を取得する部分のみ固定値で3秒待機の雑な処理になっています。
そのため、ブラウザの処理が遅れると1つ前の結果を保存することがあるかもしれません。
ストラテジーの基準通貨がJPYになっていないと正常に動作しません。
PineでcurrencyをJPYに指定するか、設定のプロパティから基準通貨をJPYにしてからお使い下さい。