超入門 TradingView PineScript
TradingViewユーザー必見! TradingView Pineスクリプト(PineScript)を、元システムエンジニアのAkiが日本語で情報をまとめました。非プログラマの方にも基礎からわかりやすい説明を心掛けています。

バックテスト・フォワードテストを行う(strategy)

ストラテジーでバックテストを行う
TradingView PineScript Pineスクリプト システムトレード チャート

バックテスト用スクリプトを作成する

strategy(ストラテジー)とは、売買の注文を出すためのPineScriptの機能です。注文を後から変更・キャンセルすることも可能です。インジケーターはstudy関数を使いましたが、ストラテジーはstrategy関数を使います。インジケーター(study)で使用できる関数の大半はストラテジーでも使用できます。plot関数でインジケーターを描くことも可能です。

バックテストとフォワードテスト

過去のローソク足を使ってバックテストができる他、リアルタイムのデータを使ったフォワードテストを行うこともできます。Pineエディタタブの右隣にある「ストラテジーテスター」タブから、バックテスト結果を見る事ができます。 スクリプトをチャートに追加すると、自動的にバックテストが始まります。どの足で売買したかがチャート上に表示されます。フォワードテストを行うためには、ティックごとに再計算する必要があります。strategy関数の引数calc_on_every_tickをtrueに設定するか、ストラテジーの設定のプロパティ内から設定する必要があります。 なお、バックテストやフォワードテストはローソク足以外の足(平均足や練行足等)では正しく計算されないため、非推奨となっています。

ストラテジーの簡単なサンプル1

移動平均線のゴールデンクロスで買い、デッドクロスで売る簡単なサンプルを示します。

ソースコード

//@version=5  
strategy("strategyサンプル", overlay = true)  
// 移動平均線の計算  
MA_Short = ta.sma(close, 30)  
MA_Long = ta.sma(close, 100)  
// 売買の注文  
strategy.entry(id = "Entry", direction = strategy.long, when = ta.crossover(MA_Short, MA_Long))  
strategy.exit(id = "Exit", from_entry = "Entry", when = ta.crossover(MA_Long, MA_Short), stop = MA_Long)

コード解説

2行目

strategy関数で、ストラテジーのプロパティを設定します。

4~5行目

売買ポイントを作成するための移動平均線を計算します。

7行目

strategy.entry関数で注文指示を出します。whenで設定した足の翌足始値で成行注文。

8行目

strategy.exit関数で決済指示を出します。whenで設定した足に到達した後、stopの値に到達したら決済します。

買い(エントリー)の関数

買い注文はstrategy.entry()関数またはstrategy.order()関数で行います。保有中に更に購入または空売りする場合はstrategy.entry()関数を使います。

関数strategy.entry()
strategy.order()
機能注文指示を出す
strategy.entry():ピラミッティングあり
strategy.order():ピラミッティングなし
戻り値なし
引数id(必須)
注文の識別子

direction(必須)
strategy.long:買い
strategy.short:空売り

qty(必須)
株数

when
注文する。
後述のlimitとstopのどちらも指定しない場合、
trueの足の翌足始値で購入する

limit
指値注文の価格。whenがtrueになった足に注文が行われる。

stop
逆指値注文の価格。whenがtrueになった足に注文が行われる。

売り(エグジット)の関数

関数strategy.exit()
機能エグジット指示を出す
戻り値なし
引数id(必須)
エグジットの識別子

from_entry(必須)
エントリー関数で指定した識別子

profit(必須)
利確までの価格幅

loss(必須)
損切までの価格幅

limit
利確する価格。

stop
損切する価格。

ストラテジーの簡単なサンプル2

RSI30未満から30以上となったら100株買い、買値から10%上昇したら50株売り、20%上昇したら残り50株売り、買値から5%下落したら全て損切り。

ソースコード

//@version=5
strategy("ストラテジーテスト")
// RSI
RSI = ta.rsi(close, 30)
plot(RSI)
// 注文処理
strategy.entry("Buy", strategy.long, 100, when = 30 < RSI[2] and RSI[1] < 30)
// エグジット
ProfitTakePrice1 = strategy.position_avg_price * 1.1
ProfitTakePrice2 = strategy.position_avg_price * 1.2
LossCutPrice = strategy.position_avg_price * 0.95
// 決済処理
strategy.exit("Sell1", "Buy",  50, limit = ProfitTakePrice1, stop = LossCutPrice)
strategy.exit("Sell2", "Buy",  50, limit = ProfitTakePrice2, stop = LossCutPrice)

コード解説

2行目

strategy関数で、ストラテジーのプロパティを設定します。

6~7行目

注文処理を行います。RSI30未満から30以上となったら100株買います。

8~11行目

決済する価格を求めます。購入価格はstrategy.position_avg_priceで取得できます。二段階にわけて利食いを行います。

12~14行目

決済処理を行います。

参考サイト

Strategies Pine Script User Manual 5 documentation