Kaique Mitsuo Silva Yamamoto
Mercado financeiroAutomação de EstratégiasTradingView / Pine ScriptBibliotecasBacktesting

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çãoParâmetrosRetornoDescrição
init()Inicializa o contexto de backtesting
entry()price, direction, sizeRegistra entrada na posição
exit()price, commentRegistra saída e fecha o trade
stats()BacktestStatsRetorna objeto com todas as métricas
reset()Limpa todos os trades registrados

Objeto BacktestStats

CampoTipoDescrição
totalTradesintNúmero total de trades
winRatefloatTaxa de acerto (0.0–1.0)
profitFactorfloatLucro bruto / Perda bruta
maxDrawdownfloatMaior queda de pico a vale
avgWinfloatGanho médio por trade vencedor
avgLossfloatPerda 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:

BibliotecaPapel
BackTestLibMotor de simulação e agregação
Position (Electrified)Simulação de trade individual
LapseBacktestingTableTabela visual com métricas avançadas
LibBacktestingDayRangeFiltro por período de data

Limitações

LimitaçãoImpacto
Sem simulação de slippage nativaResultados podem ser melhores que o real
Sem simulação de comissão nativaImplementar manualmente no cálculo de PnL
Pine Script tem limite de 500 tradesBacktests muito longos podem atingir o limite
Sem pyramiding por padrãoUma posição por vez

Aviso Legal: Conteúdo educativo. Não constitui recomendação de investimento. Resultados passados não garantem resultados futuros.

On this page