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

LevelsManager

Biblioteca Pine Script para gerenciamento de até 6 take-profits escalonados e 1 stop-loss dinâmico por condição, com ajuste automático de tamanho de posição por TP.

Tipo: Biblioteca (library) Categoria: Gestão de Ordens Fonte: TradingView Script


Visão geral

LevelsManager é uma biblioteca de gestão de saídas que suporta até 6 take-profits escalonados e 1 stop-loss dinâmico, com distribuição automática do tamanho de posição entre os diferentes níveis de saída.

Caso de uso: Estratégias profissionais que escalonam saídas em múltiplos alvos — por exemplo, fechar 33% em TP1, 33% em TP2 e 34% em TP3, com SL movido para breakeven após TP1.


Como funciona

Estrutura de saídas

Posição Long — 100 contratos, entrada em 100:

  TP1: 102 → fechar 33 contratos
  TP2: 104 → fechar 33 contratos + mover SL para 102 (breakeven)
  TP3: 108 → fechar 34 contratos restantes
  TP4–6: (opcional) — deixar em branco se não usar
  SL:  98  → sair com todos os contratos restantes

Resultado esperado se TP1, TP2 e SL atingidos (nessa ordem):
  TP1: +2.0% em 33%
  TP2: +4.0% em 33%
  SL em breakeven: 0% em 34%
  Net: ≈ +1.98%

SL dinâmico por condição

O SL pode ser movido automaticamente baseado em condições:

  • Mover para breakeven quando TP1 for atingido
  • Mover para TP1 quando TP2 for atingido ("lock de lucro")
  • SL trailing baseado em ATR

API / Funções

FunçãoParâmetrosRetornoDescrição
init()entry, sl, directionLevelsIdInicializa o gerenciador
addTP()id, price, pct, moveSLAdiciona TP com % da posição e ação no SL
update()id, high, lowExitEventAtualiza e retorna evento de saída
getSLPrice()idfloatPreço atual do SL (pode ter sido movido)
remainingQty()idfloatQuantidade restante na posição
isOpen()idboolVerdadeiro se posição ainda está aberta

Exemplo de uso

//@version=6
indicator("LevelsManager — 3 TPs com SL Dinâmico", overlay=true)

import author/LevelsManager/1 as lm

atr = ta.atr(14)
longSignal = ta.crossover(ta.ema(close, 10), ta.ema(close, 30))

var int lvlId = na

if longSignal
    sl = close - atr * 1.0
    lvlId := lm.init(close, sl, "long")

    // TP1: 50% da posição, mover SL para breakeven ao atingir
    lm.addTP(lvlId, close + atr * 1.5, 0.50, "breakeven")

    // TP2: 30% da posição, mover SL para TP1
    lm.addTP(lvlId, close + atr * 3.0, 0.30, "tp1")

    // TP3: 20% da posição, sem mover SL (já está travado)
    lm.addTP(lvlId, close + atr * 5.0, 0.20, "none")

// Atualizar estado
if not na(lvlId) and lm.isOpen(lvlId)
    event = lm.update(lvlId, high, low)
    // event.type: "tp1", "tp2", "tp3", "sl"
    // event.qty:  quantidade fechada
    // event.price: preço de saída

    // Exibir SL atual
    plot(lm.getSLPrice(lvlId), title="SL Dinâmico", color=color.red)

Integrações

ScriptComo combinar
OrderLibOrderLib para execução visual + LevelsManager para lógica de saída
WCWebLibEnviar webhook para cada TP atingido
LiveTrackerMonitorar posição em tempo real enquanto LevelsManager gerencia saídas

Limitações

LimitaçãoImpacto
Máximo de 6 TPsSuficiente para a maioria dos sistemas
Apenas 1 posição por vezSem suporte a múltiplas posições simultâneas
SL dinâmico requer reconfiguração manual em alguns casosTrailing ATR pós-TP exige lógica adicional

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

On this page