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
Библиотека Pine
В истинном духе TradingView автор опубликовал этот код Pine как библиотеку с открытым исходным кодом, чтобы другие программисты Pine из нашего сообщества могли её использовать. Браво автору! Вы можете использовать эту библиотеку для личного пользования или в других публикациях с открытым исходным кодом, но повторное использование этого кода в публикациях регулируется Правилами поведения.
Отказ от ответственности
Библиотека Pine
В истинном духе TradingView автор опубликовал этот код Pine как библиотеку с открытым исходным кодом, чтобы другие программисты Pine из нашего сообщества могли её использовать. Браво автору! Вы можете использовать эту библиотеку для личного пользования или в других публикациях с открытым исходным кодом, но повторное использование этого кода в публикациях регулируется Правилами поведения.