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

Replica Backtesting Engine

Biblioteca Pine Script que replica o motor de backtesting nativo do TradingView usando arrays, permitindo simulação de estratégias dentro de indicadores. Suporta apenas posições long.

Tipo: Biblioteca (library) Categoria: Backtesting Limitação importante: Suporta apenas posições long; sem simulação de comissões Fonte: TradingView Script


Visão geral

Replica Backtesting Engine reimplementa o comportamento do motor strategy() nativo do TradingView usando arrays internos, possibilitando backtesting dentro de um indicator() com saída visual semelhante ao painel de estratégia nativo.

Por que replicar o motor nativo? Para ter acesso ao contexto visual do indicador (outros plots, labels, etc.) enquanto ainda rodando um backtest estruturado — algo impossível com strategy() puro.

⚠️ Limitação crítica: Esta biblioteca suporta apenas posições long. Não há suporte para short selling. Também não simula comissões ou slippage.


Como funciona

Arrays internos

O motor usa arrays Pine Script para rastrear o estado das posições:

trades[]       → lista de todos os trades fechados
openPosition   → estado da posição atualmente aberta
equity[]       → curva de equity por barra

Compatibilidade com o nativo

O Replica Engine tenta imitar o comportamento do strategy() em:

  • Execução na barra seguinte ao sinal (close vs open)
  • Cálculo de PnL por trade
  • Curva de equity acumulada

API / Funções

FunçãoParâmetrosRetornoDescrição
init()capitalInicializa o motor com capital inicial
buy()price, qtyExecuta entrada long
sell()price, qtyFecha posição long
getEquity()floatCapital atual
getTrades()array<Trade>Lista de trades fechados
getPnL()floatP&L total em %

Exemplo de uso

//@version=6
indicator("Replica Engine — Exemplo Long Only", overlay=false)

import author/ReplicaBacktestingEngine/1 as re

// Inicializar com 10.000 de capital
re.init(10000)

// Sinal de entrada
longSignal = ta.crossover(ta.ema(close, 10), ta.ema(close, 30))
exitSignal = ta.crossunder(ta.ema(close, 10), ta.ema(close, 30))

// Executar trades
if longSignal and re.getPosition() == 0
    re.buy(close, 1)
if exitSignal and re.getPosition() > 0
    re.sell(close, re.getPosition())

// Plotar curva de equity
plot(re.getEquity(), title="Equity", color=color.blue)

Comparação com motor nativo

Recursostrategy() nativoReplica Engine
Posições long
Posições short
Comissões
Slippage
Pyramiding
Curva de equity
Dentro de indicator()
Visual combinado

Limitações

LimitaçãoImpacto
Apenas longNão aplicável a estratégias que operam short
Sem comissõesResultados inflados vs. trading real
Sem slippageFills irreais em alta volatilidade
Sem pyramidingApenas uma posição por vez

Quando usar / não usar

CenárioRecomendação
Estratégia long-only com análise visual complexa✅ Ideal — combina backtest + indicadores na mesma janela
Sistema de reversão (long + short)❌ Use strategy() nativo ou BackTestLib
Backtesting com comissões precisas❌ Não suportado — use strategy() nativo
Prototipagem rápida de ideias long✅ Rápido de implementar

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

On this page