BackTestLib
Biblioteca Pine Script para backtesting completo dentro de indicadores (indicator()), contornando as limitações do strategy() nativo do TradingView.
Tipo: Biblioteca (library)
Categoria: Backtesting
Fonte: TradingView Script
Visão geral
BackTestLib permite implementar backtesting completo dentro de um indicator() no TradingView, sem depender do strategy() nativo. Isso dá ao desenvolvedor controle total sobre métricas, visualização e lógica de execução.
Problema que resolve: O strategy() nativo do TradingView limita customização visual, não permite combinar facilmente com outros indicadores na mesma janela, e tem comportamentos específicos de execução que nem sempre são adequados para todos os casos de uso.
Como funciona
Arquitetura
Sinais de entrada/saída
↓
BackTestLib.track() → registra cada trade
↓
BackTestLib.stats() → agrega: win rate, PF, drawdown, etc.
↓
Exibição (tabela, plot ou LapseBacktestingTable)Simulação de trades
A biblioteca rastreia cada trade como um objeto com:
- Preço de entrada e saída
- Direção (long/short)
- Resultado em % e pontos
- Timestamp de entrada e saída
API / Funções
| Função | Parâmetros | Retorno | Descrição |
|---|---|---|---|
init() | — | — | Inicializa o contexto de backtesting |
entry() | price, direction, size | — | Registra entrada na posição |
exit() | price, comment | — | Registra saída e fecha o trade |
stats() | — | BacktestStats | Retorna objeto com todas as métricas |
reset() | — | — | Limpa todos os trades registrados |
Objeto BacktestStats
| Campo | Tipo | Descrição |
|---|---|---|
totalTrades | int | Número total de trades |
winRate | float | Taxa de acerto (0.0–1.0) |
profitFactor | float | Lucro bruto / Perda bruta |
maxDrawdown | float | Maior queda de pico a vale |
avgWin | float | Ganho médio por trade vencedor |
avgLoss | float | Perda média por trade perdedor |
Exemplo de uso
//@version=6
indicator("Backtesting com BackTestLib", overlay=true)
import author/BackTestLib/1 as bt
// Inicializar
bt.init()
// Sinal de entrada (exemplo: cruzamento de MA)
fastMA = ta.ema(close, 10)
slowMA = ta.ema(close, 30)
longSignal = ta.crossover(fastMA, slowMA)
shortSignal = ta.crossunder(fastMA, slowMA)
// Registrar entradas e saídas
if longSignal
bt.entry(close, "long", 1)
if shortSignal and bt.isLong()
bt.exit(close, "Saída por cruzamento")
// Obter métricas
s = bt.stats()
// Exibir no gráfico
if barstate.islastconfirmedhistory
label.new(bar_index, high,
"Trades: " + str.tostring(s.totalTrades) +
"\nWin Rate: " + str.tostring(s.winRate * 100, "##.#") + "%" +
"\nProfit Factor: " + str.tostring(s.profitFactor, "##.##"),
style=label.style_label_left)Stack de backtesting recomendado
Para um sistema completo, combine com:
| Biblioteca | Papel |
|---|---|
| BackTestLib | Motor de simulação e agregação |
| Position (Electrified) | Simulação de trade individual |
| LapseBacktestingTable | Tabela visual com métricas avançadas |
| LibBacktestingDayRange | Filtro por período de data |
Limitações
| Limitação | Impacto |
|---|---|
| Sem simulação de slippage nativa | Resultados podem ser melhores que o real |
| Sem simulação de comissão nativa | Implementar manualmente no cálculo de PnL |
| Pine Script tem limite de 500 trades | Backtests muito longos podem atingir o limite |
| Sem pyramiding por padrão | Uma posição por vez |
Aviso Legal: Conteúdo educativo. Não constitui recomendação de investimento. Resultados passados não garantem resultados futuros.
Backtesting
Bibliotecas Pine Script para backtesting avançado em indicadores: simulação de trades, métricas Sharpe/Sortino/Omega, filtros por data e tabelas visuais de performance.
SAT_BACKTEST
Biblioteca Pine Script de backtesting com suporte a sessões, fusos horários, matemática de TP/SL e estratégias de saída configuráveis.