TradingView用のRCI3本を使ったインジケーターです。
短、中、長期線に対し、それぞれクロスすることでサインやアラートを出します。
※一応軽量化バージョンも作ってみたので、使い勝手のいい方を選んでください。微妙に計算違うのでサインが違います。
≫【軽量化Vr】RCI3本 短期中期長期クロスでサインとアラート
軽量化といっても微々たるものなので期待せず。
RCI3LINE CROSSインジケーター

コチラがインジケーターの画面。
RCIの短期、中期、長期がそれぞれクロスしたタイミングで背景の色が変わってサインが出ます。
一度確定するとリペイントしません。
全部のクロスを表示していまうとゴチャゴチャしてわけがわからなくなると思うので、

このように、短期線だけ強調。
中期線長期線のサインは消す、みたいな感じにできます。
※サインを消すときは、設定で透明度を0%にすると実質消えます。

デフォルトのパラメータは
- 短期:9
- 中期:26
- 長期:52
ですが好みで変更できます。
既存のRCI系のインジケーターは、中期が36になっていることが多いですね。

アラート画面はコチラ。
上から
- 中期が長期を下にクロス
- 中期が長期を上にクロス
- 短期が長期を下にクロス
- 短期が長期を上にクロス
- 短期が中期を下にクロス
- 短期が中期を上にクロス
です。
英語で書いてありますが、まぁなんとなくわかると思います。
任意の時間足と通貨で、欲しいアラートを設定してください。
RCI3LINE CROSSインジケーターコード
//@version=5
indicator("RCI Cross Indicator", shorttitle="RCI Cross", overlay=false)
// Periods
itvs = input.int(9, "Short Term RCI Period", minval=2, maxval=100)
itvm = input.int(26, "Mid Term RCI Period", minval=2, maxval=100)
itvl = input.int(52, "Long Term RCI Period", minval=2, maxval=100)
// Show alerts
showAlerts = input.bool(true, "Show Alerts")
// RCI calculation with improved performance
rci(length) =>
var float rank = na
var float sum = na
// Calculate ranking for each period
sum := 0.0
for i = 0 to length - 1
rank := 1.0
current_price = close[i]
// Count how many prices are lower than current
for j = 0 to length - 1
if current_price > close[j]
rank += 1.0
else if current_price == close[j] and j > i
rank += 0.5
// Calculate squared difference
period_pos = i + 1
diff = period_pos - rank
sum += diff * diff
// RCI formula: (1 - 6 * Σd² / (n³ - n)) * 100
n = length
rci_value = (1.0 - 6.0 * sum / (n * n * n - n)) * 100.0
rci_value
// Calculate RCI values
rciShort = rci(itvs)
rciMid = rci(itvm)
rciLong = rci(itvl)
// Cross conditions
crossShortMidUp = ta.crossover(rciShort, rciMid)
crossShortMidDown = ta.crossunder(rciShort, rciMid)
crossShortLongUp = ta.crossover(rciShort, rciLong)
crossShortLongDown = ta.crossunder(rciShort, rciLong)
crossMidLongUp = ta.crossover(rciMid, rciLong)
crossMidLongDown = ta.crossunder(rciMid, rciLong)
// Alert conditions (alertcondition must be in global scope)
alertcondition(showAlerts and crossShortMidUp, title="Short-Mid Up Cross", message="Short Term RCI crossed above Mid Term RCI!")
alertcondition(showAlerts and crossShortMidDown, title="Short-Mid Down Cross", message="Short Term RCI crossed below Mid Term RCI!")
alertcondition(showAlerts and crossShortLongUp, title="Short-Long Up Cross", message="Short Term RCI crossed above Long Term RCI!")
alertcondition(showAlerts and crossShortLongDown, title="Short-Long Down Cross", message="Short Term RCI crossed below Long Term RCI!")
alertcondition(showAlerts and crossMidLongUp, title="Mid-Long Up Cross", message="Mid Term RCI crossed above Long Term RCI!")
alertcondition(showAlerts and crossMidLongDown, title="Mid-Long Down Cross", message="Mid Term RCI crossed below Long Term RCI!")
// Plotting
plot(rciShort, color=color.red, title="Short Term RCI", linewidth=2)
plot(rciMid, color=color.green, title="Mid Term RCI", linewidth=2)
plot(rciLong, color=color.blue, title="Long Term RCI", linewidth=2)
// Reference lines
hline(80, "Overbought", color=color.red, linestyle=hline.style_dashed)
hline(20, "Strong Buy Zone", color=color.red, linestyle=hline.style_dotted)
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_solid)
hline(-20, "Strong Sell Zone", color=color.blue, linestyle=hline.style_dotted)
hline(-80, "Oversold", color=color.blue, linestyle=hline.style_dashed)
// Background colors for cross signals
bgcolor(crossShortMidUp ? color.new(color.lime, 85) :
crossShortMidDown ? color.new(color.red, 85) :
crossShortLongUp ? color.new(color.aqua, 85) :
crossShortLongDown ? color.new(color.orange, 85) :
crossMidLongUp ? color.new(color.purple, 85) :
crossMidLongDown ? color.new(color.yellow, 85) : na,
title="Cross Signals")
// Plot cross signals as shapes
plotshape(crossShortMidUp, title="Short-Mid Up", location=location.bottom,
style=shape.triangleup, size=size.small, color=color.lime)
plotshape(crossShortMidDown, title="Short-Mid Down", location=location.top,
style=shape.triangledown, size=size.small, color=color.red)
// Table for current values (optional)
if barstate.islast
var table infoTable = table.new(position.top_right, 2, 4, bgcolor=color.white, border_width=1)
table.cell(infoTable, 0, 0, "Period", text_color=color.black)
table.cell(infoTable, 1, 0, "RCI Value", text_color=color.black)
table.cell(infoTable, 0, 1, "Short (" + str.tostring(itvs) + ")", text_color=color.red)
table.cell(infoTable, 1, 1, str.tostring(rciShort, "#.##"), text_color=color.red)
table.cell(infoTable, 0, 2, "Mid (" + str.tostring(itvm) + ")", text_color=color.green)
table.cell(infoTable, 1, 2, str.tostring(rciMid, "#.##"), text_color=color.green)
table.cell(infoTable, 0, 3, "Long (" + str.tostring(itvl) + ")", text_color=color.blue)
table.cell(infoTable, 1, 3, str.tostring(rciLong, "#.##"), text_color=color.blue)
※2025/9 表示修正しました。
不具合あればコメントなどでお知らせください。
注意点として、RCI系のインジケーターは読み込みに時間がかることが多いです。(処理がたくさん)
インジケーターが映らなくなったら、再読み込みか、表示非表示ボタンを押すと改善されることがあります。


コメント