PINE LIBRARY
equity_curve

Library "equity_curve"
f_remove_exchange_name(name)
Remove exchange prefix from ticker string (e.g., "BINANCE:BTCUSD" → "BTCUSD")
Parameters:
name (simple string): Ticker string potentially containing exchange prefix
Returns: Ticker without exchange prefix
f_roc()
Calculate bar-over-bar return as decimal (close-to-close, for buy-and-hold)
Returns: Return as decimal (e.g., 0.02 for +2%)
f_roc_entry()
Calculate open-to-close return (realistic strategy entry assumption at bar open)
Returns: Intrabar return as decimal
f_equity(ticker1, ticker2, ticker3, ticker4, ticker5, ticker6, best_asset, r1, r2, r3, r4, r5, r6, backtest, prev_equity, prev_peak, prev_dd)
Calculate strategy equity for a rotation system (stateless — caller must maintain var state).
Uses best_asset[2] so signal is visible 1 bar before equity acts on it.
Parameters:
ticker1 (simple string): Asset 1 ticker string
ticker2 (simple string): Asset 2 ticker string
ticker3 (simple string): Asset 3 ticker string
ticker4 (simple string): Asset 4 ticker string
ticker5 (simple string): Asset 5 ticker string
ticker6 (simple string): Asset 6 ticker string
best_asset (string): The currently selected best-performing asset ticker
r1 (float): Per-bar return for asset 1 (open-to-close)
r2 (float): Per-bar return for asset 2
r3 (float): Per-bar return for asset 3
r4 (float): Per-bar return for asset 4
r5 (float): Per-bar return for asset 5
r6 (float): Per-bar return for asset 6
backtest (bool): Whether backtesting is active this bar
prev_equity (float): Previous bar's equity value (caller initializes var as na)
prev_peak (float): Previous bar's peak equity value (caller initializes var as na)
prev_dd (float): Previous bar's max drawdown value (caller initializes var as 0.0)
Returns: [equity, peak_equity, max_drawdown]
f_buy_and_hold(r, backtest, prev_equity, prev_peak, prev_dd)
Calculate buy-and-hold equity for a single asset (stateless — caller must maintain var state)
Parameters:
r (float): Per-bar return (close-to-close)
backtest (bool): Whether backtesting is active this bar
prev_equity (float): Previous bar's equity value (caller initializes var as na)
prev_peak (float): Previous bar's peak equity value (caller initializes var as na)
prev_dd (float): Previous bar's max drawdown value (caller initializes var as 0.0)
Returns: [equity, peak_equity, max_drawdown]
f_since(active, prev_count)
Calculate lookback period as bar count since condition became true (stateless — caller must maintain var state)
Parameters:
active (bool): Whether the counting condition is active this bar
prev_count (int): Previous bar's raw count (caller initializes var as 0)
Returns: [output, count] — output is the adjusted lookback for metrics; count is the raw counter to feed back next bar
f_best_asset_col(ticker1, ticker2, ticker3, ticker4, ticker5, ticker6, best_asset, backtest, colors)
Return color for equity curve based on currently held asset.
Uses best_asset[1] so signal is visible 1 bar before equity execution.
Parameters:
ticker1 (simple string): Asset 1 ticker string
ticker2 (simple string): Asset 2 ticker string
ticker3 (simple string): Asset 3 ticker string
ticker4 (simple string): Asset 4 ticker string
ticker5 (simple string): Asset 5 ticker string
ticker6 (simple string): Asset 6 ticker string
best_asset (string): The confirmed best-performing asset ticker
backtest (bool): Whether backtesting is active
colors (array<color>): Array of 8 colors: [asset1, asset2, asset3, asset4, asset5, asset6, usd, text]
Returns: Color corresponding to the currently held asset
f_PerformanceMetrics(base, Lookback, backtest, max_drawdown)
Calculate performance metrics from an equity curve
Parameters:
base (float): The equity curve series
Lookback (int): Number of bars to analyze (capped at 4998)
backtest (bool): Whether backtesting is active
max_drawdown (float): Maximum drawdown value (pre-calculated, as decimal e.g. 0.25 = 25%)
Returns: Array of 10 floats: [mean_all%, mean_pos%, mean_neg%, stdev_all%, stdev_pos%, stdev_neg%, sharpe, sortino, omega, max_dd%]
f_PerfMetricTable(p, ticker1, ticker2, ticker3, ticker4, ticker5, ticker6, strategy, a1, a2, a3, a4, a5, a6, colors)
Populate a performance metrics comparison table. Caller must create the table with `var` and pass it in.
Should only be called on barstate.islast.
Parameters:
p (table): Pre-created table (caller uses: var table p = table.new(position.top_left, 8, 15, ...))
ticker1 (simple string): Asset 1 ticker string
ticker2 (simple string): Asset 2 ticker string
ticker3 (simple string): Asset 3 ticker string
ticker4 (simple string): Asset 4 ticker string
ticker5 (simple string): Asset 5 ticker string
ticker6 (simple string): Asset 6 ticker string
strategy (array<float>): Strategy metrics array (from f_PerformanceMetrics)
a1 (array<float>): Buy-and-hold metrics for asset 1
a2 (array<float>): Buy-and-hold metrics for asset 2
a3 (array<float>): Buy-and-hold metrics for asset 3
a4 (array<float>): Buy-and-hold metrics for asset 4
a5 (array<float>): Buy-and-hold metrics for asset 5
a6 (array<float>): Buy-and-hold metrics for asset 6
colors (array<color>): Array of 8 colors
Returns: The table object
f_remove_exchange_name(name)
Remove exchange prefix from ticker string (e.g., "BINANCE:BTCUSD" → "BTCUSD")
Parameters:
name (simple string): Ticker string potentially containing exchange prefix
Returns: Ticker without exchange prefix
f_roc()
Calculate bar-over-bar return as decimal (close-to-close, for buy-and-hold)
Returns: Return as decimal (e.g., 0.02 for +2%)
f_roc_entry()
Calculate open-to-close return (realistic strategy entry assumption at bar open)
Returns: Intrabar return as decimal
f_equity(ticker1, ticker2, ticker3, ticker4, ticker5, ticker6, best_asset, r1, r2, r3, r4, r5, r6, backtest, prev_equity, prev_peak, prev_dd)
Calculate strategy equity for a rotation system (stateless — caller must maintain var state).
Uses best_asset[2] so signal is visible 1 bar before equity acts on it.
Parameters:
ticker1 (simple string): Asset 1 ticker string
ticker2 (simple string): Asset 2 ticker string
ticker3 (simple string): Asset 3 ticker string
ticker4 (simple string): Asset 4 ticker string
ticker5 (simple string): Asset 5 ticker string
ticker6 (simple string): Asset 6 ticker string
best_asset (string): The currently selected best-performing asset ticker
r1 (float): Per-bar return for asset 1 (open-to-close)
r2 (float): Per-bar return for asset 2
r3 (float): Per-bar return for asset 3
r4 (float): Per-bar return for asset 4
r5 (float): Per-bar return for asset 5
r6 (float): Per-bar return for asset 6
backtest (bool): Whether backtesting is active this bar
prev_equity (float): Previous bar's equity value (caller initializes var as na)
prev_peak (float): Previous bar's peak equity value (caller initializes var as na)
prev_dd (float): Previous bar's max drawdown value (caller initializes var as 0.0)
Returns: [equity, peak_equity, max_drawdown]
f_buy_and_hold(r, backtest, prev_equity, prev_peak, prev_dd)
Calculate buy-and-hold equity for a single asset (stateless — caller must maintain var state)
Parameters:
r (float): Per-bar return (close-to-close)
backtest (bool): Whether backtesting is active this bar
prev_equity (float): Previous bar's equity value (caller initializes var as na)
prev_peak (float): Previous bar's peak equity value (caller initializes var as na)
prev_dd (float): Previous bar's max drawdown value (caller initializes var as 0.0)
Returns: [equity, peak_equity, max_drawdown]
f_since(active, prev_count)
Calculate lookback period as bar count since condition became true (stateless — caller must maintain var state)
Parameters:
active (bool): Whether the counting condition is active this bar
prev_count (int): Previous bar's raw count (caller initializes var as 0)
Returns: [output, count] — output is the adjusted lookback for metrics; count is the raw counter to feed back next bar
f_best_asset_col(ticker1, ticker2, ticker3, ticker4, ticker5, ticker6, best_asset, backtest, colors)
Return color for equity curve based on currently held asset.
Uses best_asset[1] so signal is visible 1 bar before equity execution.
Parameters:
ticker1 (simple string): Asset 1 ticker string
ticker2 (simple string): Asset 2 ticker string
ticker3 (simple string): Asset 3 ticker string
ticker4 (simple string): Asset 4 ticker string
ticker5 (simple string): Asset 5 ticker string
ticker6 (simple string): Asset 6 ticker string
best_asset (string): The confirmed best-performing asset ticker
backtest (bool): Whether backtesting is active
colors (array<color>): Array of 8 colors: [asset1, asset2, asset3, asset4, asset5, asset6, usd, text]
Returns: Color corresponding to the currently held asset
f_PerformanceMetrics(base, Lookback, backtest, max_drawdown)
Calculate performance metrics from an equity curve
Parameters:
base (float): The equity curve series
Lookback (int): Number of bars to analyze (capped at 4998)
backtest (bool): Whether backtesting is active
max_drawdown (float): Maximum drawdown value (pre-calculated, as decimal e.g. 0.25 = 25%)
Returns: Array of 10 floats: [mean_all%, mean_pos%, mean_neg%, stdev_all%, stdev_pos%, stdev_neg%, sharpe, sortino, omega, max_dd%]
f_PerfMetricTable(p, ticker1, ticker2, ticker3, ticker4, ticker5, ticker6, strategy, a1, a2, a3, a4, a5, a6, colors)
Populate a performance metrics comparison table. Caller must create the table with `var` and pass it in.
Should only be called on barstate.islast.
Parameters:
p (table): Pre-created table (caller uses: var table p = table.new(position.top_left, 8, 15, ...))
ticker1 (simple string): Asset 1 ticker string
ticker2 (simple string): Asset 2 ticker string
ticker3 (simple string): Asset 3 ticker string
ticker4 (simple string): Asset 4 ticker string
ticker5 (simple string): Asset 5 ticker string
ticker6 (simple string): Asset 6 ticker string
strategy (array<float>): Strategy metrics array (from f_PerformanceMetrics)
a1 (array<float>): Buy-and-hold metrics for asset 1
a2 (array<float>): Buy-and-hold metrics for asset 2
a3 (array<float>): Buy-and-hold metrics for asset 3
a4 (array<float>): Buy-and-hold metrics for asset 4
a5 (array<float>): Buy-and-hold metrics for asset 5
a6 (array<float>): Buy-and-hold metrics for asset 6
colors (array<color>): Array of 8 colors
Returns: The table object
파인 라이브러리
트레이딩뷰의 진정한 정신에 따라, 작성자는 이 파인 코드를 오픈소스 라이브러리로 게시하여 커뮤니티의 다른 파인 프로그래머들이 재사용할 수 있도록 했습니다. 작성자에게 경의를 표합니다! 이 라이브러리는 개인적으로 사용하거나 다른 오픈소스 게시물에서 사용할 수 있지만, 이 코드의 게시물 내 재사용은 하우스 룰에 따라 규제됩니다.
면책사항
해당 정보와 게시물은 금융, 투자, 트레이딩 또는 기타 유형의 조언이나 권장 사항으로 간주되지 않으며, 트레이딩뷰에서 제공하거나 보증하는 것이 아닙니다. 자세한 내용은 이용 약관을 참조하세요.
파인 라이브러리
트레이딩뷰의 진정한 정신에 따라, 작성자는 이 파인 코드를 오픈소스 라이브러리로 게시하여 커뮤니티의 다른 파인 프로그래머들이 재사용할 수 있도록 했습니다. 작성자에게 경의를 표합니다! 이 라이브러리는 개인적으로 사용하거나 다른 오픈소스 게시물에서 사용할 수 있지만, 이 코드의 게시물 내 재사용은 하우스 룰에 따라 규제됩니다.
면책사항
해당 정보와 게시물은 금융, 투자, 트레이딩 또는 기타 유형의 조언이나 권장 사항으로 간주되지 않으며, 트레이딩뷰에서 제공하거나 보증하는 것이 아닙니다. 자세한 내용은 이용 약관을 참조하세요.