無題66

TradingViewバックテストを自動化する

ねくすこです。(@tenten1091)
今回は、TradingViewのバックテストを自動化する方法を紹介します。

そこそこ良い成績のストラテジーが手元にあり、
そのポテンシャルを最大限に生かしたパラメータを見つけ出したい
という方におすすめです。

更新履歴
◆2019/12/13 TradingViewレイアウト変更に対応

■概要

思いつくアプローチとしては、
①TradingView上で手動で行っている最適化を自動化する
②Pineのコンパイル環境、取引所のtickデータを用意して最適化する

といった感じですが、②については相当な手間が必要なため、
この記事では①のアプローチを紹介します。

内容としては、PythonのseleniumとGoogleChromeを使用した
スクレイピングにより作業の自動化を行います。

ブラウザでの操作を自動化するアプローチのため、
②の方法に比べるとパフォーマンスは悪く、
手動で行うよりは時間を短縮できるという程度です。

下で紹介する方法では、
・純利益
・勝率
・PF
・最大DD
・使用パラメーター
の5つをパターン分まとめたものをcsvとして出力します。

それらをエクセルやスプレッドシートでグラフ化して、
良さげなパラメーターを選択する感じになります。

■用意するもの

・GoogleChromeDriver
・Python(3.x)
・seleniumパッケージ

GoogleChromeDriverについては
お使いのChromeのバージョンに合ったものをインストールして下さい。
インストール方法はこちらの記事が分かりやすくなっています。

筆者のChromeはバージョンが 75.0.3770.142 となっていたので、
ChromeDriver 75.0.3770.140 をインストールしています。

seleniumについては
pip install selenium​
上記コマンドでインストールが完了します。

■使用するコード及びプロジェクト

コードを含むプロジェクト一式は
GitHubからダウンロード、もしくはCloneして下さい。

■使用方法

前準備として、TradingView上でチャートを1つのみの表示にし、
テストしたいストラテジーをチャートに適応させておきます。

その際、左右のビューは全て閉じ、
ストラテジーテスターの概要タブを表示させておいて下さい。

上記に加えて、ストラテジーの設定画面を開いた時に
入力タブが表示されるようにしておいて下さい。

画像1

ブラウザを開き直し、画像のような見た目になっていれば準備完了です。
今回は説明用にStochastic Slow Strategyを使用しています。

次に、プロジェクト内のcommon.iniファイルを開き、
それぞれの項目を入力します。

[settings]
DRIVER_PATH = ChroeDriverへのパス
CHART_URL = TradingViewのチャートURL
ACCOUNT = TradingViewのアカウント
PASSWORD = TradingViewのパスワード

ChroeDriverへのパスについては
上でダウンロードしたドライバの実行ファイルへのパスを入力して下さい。
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の値以下になるように設定して下さい。

パラメーターが小数の場合も入力可能です。

画像2

パラメーターの個数と数値は
そのストラテジーの入力できるパラメーターの順番に対応しています。

今回の場合は、
1つ目が期間、2つ目がOverBougth、3つ目がOverSoldと紐づいています。

数値として扱えないパラメーター(プルダウンやチェックボックス)は
個数に含まれず飛ばされます。

設定ファイルのパラメーター数がストラテジーのパラメーター数
未満の場合は、それより下のパラメーターは無視されます。

そのため、テストから省きたいパラメーターはPineのコードを弄り、
下のほうに移動させておくとテストが行いやすいです。

■起動方法

# 起動コマンド
python backtest.py [設定ファイルへのパス]

# サンプルの場合
python backtest.py strategy_example.ini

プロジェクトのディレクトリまで移動後、
上記のコマンドでプログラムが立ち上がります。

同時にChromeブラウザが立ち上がり、
①ログイン失敗画面
②ログイン画面
③チャート画面
④パラメーター入力
⑤結果保存

上記のフローを辿り、パターン分だけ④と⑤を繰り返します。

画像3

起動後、パターン数とおおよその所要時間が表示され、
1パターンがログに出力されるごとに進捗を表示していきます。

全てのパターンが終了するとブラウザが閉じ、
logファイルの中に[設定ファイル名]_[起動時刻].csvが吐き出されます。

画像4

中身はこんな感じになっており、
左から 純利益、勝率、PF、最大DD、使用パラメーター
が出力されています。

画像5

それらをエクセルやスプレッドシートなどでグラフにして、
良さそうなパラメーターを選んでみて下さい。

■注意点

1パラメーターにつき4.5秒ほどかかるため、割と時間がかかります。
出かける前や寝る前などに使用すると良いかと思います。

起動中、ブラウザへの操作や他ソフトのウィンドウが割り込むと
正しく動作しない可能性があります。(スリープ設定等も怪しいです)
Pro以下の場合はTradingViewへの多重アクセスも動作に影響します。

基本的に、次に操作するパーツがブラウザで有効になるのを待機していますが、値を取得する部分のみ固定値で3秒待機の雑な処理になっています。
そのため、ブラウザの処理が遅れると1つ前の結果を保存することがあるかもしれません。

ストラテジーの基準通貨がJPYになっていないと正常に動作しません。
PineでcurrencyをJPYに指定するか、設定のプロパティから基準通貨をJPYにしてからお使い下さい。

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

50
お仕事でゲーム開発、 趣味で為替や仮想通貨のシステムトレードを行っています。
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。