TradingViewでトレーディング戦略のバックテストを行う方法
- 公開日:2018/04/19
- 更新日:2018/10/19
- 投稿者:n bit
TradingViewでは投資戦略テスターと言う機能を使ってトレーディングのバックテストを行うことができます。裁量トレードの手法を事前に試してみたい方や、bot開発のロジックを事前にテストしたい方はこちらの機能を活用すると良いでしょう。TradingViewのPineスクリプトと投資戦略テスターを使ったバックテストの行い方を解説します。
この記事は約 分で読めます。(文字)
TradingViewでトレーディング戦略のバックテストを行う方法
TradingViewには、トレードのアルゴリズムを自分で設定できる「Pineエディタ」と、Pineエディタによって記述したアルゴリズムを使いバックテストやフォワードテストを行うことができる「投資戦略テスター」と言う2つの機能が備わっています。
トレードのアルゴリズムとは、トレード戦略やルールのことです。
バックテストとは
バックテストとは、チャートの過去データを利用して独自に行くんだトレードアルゴリズムの運用テストを行うことです。過去データを使った事前テストによって構築しているトレードアルゴリズムが実際に利益を上げることができるのか、または、全く儲からず資産を減らし続けるのか、ある程度見極めることができます。
Python等でbot開発を行う場合、いきなりアルゴリズムのコードを記述して実際に運用してみることも可能ですが、bot開発用のコードを記述していくにはそれなりの時間がかかります。ある程度の時間コストをかけて全く使い物にならないbotを生み出してしまっては時間の無駄ですよね。
そこで事前にバックテストやフォワードテストを行いbotとして開発する価値があるかどうかの判断を行うのです。バックテストとフォワードテストの違いは以下の通りです。
- バックテスト:過去データを利用したストラテジーテスト
- フォワードテスト:リアルタイムデータを利用したストラテジーテスト
TradingViewでトレーディング戦略のバックテストを行う基本手順
TradingViewでバックテストを行うときの基本的な流れを先に紹介しておきます。
1:TradingViewに新規登録
まずはTradingViewに新規登録を行い使える状態にする必要があります。まだ登録がお済みでない方は下記のページを参考にして登録作業を済ませておいてください。
TradingViewの新規登録手順
TradingViewは、トレードに関する数多くの指標を閲覧したり、トレード戦略をバックテストにて事前確認したりできます。今回はそのTradingViewの新規登録手順を解説します。登録作業はとても簡単に終わります。
無料プランと有料プランが3つ用意されています。無料プランでも「Pineエディタ」と「投資戦略テスター」を利用することが可能です。バックテスト以外にもTradingViewのチャートや、テクニカル指標などを利用していこうと考えている人は有料プランのPRO以上を選択される方が良いと思います。
各プランの詳細比較は下記のページで行っていますので参考にしてください。
TradingViewのプランの比較と主要機能説明
TradingViewには、無料プランと3つの有料プランを主要な機能や料金面で比較。無料プランと有料プランではどれぐらいの機能的な差があるのか、そして有料プランを選択するとしたらどのプランを選ぶべきなのか、プラン選択時の指針となるようまとめています。
2:bot開発を行う銘柄をチャートに表示
TradingViewへの登録が完了しましたら、新規のチャートレイアウトを作成し希望の銘柄を表示させます。こちらの詳しいやり方は下記のページをご参照ください。
TradingViewのチャートレイアウト新規作成・銘柄変更方法
TradingViewでチャートレイアウトを新規作成し、希望の銘柄チャートに変更して表示させる方法を解説します。お気に入りのチャートレイアウトにカスタムして保存することでいつでも簡単にアクセスすることができます。
3:Botのトレードアルゴリズムを作成
TradingViewでPineエディタにトレードの戦略やルールを記述していきます。
チャート画面下のPineエディタタブをクリックしてPineエディタを起動します。
Pineエディタ上部メニュー「新規作成」をクリックし投資戦略スクリプトの初期テンプレート呼び出します。
プルダウンメニューが表示されますので「空の投資戦略スクリプト」を選択します。
下記のような初期状態の投資戦略スクリプトテンプレートが表示されます。こちらをベースにトレードアルゴリズムを記述していきます。Pineスクリプトの記述方法やコードの解説は当ページの後半でおこないます。
Note
note等でbotのソースコードを購入し、どなたかのバックテスト用トレードアルゴリズムをすでに持っている場合はこのPineエディタ内のコードを丸ごと削除して代わりにペーストするだけで大丈夫です。
アルゴリズムの記述が完了しましたらスクリプトを保存します。Pineエディタ上部メニュー「保存」をクリックしてください。
自分でわかりやすい投資戦略のスクリプト名を入力します。今後この投資戦略スクリプト呼び出すときに表示される名前となります。
4:バックテストの実施
Pineエディタで記述したトレードアルゴリズムを投資戦略テスターでバックテストによる収益結果を検証します。
まずは、作成し保存した投資戦略スクリプトをチャートに反映させます。Pineエディタ上部メニュー「チャートへ追加」をクリックしてください。
下記画像のチャートには投資戦略スクリプトによって反映された↓↑などが表示されているのかわかると思います。
Note
チャートの時間軸
botの運用はどの時間軸のチャートを利用して稼働させるかによって収益結果が大きく変わってきます。どの時間軸でbotを稼働させるかを決定しチャートに反映させる前にチャートの時間軸を変更しておきましょう。
5:バックテストによる結果の検証&調整
検証結果に合わせてアルゴリズムの調整作業行い、検証と調整を繰り返しながらアルゴリズムを高めていきます。画面の下部には先程の投資戦略スクリプトによってバックテストを行った結果の収益状況がグラフとして表示されています。
「パフォーマンスサマリー」タブをクリックするとこのアルゴリズムを使ってトレードした結果のサマリーが掲載されています。どのようなトレードを行い、どのような収益結果や勝率だったかを素早く確認できます。
「トレード一覧」タブをクリックするとトレードの詳細を確認することができます。いつ?、ショートかロングか?、価格?で購入し、決済したのかといった詳細情報がすべて一覧で掲載されています。
これらの結果を確認しながらトレードアルゴリズムを調整し求める結果に近いアルゴリズムを構築していきます。
以上でTradingViewによるバックテストの1連の流れは完了です。手順も短く慣れてしまえばそんなに難しくありません。
PineエディタのPineスクリプト
Pineエディタでは、専用の言語としてPineスクリプトが用意されています。TradingViewでバックテストを行うためのPineスクリプトの記述方法や、Pineスクリプトの基本的なコードを解説します。
Pineスクリプトのバージョン定義:@version
1行目の表記は少し特殊です。バージョン切り替えるための指定をしています。Pineスクリプトには3つのバージョン(1〜3)があり、各バージョン間は互換性がないと言う極悪な仕様です。基本的にはバージョン3を指定しておけば問題ないです。必ず最初の1行目に忘れず指定しておきましょう。
//@version=3
ストラテジーの定義:strategy()
基本的には2行目に利用するコードです。今から記述するスクリプトがストラテジー(トレード戦略)である事の定義と、その基本設定を行うためのコードです。
記述例
strategy(title="my_strategy_name", shorttitle="MS1", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.15, pyramiding=0, currency=currency.USD)
ストラテジーの名前:title= shorttitle=
まずはストラテジーの名前を指定します。記述方法は2種類ありどちらのやり方で記述しても問題ありません。
- ストラテジー名:strategy_name(任意)
strategy("my_strategy_name")
strategy(title="my_strategy_name")
チャート上でストラテジーの名称を短くして表示させたいときは以下のオプションを追加します。
strategy(title="my_strategy_name", shorttitle="MS1")
strategy()スクリプト記述例には様々なオプション設定を行っていますが、最低限ストラテジーの名前のみ指定しておけば利用できます。
オーバーレイの表示設定:overlay=
ストラテジーの出力データをメインチャートにオーバーレイさせて表示させるかどうかを決定する設定です。
デフォルト値は「false」になっていますので、オーバーレイさせない場合は特に記述の必要はありません。「true」に変更するとメインチャートの上にオーバーレイして表示されます。
strategy(..., overlay=true)
strategy(..., overlay=false)
初期資金の設定:initial_capital=
バックテストで運用する初期資金の設定値を指定します。
strategy(..., initial_capital=10000)
注文数(売買する数量)のタイプ設定:default_qty_type=
注文時の数量を指定するタイプの設定を行います。エントリーの設定で解説するstrategy.entry()でqty(数量設定)のオプションを設定しない場合はこちらで必ず設定しておく必要があります。
指定に使える値は下記の3つです。
- strategy.fixed:固定数量(デフォルト)
- strategy.cash:シンボルの通貨で指定され、合計は数量に変換されます
- strategy.percent_of_equity:現在入手可能な持分の%
strategy(..., default_qty_type=strategy.percent_of_equity)
注文数(売買する数量)の設定:default_qty_value=
注文時の数量を設定します。default_qty_typeでの設定に基づいて値を指定します。
- strategy.fixed:注文数
- strategy.cash:シンボルの通貨の現金合計額
- strategy.percent_of_equity:資産に対するパーセンテージ数
strategy(..., default_qty_value=100)
例えば
- default_qty_type=strategy.percent_of_equity
- default_qty_value=50
で、保有資産50%でのエントリートレードになります。
注文の手数料タイプの設定:commission_type=
注文時に確定する手数料の方式を設定します。指定に使える値は下記の3つです。
- strategy.commission.percent:注文の現金ボリュームに対するパーセンテージ
- strategy.commission.cash_per_contract:取引所で契約毎に決められている金額
- strategy.commission.cash_per_order:取引所で注文毎に決められている金額
strategy(..., commission_type=strategy.commission.percent)
注文の手数料の設定:commission_value=
注文の手数料タイプで設定したタイプに応じてパーセント、または、金額を設定します。
strategy(..., commission_value=0.15)
値をいくらに設定するかは各取引所や取引方法によって変わります。私の場合はBitMEXのTaker(成行)→ Taker(成行)による往復を想定して設定しています。そのため設定例は
- commission_type=strategy.commission.percent
- commission_value=0.15
になります。
BitMEXの詳細な取引手数料は下記ページの「BitMEXのワントレード(往復)取引手数料」の項目を参照してください。
BitMEXってどんな取引所。信頼性・特徴・メリット等を徹底調査解説
ビットコインのトレードでよく名前流流取引所の1つBitMEX。レバレッジの倍率が100倍であることで有名。なぜこの取引所はトレーダーの方に愛用されているのか?どのような取引所なのか、そして信頼性は、その他、特徴やメリット等様々な角度から調査解説。
ピラミッティングの設定:pyramiding=
ピラミッティング「増し玉(2回目、3回目の資金投入)」を行うかどうかを設定します。同じポジションで積み増す最大数を指定します。デフォルト値は「0」で、その場合は初期ポジション以降の積み増しは行われません。
strategy(..., pyramiding=0)
通貨タイプの設定:currency=
戦略テスターで収益計算に使われる通貨タイプを選択します。
strategy(..., currency=currency.USD)
strategy(..., currency=currency.JPY)
strategy(..., currency=currency.EUR)
ティック毎に再計算設定:calc_on_every_tick=
TradingViewの投資テスターでは、過去データとリアルタイムデータいずれも各バーの終値で計算されています。この設定を「true」に切り替えることで常時変動するティックデータを利用して計算されるようになります。有効になるのはフォワードテストのみであることに注意してください。デフォルト値は「false」
strategy(..., calc_on_every_tick=true)
その他にもstrategy()には多くのオプション設定が用意されています。設定に合わせて適宜変更してください。strategy(title, shorttitle, overlay, precision, scale, pyramiding, calc_on_order_fills, calc_on_every_tick, max_bars_back, backtest_fill_limits_assumption, default_qty_type, default_qty_value, initial_capital, currency, slippage, commission_type, commission_value) → void
エントリーの定義:if() strategy.entry()
次はストラテジーのコアとなる部分です。どのような戦略によってロングとショートにエントリーするかを条件分岐によって振り分けエントリーさせます。
記述例
longCondition = ロングにエントリーする条件
if (longCondition)
strategy.entry("My Long Entry", strategy.long, comment="Long")
shortCondition = ショートにエントリーする条件
if (shortCondition)
strategy.entry("My Short Entry", strategy.short, comment="Short")
条件分岐の設定:if(条件)
ロングとショートにエントリーする各条件は自分で構築する投資スタイルやルールよって変わります。条件の分岐にはif()文を利用します。if()文の動作は一般的なプログラミング言語と基本的な考えは同じです。
if()文では「else」も利用できますが残念ながら「else if」等は用意されていないようです。条件には、論理否定:NOTと、論理:ORが利用できます。ANDは用意されていないのでしょうか?私には見当たりませんでした。
if()文による条件分岐はPineスクリプトバージョン2以上でしか使用することができません。最初のバージョン設定に気をつけてください。
if (true)
ここのコマンドが実行される
if (false)
ここのコマンドが実行されない
条件式の設定:変数=条件式
ロング発動用の変数:longConditionと、ショート発動用の変数:shortConditionに、自分の投資ルールに基づく条件式を当てはめるだけです。
longCondition = ロングにエントリーする条件
shortCondition = ショートにエントリーする条件
エントリーの設定:strategy.entry()
ロングまたはショートでエントリーするときのコマンドです。
ロングでエントリーする場合のコマンド例
strategy.entry("My Long Entry", strategy.long, comment="Long")
ショートでエントリーする場合のコマンド例
strategy.entry("My Short Entry", strategy.short, comment="Short")
各エントリーのIDを設定します。
strategy.entry("My Long Entry")
strategy.entry("My Short Entry")
エントリーするマーケットポジションを設定します。strategy.longでロング、strategy.shortでショートにエントリします。
strategy.entry(..., strategy.long)
strategy.entry(..., strategy.short)
commentオプションを利用しない場合は各エントリーに設定したIDがグラフ上に表示されます。IDから表示させる名称を変更したい場合はcommentオプションに設定してください。
strategy.entry(..., comment="Long")
strategy.entry(..., comment="Short")
注文タイプの設定があります。limit(指値)とstop(損切)が用意されていて、どちらも設定しない場合は自動的に「成行」注文になります。その他にもstrategy.entry()にはオプション設定が用意されています。設定に合わせて適宜変更してください。
strategy.entry(id, long, qty, limit, stop, oca_name, oca_type, comment, when) → void
基本設定のテンプレート
説明で記述するととても長く分かりにくくなりましたので、最後に基本設定状態をテンプレートとしてまとめておきます。こちらのテンプレートをPineエディターに丸ごとペーストして自分なりの設定を入れていくとやりやすいと思います。
- ※:下記のテンプレートはBitMEX用です。
//@version=3
strategy(title="my_strategy_name", shorttitle="MS1", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.15, pyramiding=0, currency=currency.USD)
longCondition = ロングにエントリーする条件
if (longCondition)
strategy.entry("My Long Entry", strategy.long, comment="Long")
shortCondition = ショートにエントリーする条件
if (shortCondition)
strategy.entry("My Short Entry", strategy.short, comment="Short")
今日のdot
bot開発にはロジックのテストが必要なためバックテストの環境は必須です。TradingViewのPineスクリプと投資戦略テスターを使ったバックテスト環境は気軽に始めることができますので良いです。
TradingViewの投資戦略テスターを使ったバックテストは無料プランでも行うことが可能です。まだ登録が済んでいない方は下記のページをご参照ください。
TradingViewの新規登録手順
TradingViewは、トレードに関する数多くの指標を閲覧したり、トレード戦略をバックテストにて事前確認したりできます。今回はそのTradingViewの新規登録手順を解説します。登録作業はとても簡単に終わります。
また、3つの有料プランも最初の30日は無料でテストすることが可能です。有料プランを検討されている方は無料の30日間を活用して使い勝手を試しておきましょう。無料プランと有料プランの比較は下記のページをご参照ください。
TradingViewのプランの比較と主要機能説明
TradingViewには、無料プランと3つの有料プランを主要な機能や料金面で比較。無料プランと有料プランではどれぐらいの機能的な差があるのか、そして有料プランを選択するとしたらどのプランを選ぶべきなのか、プラン選択時の指針となるようまとめています。