チャネルブレイクアウト戦略バックテストPineスクリプト
更新 2019年4月13日
テストの終端年月日を調整可能にしました。
更新 2019年4月8日
スリッページを5ティック(0.5USD)設けました。
バックテストが必要だ
バックテストとは、構築した売買戦略が有効かどうか、その戦略に過去のデータを当てはめて結果を検証することをいいます。
チャネルブレイクアウト戦略では、どの時間足の何本の高値安値で参入し何本の高値安値で退出するか、数多く条件を変えて検証する必要があります。
この記事では多機能チャートサービスTradingViewで利用できるPineスクリプトを公開します。このスクリプトを使うことで、様々な足数でのバックテストが比較的簡単にできるようになります。
なおTradingViewでのスクリプト動作方法の説明は他に譲りますのでご了承ください。
スクリプトの公開に先立って、いくつかの条件でのバックテストの結果を見てみましょう。今回紹介するのはいずれも1時間足のもので、期間は今からおよそ1年前の2018年3月から検証してみることにします。
BitMEX手数料の設定は
//@version=3
strategy(
title='Channel breakout strategy',
shorttitle='cRe5520',
overlay=true,
initial_capital=1000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
commission_type=strategy.commission.percent,
commission_value=0.075,
pyramiding=0,
slippage=5,
currency=currency.USD
)
公開スクリプトの冒頭部分です。当初残高を$1000とし、常に残高の100%に相当する額のポジションを取る設定です。全ての約定はストップによるとして手数料率を0.075%に設定します。この手数料率の設定が正しいのか確認をしておきます。
追記 2019年4月8日
掲載スクリプトにスリッページを5ティック(0.5USD)設けました。キャプチャ画像はスリッページ0のものですのでご注意ください。
上のキャプチャは、計算がしやすいように常に$1000の売買をした条件でテストしたものです。支払い手数料 $230.65 / トレード合計 $154000 * 100 = 0.14977%となり、1度の参入退出あたり往復分の手数料が計算されていることが確認できました。
1時間足でのバックテスト2例
結果検証にもどります。まずはタートル流トレーディング'システム2'にあやかった55本参入20本退出の例です。
このテストではチャネルを一般的な最高値最安値で判定しています。3月14日の深夜に価格が乱れて大きくチャネルが開いたのがわかります。
期間中154回の取引がありましたが、60回めあたりをピークに伸び悩み、終盤にかけてドローダウンする結果になりました。
次は、チャネル判定の最高値最安値条件はそのままに、20本参入10本退出にしたものです。過去20時間の最高値最安値をブレイクしたらポジションを持ち、10時間の最安値最高値を更新したら退出という比較的短めの期間で判定する戦略です。
55本20本に比べると当然参入機会が増えて取引が多くなり、中盤でも安定して収益を積み上げました。しかしやはり最近のレンジ進行と上下のヒゲには苦戦したようです。
効率的にバックテストをする仕組み
OH = input(
high,
'high or open',
type=source
)
CL = input(
low,
'low or close',
type=source
)
entry_sticks = input(
55,
'1st period'
)
exit_sticks = input(
20,
'2nd period'
)
公開するPineスクリプトでは、バックテストの条件変更が簡単にできるようにしてあります。Channel breakout trading strategy bot for BitMEX - system'cRe5520' で選択できる、ヒゲを無視してチャネル判定をする動作モードにも対応しています。
赤い四角囲みで時間足や日足が選べることはご存じと思います。Pineスクリプトを反映させると赤丸のところに歯車アイコンが現れます。これをクリックするとスクリプトの条件設定画面が開きます。
チャネル判定をHigh_LowとOpen_Closeのどちらでするかや、参入と退出を判定する期間すなわち足本数を、スクリプトを書き換えることなく変更できて便利です。翻訳の揺れにより'オープン'に対応するのは'終値'となります。
チャネル上下端から何ドル外側で参入退出するかも変数Offsetで調整できます。
ちなみにこのOpen_Closeチャネルでの60時間参入18時間退出のバックテスト結果が、前出の赤色の描き込みがある画面になります。High_Lowとは明らかに異なるラインにも注目してください。
チャネルブレイクアウト戦略Pineスクリプト
TradingViewのPineエディタにペーストしてご利用ください。
Pineスクリプトのステートメントを折り返す場合には、4の倍数以外の数のスペースで字下げをするというルールがあります。
ただしifなどで構成するブロック内の書き出しは、折り返しではないので4の倍数で字下げするというルールもあります。そのためこのスクリプトも3字下げと4字下げが混在しています。気をつけてください。
皆さんがこのスクリプトを使って優位性のあるチャネルを発見できるよう祈っています。記事はここまでです。最後まで読んでくださってありがとうございました。
よい相場が来るといいですね。
RESOLUTION = '1d' FIRST_PERIOD_STICKS = 14 SECOND_PERIOD_STICKS = 3 MARKET_ID = 'ETHUSD' OC_MODE = True