この記事でわかること
- 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月の料金ページより)
まずは無料プランで試して、必要なら有料プランへアップグレード
