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 barraCompatibilidade com o nativo
O Replica Engine tenta imitar o comportamento do strategy() em:
- Execução na barra seguinte ao sinal (
closevsopen) - Cálculo de PnL por trade
- Curva de equity acumulada
API / Funções
| Função | Parâmetros | Retorno | Descrição |
|---|---|---|---|
init() | capital | — | Inicializa o motor com capital inicial |
buy() | price, qty | — | Executa entrada long |
sell() | price, qty | — | Fecha posição long |
getEquity() | — | float | Capital atual |
getTrades() | — | array<Trade> | Lista de trades fechados |
getPnL() | — | float | P&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
| Recurso | strategy() nativo | Replica Engine |
|---|---|---|
| Posições long | ✅ | ✅ |
| Posições short | ✅ | ❌ |
| Comissões | ✅ | ❌ |
| Slippage | ✅ | ❌ |
| Pyramiding | ✅ | ❌ |
| Curva de equity | ✅ | ✅ |
| Dentro de indicator() | ❌ | ✅ |
| Visual combinado | ❌ | ✅ |
Limitações
| Limitação | Impacto |
|---|---|
| Apenas long | Não aplicável a estratégias que operam short |
| Sem comissões | Resultados inflados vs. trading real |
| Sem slippage | Fills irreais em alta volatilidade |
| Sem pyramiding | Apenas uma posição por vez |
Quando usar / não usar
| Cenário | Recomendaçã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.
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.
LibBacktestingDayRange
Biblioteca Pine Script para filtrar backtesting por range de datas específico. Escrita em Pine Script v1 com documentação incompleta (TODOs).