PR

Pineスクリーナーのrequest上限40回の使い方

Pineスクリーナーのrequest上限が5回から40回に TradingView

この記事でわかること

  • Pineスクリーナーのrequest.*()上限が5回から40回に増えた変更の中身
  • 呼び出し回数の数え方と、変わっていない制約
  • 週足・月足・4時間足・SPY比較を1本でスキャンするコード

チャートでは動くのに、Pineスクリーナーに入れると止まるインジケーター。原因の多くはrequest.security()の呼び出し回数でした。週足のトレンド、4時間足の出来高、指数との比較と条件を足していくと、すぐに5回の上限に届いてしまいます。

2026年10月23日、TradingViewは公式ブログで、この上限を40回に引き上げたと発表しました。この記事では変更点と数え方を整理し、旧上限では動かせなかった6回呼び出しのスクリーニング用コードを紹介します。

📊 この記事はTradingViewユーザー向けです

TradingViewをまだ使っていない方は、まず無料アカウントを作成してみましょう。登録は30秒、クレジットカード不要です。

無料でTradingViewを始める →

何が変わったのか

公式ブログによると、Pineスクリーナーで使えるrequest.*()の呼び出し回数が増えました。上限はスクリプト1本あたり5回から40回です。40回は通常のチャート(スーパーチャート)と同じ上限です。

項目 変更前 変更後
スクリーナーの上限 5回 40回
チャートの上限 40回 40回(変更なし)

チャートの上限は、Pine ScriptのマニュアルによるとUltimateプランでは64回です。スクリーナー側の40回にプランによる差があるかは、公式ブログには書かれていません。

公式ブログが挙げている使い道は3つです。1つ目は、週足の上昇トレンド・日足のRSI・4時間足の出来高急増を1本で組み合わせるスキャン。2つ目は、過去1か月でS&P 500を上回った銘柄の抽出です。3つ目は重めのインジケーターです。マルチタイムフレームのダッシュボードや、内部でrequest.*()を呼ぶライブラリ入りのものを、簡略化せずに動かせるとしています。

呼び出し回数の数え方

40回に増えたとはいえ、数え方を知らないと思わぬところで上限に達します。公式が示している数え方のルールは2つです。

同じ引数の呼び出しは1回

まったく同じ引数でrequest.security()を2回書いても、1回として数えます。ただしPine Scriptのマニュアルは、この扱いに「通常は(usually)」という但し書きを付けています。

逆に言えば、銘柄・時間足・計算式のどれかが違えば別の1回です。同じ週足から終値とEMAがほしいときは、タプルでまとめます。[close, ta.ema(close, 20)]なら1回の呼び出しで済みます。

ライブラリの中の呼び出しも数える

importしたライブラリの関数が内部でrequest.*()を使っている場合、その分も上限に含まれます。自分のコードでは2回しか書いていないのに、ライブラリ経由で回数が膨らんでいた、ということが起こり得ます。ライブラリが内部で何回も呼んでいると、5回の枠はすぐに埋まります。今回の引き上げで動かしやすくなるのは、こうしたライブラリ依存のスクリプトです。

変わっていない制約

上限以外の仕様はそのままです。スクリーナー用に書くときは、次の点にも気をつけてください。

  • 要求できる時間足は1・5・15・30分、1・2・4時間、1日・1週・1か月の10種類で、カスタム時間足は使えません
  • ストラテジー(strategy())は非対応で、1つのスクリーンに入れられるインジケーターは1つです
  • 計算に使うのは直近500本のバーです
  • input.symbol()とinput.timeframe()は効かず、デフォルト値で動きます
  • スクリーナーの列になるのはプロットの値で、日本語ヘルプでは最初の10個までとされています

Pineスクリーナーそのものの操作手順はTradingView Pineスクリーナーの使い方で解説しています。指数をそのままスキャン対象にする方法はPineスクリーナーの指数対応にまとめました。

TradingViewで実際に試してみよう

この記事の内容はTradingViewで今すぐ実践できます。無料プランでも十分対応できます。

▶ TradingViewを無料で開く

クレジットカード不要・いつでも解約OK

6回呼び出すスクリーニング用コード

ここからは、旧上限の5回を超える6回のrequest.security()を使うインジケーターです。スクリーナーの時間足を「1日」にして使う前提で書いています。日足のRSIや騰落率はチャートの時間足そのものなので、requestを使わずに計算しています。

//@version=6
indicator("MTFスクリーナー(request 6回)", overlay = false)

// スクリーナーの時間足は「1日」で使う前提
emaLen  = input.int(20, "週足EMAの期間", minval = 2)
rsiLen  = input.int(14, "日足RSIの期間", minval = 2)
volLen  = input.int(20, "4時間足の出来高平均の期間", minval = 2)
volMult = input.float(2.0, "出来高急増とみなす倍率", minval = 1.0)
perfLen = input.int(21, "比較期間(日足の本数)", minval = 5)

// input.symbol() はスクリーナーで効かないため定数で指定
string BENCH = "AMEX:SPY"

// ① 週足:前週の終値と20EMA(確定値のみ)
[wClose, wEma] = request.security(syminfo.tickerid, "W", [close[1], ta.ema(close, emaLen)[1]], lookahead = barmerge.lookahead_on)

// ② 月足:前月の終値と12か月SMA(確定値のみ)
[mClose, mSma] = request.security(syminfo.tickerid, "M", [close[1], ta.sma(close, 12)[1]], lookahead = barmerge.lookahead_on)

// ③ 4時間足:その日の最後の4時間足で、出来高が平均の volMult 倍以上か
volSpike = request.security(syminfo.tickerid, "240", volume > ta.sma(volume, volLen) * volMult)

// ④ 1時間足:その日の最後の1時間足で、9EMAが21EMAより上か
h1Up = request.security(syminfo.tickerid, "60", ta.ema(close, 9) > ta.ema(close, 21))

// ⑤ SPYの日足:perfLen 本前からの騰落率
benchRet = request.security(BENCH, "D", close / close[perfLen] - 1)

// ⑥ SPYの週足:前週の終値と20EMA(確定値のみ)
[bClose, bEma] = request.security(BENCH, "W", [close[1], ta.ema(close, emaLen)[1]], lookahead = barmerge.lookahead_on)

// 日足はチャートの時間足なので request は不要
dRsi    = ta.rsi(close, rsiLen)
selfRet = close / close[perfLen] - 1

weeklyUp  = wClose > wEma
monthlyUp = mClose > mSma
marketUp  = bClose > bEma
beatBench = selfRet > benchRet

score = (weeklyUp ? 1 : 0) + (monthlyUp ? 1 : 0) + (volSpike ? 1 : 0) + (h1Up ? 1 : 0) + (beatBench ? 1 : 0) + (marketUp ? 1 : 0)

plot(score, "スコア(0〜6)")
plot(dRsi, "日足RSI")
plot((selfRet - benchRet) * 100, "対SPY超過リターン(%)")
plot(volSpike ? 1 : 0, "4H出来高急増")
plot(weeklyUp ? 1 : 0, "週足上昇")
plot(marketUp ? 1 : 0, "SPY週足上昇")

このコードは、無料アカウントのチャート(AAPLの日足)でエラーなく動くことを確かめました。Pineスクリーナーは無料プランでは使えないため、スクリーナー上の表示は確認していません。

コードのポイント

①②⑥の上位足では、close[1]とlookahead = barmerge.lookahead_onを組み合わせています。これで確定した前週・前月の値だけを取れます。未確定の足の値を使うと、過去のバーで結果が変わるリペイントが起きるためです。理由はPine Scriptのリペイント問題で詳しく説明しています。

比較対象はS&P 500に連動するETFのSPY(AMEX:SPY)にしました。ほかの指数やETFと比べたい場合は、BENCHの文字列を書き換えてください。スクリーナーではinput.symbol()の値が反映されないため、定数で持たせています。

③④は日足より短い時間足なので、返ってくるのはその日の最後の4時間足・1時間足の値です。「その日のどこかで出来高が急増したか」ではない点に注意してください。

プロットは6個で、ヘルプにある10個の範囲に収まります。フィルターは「スコア」4以上、「日足RSI」70未満のように組みます。これで上昇基調で過熱していない銘柄を絞り込めます。

回数の内訳

番号 銘柄・時間足 取得する値
① 自銘柄・週足 終値と20EMA
② 自銘柄・月足 終値と12か月SMA
③ 自銘柄・4時間足 その日最後の足の出来高急増
④ 自銘柄・1時間足 その日最後の足のEMAの並び
⑤ SPY・日足 騰落率
⑥ SPY・週足 終値と20EMA

①と⑥はどちらも週足ですが、銘柄が違うので別の1回です。タプルでまとめても6回より減らせないので、旧上限の5回では1本にまとめられない構成でした。上位足の値を取る書き方の基本はPine Scriptでマルチタイムフレーム分析を実装する完全ガイドで解説しています。

よくあるつまずき

時間足を「1日」以外にしてしまう

このコードは日足で動かす前提です。スクリーナーの時間足を1時間にすると、perfLenの21本は21時間分になり、「過去1か月」の比較になりません。RSIも1時間足のRSIに変わります。

上限を気にしてタプルにまとめすぎる

同じ銘柄・時間足の値をタプルでまとめるのは有効です。ただ、5回の枠に収めるために条件を1つの式へ押し込む必要は薄れました。読みにくい式は後から直しにくくなります。40回に近づいてきたら、そのときにまとめれば十分です。

こんな場合は関係ない変更点

Pineスクリーナーは、2026年9月時点の料金ページではPremiumとUltimateのプランでしか使えません。EssentialやPlusを使っている場合、今回の引き上げは直接は関係しません。プランごとの違いはTradingViewの有料プランはどれを選ぶ?で比較しています。

また、チャート上でしか使わないインジケーターには影響がありません。チャートの上限はもともと40回(Ultimateは64回)で、今回変わったのはスクリーナー側だけです。

まとめ

  • Pineスクリーナーのrequest.*()上限は、スクリプト1本あたり5回から40回になった
  • 同じ引数の呼び出しは1回と数え、ライブラリ内の呼び出しも上限に含まれる
  • 時間足の種類や500本の計算範囲など、上限以外の仕様は変わっていない
  • 週足・月足・4時間足・SPY比較を組み合わせた6回呼び出しのスキャンが、1本のスクリプトで組めるようになった

自作の条件で数千銘柄をふるいにかけるPineスクリーナーは、2026年9月時点の料金ページではPremiumとUltimateで使える機能です。チャートで作ったマルチタイムフレームのインジケーターを銘柄探しに回したいなら、上位プランを検討する価値があります。まずはスクリーナーの基本操作をPineスクリーナーの使い方で確認してから、今回のコードを試してみてください。

📊 TradingViewプラン比較

プラン 月額 主な特徴
Basic(無料) $0 1タブに1チャート・広告あり・インジケーター2つ・価格アラート3件
Essential $12.95 広告なし・1タブに2チャート・インジケーター5つ・アラート20件
Plus ⭐人気 $29.95 1タブに4チャート・インジケーター10個・アラート100件
Premium $59.95 1タブに8チャート・インジケーター25個・アラート400件
Ultimate $199.95 1タブに16チャート・インジケーター50個・アラート1,000件

月額は月払い。年払いなら最大17%お得(2026年11月の料金ページより)

TradingViewを無料で始める

まずは無料プランで試して、必要なら有料プランへアップグレード

タイトルとURLをコピーしました