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
Thư viện Pine
Theo đúng tinh thần TradingView, tác giả đã công bố mã Pine này như một thư viện mã nguồn mở để các lập trình viên Pine khác trong cộng đồng có thể tái sử dụng. Chúc mừng tác giả! Bạn có thể sử dụng thư viện này cho mục đích cá nhân hoặc trong các ấn phẩm mã nguồn mở khác, nhưng việc tái sử dụng mã này trong các ấn phẩm phải tuân theo Nội Quy.
Thông báo miễn trừ trách nhiệm
Thông tin và các ấn phẩm này không nhằm mục đích, và không cấu thành, lời khuyên hoặc khuyến nghị về tài chính, đầu tư, giao dịch hay các loại khác do TradingView cung cấp hoặc xác nhận. Đọc thêm tại Điều khoản Sử dụng.
Thư viện Pine
Theo đúng tinh thần TradingView, tác giả đã công bố mã Pine này như một thư viện mã nguồn mở để các lập trình viên Pine khác trong cộng đồng có thể tái sử dụng. Chúc mừng tác giả! Bạn có thể sử dụng thư viện này cho mục đích cá nhân hoặc trong các ấn phẩm mã nguồn mở khác, nhưng việc tái sử dụng mã này trong các ấn phẩm phải tuân theo Nội Quy.
Thông báo miễn trừ trách nhiệm
Thông tin và các ấn phẩm này không nhằm mục đích, và không cấu thành, lời khuyên hoặc khuyến nghị về tài chính, đầu tư, giao dịch hay các loại khác do TradingView cung cấp hoặc xác nhận. Đọc thêm tại Điều khoản Sử dụng.