1Copy the scriptPress Copy script above, or the copy button on the code below.
2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.
Source Code
61 lines of Pine Script v5 from tradingview/SPE_Triangulation.pine, published under MIT. Keep the author's credit and licence lines when you reuse it.
SPE_Triangulation.pine
// SPE Triangulation — multi-factor market mirror (TradingView Pine v5)
// Mirrors the lab idea: stock vs domestic index vs US index (request.security).
// This is a visual proxy, NOT the Python logistic model.
//
// How to use:
// 1) TradingView → Pine Editor → New blank indicator → paste → Save → Add to chart
// 2) On inputs: set Domestic Index (e.g. IDXCOMPOSITE or JKSE) and US Index (SPX)
// 3) Works on any symbol you open on the chart
//@version=5
indicator("SPE Triangulation", shorttitle="SPE-Tri", overlay=false, timeframe="", timeframe.gaps=false)
// ——— Inputs (change freely — no hardcoded equity) ———
domSym = input.symbol("IDXCOMPOSITE", "Domestic index")
usSym = input.symbol("SPX", "US index")
win = input.int(60, "Rolling window", minval=10, maxval=250)
showBeta = input.bool(true, "Show betas")
showCorr = input.bool(true, "Show correlations")
showR2 = input.bool(true, "Show R² proxy (corr² to domestic)")
// ——— Series ———
stockRet = ta.change(math.log(close))
domClose = request.security(domSym, timeframe.period, close)
usClose = request.security(usSym, timeframe.period, close)
domRet = ta.change(math.log(domClose))
usRet = ta.change(math.log(usClose))
// Rolling correlation & beta (cov/var)
corrDom = ta.correlation(stockRet, domRet, win)
corrUs = ta.correlation(stockRet, usRet, win)
varDom = ta.variance(domRet, win)
varUs = ta.variance(usRet, win)
covDom = ta.correlation(stockRet, domRet, win) * ta.stdev(stockRet, win) * ta.stdev(domRet, win)
covUs = ta.correlation(stockRet, usRet, win) * ta.stdev(stockRet, win) * ta.stdev(usRet, win)
betaDom = varDom != 0 ? covDom / varDom : na
betaUs = varUs != 0 ? covUs / varUs : na
r2Dom = corrDom * corrDom
// ——— Plots ———
hline(0, "Zero", color=color.new(color.gray, 50))
plot(showCorr ? corrDom : na, "Corr domestic", color=color.teal, linewidth=2)
plot(showCorr ? corrUs : na, "Corr US", color=color.orange, linewidth=2)
plot(showBeta ? betaDom : na, "Beta domestic", color=color.aqua, linewidth=1, display=display.pane)
plot(showBeta ? betaUs : na, "Beta US", color=color.fuchsia, linewidth=1, display=display.pane)
plot(showR2 ? r2Dom : na, "R² vs domestic", color=color.yellow, linewidth=1, style=plot.style_area, histbase=0)
// Background when highly coupled to market (high R²)
bgcolor(r2Dom > 0.6 ? color.new(color.teal, 92) : na, title="High market R²")
// Table snapshot
var table t = table.new(position.top_right, 2, 5, bgcolor=color.new(color.black, 70))
if barstate.islast
table.cell(t, 0, 0, "SPE Triangulation", text_color=color.white, text_size=size.small)
table.cell(t, 0, 1, "β dom", text_color=color.gray, text_size=size.tiny)
table.cell(t, 1, 1, str.tostring(betaDom, "#.####"), text_color=color.aqua, text_size=size.tiny)
table.cell(t, 0, 2, "β US", text_color=color.gray, text_size=size.tiny)
table.cell(t, 1, 2, str.tostring(betaUs, "#.####"), text_color=color.fuchsia, text_size=size.tiny)
table.cell(t, 0, 3, "ρ dom / ρ US", text_color=color.gray, text_size=size.tiny)
table.cell(t, 1, 3, str.tostring(corrDom, "#.##") + " / " + str.tostring(corrUs, "#.##"), text_color=color.white, text_size=size.tiny)
table.cell(t, 0, 4, "R² dom", text_color=color.gray, text_size=size.tiny)
table.cell(t, 1, 4, str.tostring(r2Dom, "#.##"), text_color=color.yellow, text_size=size.tiny)
Overview
SPE Triangulation plots rolling correlations, betas against each index and an R-squared area for the domestic index, each with a toggle. The background shades when the symbol is closely coupled to the domestic index. A small table lists the latest betas and correlations. Index symbols and the window are inputs.
The inputs you can change from the gear icon on the chart. Defaults are the author's.
Setting
Type
Default
Variable
Domestic index
symbol
IDXCOMPOSITE
domSym
US index
symbol
SPX
usSym
Rolling window
int
60
win
Show betas
bool
true
showBeta
Show correlations
bool
true
showCorr
Show R² proxy (corr² to domestic)
bool
true
showR2
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.
Asymmetrical RSI is an indicator that computes a custom relative strength index from the rate of change of a user-selected source. It plots the resulting ARSI line in a separate pane with color coding that turns green above the overbought level and red below t
This indicator calculates momentum setups based on the Relative Strength Index (RSI) and plots in a separate pane. It offers multiple scanning modes such as Continuous Break, Continuous Retracement, Flip Break, Flip Retracement, and both regular and hidden div
Range Volume Change compares volume inside a chosen session window with the same window on the previous day and plots that change as a percentage. It accumulates volume during the window and, when enabled, volume outside it, drawing growing columns in a separa
This indicator calculates a modified MACD oscillator and signal line alongside a trend EMA filter, plotting the output as a stylized column histogram in a separate pane. Instead of plotting true MACD distance, it quantifies positive and negative histogram mome
This indicator plots the Average Directional Index in a separate pane and colors the line teal or maroon according to whether plus DI is above minus DI. A horizontal key level and a silver background mark periods when ADX exceeds that threshold. With labels en
The Mojito v3 Strategy indicator evaluates volatility term structure by calculating the ratio between front-month and second-month VIX futures contracts. It smooths this ratio using a configurable median filter and compares the result against user-defined uppe