← ポートフォリオに戻る

チャートプレビュー

RSI + BB Zone チャートプレビュー

機能一覧

使い方

  1. TradingViewでチャートを開く
  2. Pine Editorにコードを貼り付け
  3. 「チャートに追加」をクリック
  4. 設定パネルでパラメータを調整

パラメータ設定

パラメータ デフォルト 説明
RSI期間 14 RSIの計算期間
BB期間 20 ボリンジャーバンドの計算期間
BB偏差 2.0 ボリンジャーバンドの標準偏差倍率
買われすぎ 70 買われすぎ判定の閾値
売られすぎ 30 売られすぎ判定の閾値

ソースコード

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Portfolio Sample - RSI + Bollinger Bands Zone

//@version=6
indicator("RSI + BB Zone [売買ゾーン色分け]", overlay=false)

// ===== 入力パラメータ =====
rsi_len    = input.int(14,   "RSI期間",       minval=1)
bb_len     = input.int(20,   "BB期間",        minval=1)
bb_mult    = input.float(2.0,"BB偏差",        minval=0.1, step=0.1)
ob_level   = input.int(70,   "買われすぎ",    minval=50, maxval=100)
os_level   = input.int(30,   "売られすぎ",    minval=0,  maxval=50)

// ===== RSI計算 =====
rsi = ta.rsi(close, rsi_len)

// ===== RSIにボリンジャーバンドを適用 =====
bb_basis = ta.sma(rsi, bb_len)
bb_dev   = bb_mult * ta.stdev(rsi, bb_len)
bb_upper = bb_basis + bb_dev
bb_lower = bb_basis - bb_dev

// ===== 描画 =====
// RSIライン
plot(rsi, "RSI", color.new(#2962FF, 0), 2)

// ボリンジャーバンド
p_upper = plot(bb_upper, "BB上限", color.new(#787B86, 50), 1)
p_basis = plot(bb_basis, "BB中央", color.new(#787B86, 70), 1, style=plot.style_circles)
p_lower = plot(bb_lower, "BB下限", color.new(#787B86, 50), 1)

// BB帯の塗りつぶし
fill(p_upper, p_lower, color=color.new(#787B86, 92))

// ===== 水平ライン =====
hline(ob_level, "買われすぎ", color.new(#E91E63, 60), hline.style_dashed)
hline(os_level, "売られすぎ", color.new(#2962FF, 60), hline.style_dashed)
hline(50,       "中央",       color.new(#787B86, 80), hline.style_dotted)

// ===== ゾーン色分け =====
// RSIがBB上限を超え & 買われすぎ → 売りゾーン(赤)
// RSIがBB下限を割り & 売られすぎ → 買いゾーン(青)
sell_zone = rsi > bb_upper and rsi > ob_level
buy_zone  = rsi < bb_lower and rsi < os_level

bgcolor(sell_zone ? color.new(#E91E63, 85) : buy_zone ? color.new(#2962FF, 85) : na)

// ===== 反転サイン =====
// BB上限からの反転(売りサイン)
sell_signal = ta.crossunder(rsi, bb_upper) and rsi[1] > ob_level
// BB下限からの反転(買いサイン)
buy_signal  = ta.crossover(rsi, bb_lower)  and rsi[1] < os_level

plotshape(buy_signal,  "買いサイン", shape.circle, location.bottom, color.new(#2962FF, 0), size=size.tiny)
plotshape(sell_signal, "売りサイン", shape.circle, location.top,    color.new(#E91E63, 0), size=size.tiny)

// ===== アラート =====
alertcondition(buy_signal,  "買いシグナル", "RSI買いゾーン反転: RSIがBB下限から上昇 & 売られすぎ圏")
alertcondition(sell_signal, "売りシグナル", "RSI売りゾーン反転: RSIがBB上限から下降 & 買われすぎ圏")

// ===== 情報テーブル =====
var table info = table.new(position.bottom_right, 2, 3, bgcolor=color.new(#1E293B, 10), border_width=1, border_color=color.new(#475569, 50))

if barstate.islast
    zone_text  = sell_zone ? "売りゾーン" : buy_zone ? "買いゾーン" : "— ニュートラル"
    zone_color = sell_zone ? color.new(#E91E63, 0) : buy_zone ? color.new(#2962FF, 0) : color.gray

    table.cell(info, 0, 0, "RSI + BB Zone", text_color=color.white, text_size=size.small, bgcolor=color.new(#2962FF, 0))
    table.cell(info, 1, 0, "",               bgcolor=color.new(#2962FF, 0))
    table.cell(info, 0, 1, "RSI",            text_color=color.white, text_size=size.tiny)
    table.cell(info, 1, 1, str.tostring(rsi, "#.1"), text_color=color.new(#2962FF, 0), text_size=size.tiny)
    table.cell(info, 0, 2, "状態",           text_color=color.white, text_size=size.tiny)
    table.cell(info, 1, 2, zone_text,        text_color=zone_color, text_size=size.tiny)