トレーディングビューの投資戦略テスター(Pineスクリプト)でテスト期間を指定する

トレーディングビューの戦略テストには、一度に計算できる売買数の上限があります。上限を超えると計算されないため、テスト期間を絞ることで売買数を減らします。

投資戦略テスターの内容

指定したテスト期間内のみ売買を行います。

短期SMAと長期SMAのゴールデンクロス、デッドクロス発生時に売買を行います。

売買はドテンで行うため、ポジションのクローズはありません。

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

設定画面(入力)

Pineスクリプトのコード

内容は新規作成時のサンプルコードを修正したものです。

< 修正箇所 >

  • SMAの入力値を設定可能に変更
  • テスト期間の指定内のみ売買するよう変更
  • SMAを表示するように変更(売買箇所確認に利用)

解説

テスト期間の取得
// 開始日
start = timestamp(input(2018, "テスト開始 年"), input(10, "テスト開始 月"), input(1, "テスト開始 日"), 0, 0)    // 時分は0時0分を指定
// 終了日(未来日を指定すると自動的に現在までが期間となる)
end = timestamp(input(9999, "テスト終了 年"), input(1, "テスト終了 月"), input(1, "テスト終了 日"), 0, 0)   // 時分は0時0分を指定

timestamp関数は指定された日のUNIX時刻を返します。
終了日に未来日を指定すると自動的に現在までが期間となります。
timestamp関数の引数では、以下の項目を指定します。

timezone (string) (オプション引数)タイムゾーン
year (integer) 年
month (integer) 月
day (integer) 日
hour (integer) 時間
minute (integer) 分

※タイムゾーンは省略可能です。今回は省略していますが、指定する場合、日本のタイムゾーンは”Asia/Tokyo”です。
 

テスト期間の判定
// テスト期間判定
// 開始日~終了日の期間内か判定する
// 期間内の場合、true.期間外の場合、false.
is_test_period() =>
    iff(time >= start and time >= end, true, false)

テスト期間の判定をする関数を宣言しています。
timeはトレーディングビューが事前に使用している文字(ビルドイン変数)で、こちらで何も設定しなくてもUNIX形式の現在の足の時間が入っています。
※因みに、現在の時刻はtimenowに入っています
時刻が開始日以降 かつ 時刻が終了日以前 の場合、
つまり、開始日~終了日の期間内の場合はTrueが返却されます。

 

実際の判定箇所
// テスト期間内か判定する
if is_test_period()
    if longCondition
        // ロング
        strategy.entry("Long", strategy.long)
    if shortCondition
        // ショート
        strategy.entry("Short", strategy.short)

宣言済のis_test_period()関数を呼び出して、テスト期間内か判定します。
テスト期間内のみ売買を行います。