トレーディングビューの投信戦略テスターでドンチアンチャンネル+トレンドポートフォリオフィルターでエントリー、クローズする

ドンチアン・チャネル・ブレイクアウト(donchian channel breakout)とトレンド・ポートフォリオ・フィルタ(trend portfolio filter)を利用した投信戦略テスターのサンプルコードです。

ラインの色や濃さなどはPineスクリプトがわからなくても設定のスタイルから変更可能です。

投資戦略テスターの内容

・ドンチアン・チャネル・ブレイクアウトとは

価格が過去の期間の高値を上抜けした場合、ロングを入れ、過去の期間の安値を下抜けした場合、ショートをいれます。

・トレンド・ポートフォリオ・フィルタとは

短期SMAと長期SMAを用いており、短期SMAが長期SMAより高い位置にいる場合のみロングを行い、短期SMAが長期SMAより低い位置にいる場合のみショートを行います。

つまり、長期トレンドの方向と一致した方向にブレイクが発生した場合に売買を行います。

まとめると、ロング、ショートの条件は下記となります。

ロングエントリー条件
過去の高値ライン(エントリー用)<終値
+
短期SMAが長期SMAより上
ショートエントリー条件
過去の安値ライン(エントリー用)>終値
+
短期SMAが長期SMAより下
ロングクローズ条件
過去の安値ライン(クローズ用)>安値
ショートクローズ条件
過去の高値ライン(エントリー用)<高値

クローズ判定ではSMAは対象から除外しています。また、エントリー時は終値と比較していましたが、クローズ時は高値、安値と比較しています。
 

投資戦略テスターのイメージ画像

投資戦略テスターの設定 入力


確認用に表示されている高値、安値ラインとSMAの表示は非表示は切り替え可能となっています。

Pineスクリプトのコード

解説

入力値

// 入力値 ------------------------------------
entry_ch_len = input(18, type=integer, title="ブレイク本数 エントリー")
close_ch_len = input(12, type=integer, title="ブレイク本数 クローズ")

sma_src = input(close, title="SMA ソース")
short_len = input(10, type=integer, title="短期 SMA 期間")
long_len = input(20, type=integer, title="長期 SMA 期間")

SHOW_SMA = input(true, title="SMA 表示/非表示")
SHOW_ENTRY = input(true, title="Enty用 高値、安値 表示/非表示")
SHOW_CLOSE = input(true, title="Close用 高値、安値 表示/非表示")
「ブレイクする本数」に指定した数の足の中から最高値、最安値を取得します。
エントリーとクローズで足の長さを変更できます。
「SMA ソーズ」と短期、長期SMAの期間を指定します。
「表示/非表示」は確認用に表示しているSMA、高値ライン、安値ラインの表示制御に利用します。
 

高値、安値の取得

// 高値、安値
entry_up_bound = highest(high[1], entry_ch_len)
entry_down_bound = lowest(low[1], entry_ch_len)
close_up_bound = highest(high[1], close_ch_len)
close_down_bound = lowest(low[1], close_ch_len)

高値、安値を一つ前の足の高値、安値を基準に取得します。
※現在の足を除外したいため
highest()は与えられた過去のバーで最も高い値を返却します。
lowest()は最も安い値を返却します。
エントリーとクローズの高値、安値は指定本数が異なります。

SMAの取得

// SMA
short_sma = sma(sma_src, short_len)
long_sma = sma(sma_src, long_len)

sma()でSMAの値を計算します。

エントリー、クローズ判定

long_entry = entry_up_bound < close and short_sma > long_sma
short_entry = entry_down_bound > close and short_sma < long_sma
long_close = close_down_bound > low
short_close = close_up_bound < high

上から
ロングエントリー:高値ライン(エントリー)<終値 かつ 短期SMA>長期SMA
ショートエントリー:安値ライン(エントリー)>終値 かつ 短期SMA<長期SMA
ロングクローズ:安値ライン(クローズ)>安値
ショートクローズ:高値ライン(クローズ)<高値
となっています。

エントリー、クローズの売買

// 売買 ------------------------------------
// テスト期間内か判定する
if is_test_period()
    // ロング
    strategy.entry("L", strategy.long, when=long_entry)
    strategy.close("L", when=long_close)
    // ショート
    strategy.entry("S", strategy.short, when=short_entry)
    strategy.close("S", when=short_close)

strategy.entry()でエントリーを行っています。
パラメータは先頭から、1.id、2.ロングかショートか、3.いつ行うか
となっています。
3.いつ行うかに設定した値がTrueの場合、エントリーが行われます。
strategy.close()でクローズを行っています。
パラメータは先頭から、1.id、2.いつ行うか
となっています。