Position (Electrified)
Biblioteca Pine Script v6 para simulação de trades individuais dentro de indicadores: rastreia entrada, saída, PnL e estado da posição sem usar strategy().
Autor: Electrified
Tipo: Biblioteca (library)
Versão Pine Script: v6
Categoria: Backtesting
Fonte: TradingView Script
Visão geral
Position é a biblioteca do autor Electrified para simular trades individuais dentro de um indicator() Pine Script v6. Enquanto outras bibliotecas de backtesting focam em métricas agregadas, Position foca em rastrear o estado de uma posição aberta barra a barra.
Diferencial: Compatível com Pine Script v6 (a versão mais recente), ao contrário de muitas bibliotecas de backtesting ainda em versões mais antigas.
Como funciona
Ciclo de vida de uma posição
Estado: FLAT
│
│ pos.open(price, direction)
▼
Estado: OPEN
│ pos.update(high, low) [a cada barra]
│
├── TP atingido → pos.close("tp") → Estado: FLAT
├── SL atingido → pos.close("sl") → Estado: FLAT
└── Sinal manual → pos.close("exit") → Estado: FLATRastreamento por barra
A biblioteca rastreia em cada barra:
- PnL não realizado (MTM — Mark-to-Market)
- MFE (Maximum Favorable Excursion) — maior ganho potencial
- MAE (Maximum Adverse Excursion) — maior perda potencial
MFE e MAE são úteis para otimizar TP e SL.
API / Funções
| Função | Parâmetros | Retorno | Descrição |
|---|---|---|---|
new() | — | Position | Cria um novo objeto de posição |
open() | price, direction, tp, sl | — | Abre posição |
update() | high, low, close | bool | Atualiza estado; retorna true se fechou |
close() | price, reason | — | Fecha posição manualmente |
isFlat() | — | bool | Verdadeiro se não há posição aberta |
isLong() | — | bool | Verdadeiro se posição é long |
isShort() | — | bool | Verdadeiro se posição é short |
unrealizedPnL() | price | float | PnL não realizado ao preço atual |
mfe() | — | float | Maximum Favorable Excursion |
mae() | — | float | Maximum Adverse Excursion |
Exemplo de uso
//@version=6
indicator("Position Library — Exemplo", overlay=true)
import Electrified/Position/6 as pos
// Criar objeto de posição
p = pos.new()
// Parâmetros
atr = ta.atr(14)
tp = close + atr * 2.0
sl = close - atr * 1.0
// Sinal de entrada
longSignal = ta.crossover(ta.rsi(close, 14), 50)
// Abrir posição
if longSignal and pos.isFlat(p)
pos.open(p, close, "long", tp, sl)
// Atualizar a cada barra
if pos.update(p, high, low, close)
// Posição fechou
result = pos.lastClose(p)
// result.reason: "tp" | "sl" | "manual"
// result.pnl: P&L realizado
// Exibir PnL não realizado
if not pos.isFlat(p)
label.new(bar_index, close,
"PnL: " + str.tostring(pos.unrealizedPnL(p, close), "##.##%"),
style=label.style_label_left, size=size.small)MFE e MAE — Análise de qualidade de trades
MFE (Maximum Favorable Excursion):
Quanto o preço foi a seu favor antes de fechar.
MFE >> TP → seu TP está muito apertado
MFE ≈ TP → TP bem calibrado
MAE (Maximum Adverse Excursion):
Quanto o preço foi contra você antes de fechar.
MAE >> SL → muitos stops sendo atingidos prematuramente
MAE ≈ SL → SL bem calibradoIntegrações
| Script | Como combinar |
|---|---|
| BackTestLib | Agregar trades do Position em estatísticas globais |
| LapseBacktestingTable | Exibir métricas finais em tabela visual |
| TradeTrackerv2 | Visualizar cada trade no gráfico |
Limitações
| Limitação | Impacto |
|---|---|
| Uma posição por vez | Sem pyramiding |
| Sem simulação de comissão nativa | Implementar manualmente no PnL |
| v6 específico | Incompatível com scripts em versões anteriores |
Aviso Legal: Conteúdo educativo. Não constitui recomendação de investimento. Resultados passados não garantem resultados futuros.
LapseBacktestingTable
Biblioteca Pine Script para exibição visual de métricas avançadas de backtesting: Sharpe Ratio, Sortino Ratio, Omega Ratio e tabela de performance personalizada.
MonthlyReturnsVsMarket
Biblioteca Pine Script para exibição de tabela mensal de P&L comparando a performance da estratégia contra um benchmark de mercado (ex: S&P 500, BTC).