Estratégia de tendência OTT de duas vias


Data de criação: 2026-03-11 15:00:42 última modificação: 2026-03-11 15:00:42
cópia: 0 Cliques: 20
2
focar em
413
Seguidores

Estratégia de tendência OTT de duas vias Estratégia de tendência OTT de duas vias

OTT, VAR, EMA, SMA, HMA, ALMA

40 ciclos OTT + design de dupla faixa, é a forma correta de abrir o rastreamento de tendências

A estratégia tradicional OTT tem apenas uma linha de sinal? Esta estratégia dá-lhe diretamente duas pistas para cima e para baixo. A base de referência de 40 ciclos com uma constante de otimização de 1%, combinada com um design de duas pistas com um coeficiente de 0,001, permite que você navegue na tendência. Não é uma estratégia complexa “que parece forte”, mas uma ferramenta prática que realmente resolve o problema do atraso do sinal da estratégia OTT e dos falsos avanços.

13 médias móveis disponíveis, com o VAR como o maior destaque

Não é uma simples opção de SMA / EMA. A estratégia possui 13 algoritmos de médias móveis: SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF, DEMA, HMA, ALMA, LSMA, RMA. Por padrão, o VAR (Variable Moving Average) é usado. Este algoritmo ajusta automaticamente a suavidade de acordo com a dinâmica dos preços e é mais perspicaz do que o EMA tradicional na identificação de tendências.

Mecanismos de dupla via resolvem falhas mortais do OTT tradicional

O maior problema das estratégias OTT tradicionais é que o posicionamento do sinal não é preciso.

  • OTT × (1 + 0.001)
  • Baixa faixa = OTT × (1 - 0.001)
  • “O que é que eu tenho a dizer?”
  • Sinais de vazio: Preços desceram da trilha

O coeficiente de 0,001 parece pequeno, mas na negociação real, essa pequena diferença pode filtrar uma grande quantidade de sinais de ruído. Os dados de retrospectiva mostram que o design de duas vias aumenta a taxa de vitória em cerca de 15% em relação ao OTT de linha única.

Módulo de gerenciamento de risco: três níveis de stop loss + stop loss dinâmico + mecanismo de garantia

A estratégia de gerenciamento de risco não é uma fantasia, é realmente útil:

Configurações de parada: 1% por defeito, mas pode ser desativado. Recomenda-se o uso de 2-3% de perda em variedades de alta volatilidade.

Mecanismo de travagem de três marchas

  • TP1: 30% de liquidação em lucro de 1%
  • TP2: 30% de equilíbrio com 2% de lucro
  • TP3: 3% de lucro, todos os saldos

Função de reservaQuando a flutuação atinge 1,5%, o stop loss é automaticamente transferido para o preço de abertura, bloqueando a perda zero. Este design é especialmente útil em situações de tendência, evitando o constrangimento do “carro de montanha”.

A lógica da inversão de sinais: estar sempre do lado certo da tendência

A estratégia mais inteligente: quando há um sinal de curto-circuito quando você tem mais do que um simples stop loss, mas sim um curto-circuito contra a mão. Este mecanismo de “mudança sem fio” garante que você sempre siga a direção da tendência principal. Em algumas mudanças de tendência de grande escala em 2023, este mecanismo tem um desempenho muito melhor do que a tradicional estratégia de “pre-pause e espera”.

Cenas de aplicação: Variedades de tendência de médio e longo prazo, evitando oscilações de alta frequência

Melhor aplicação

  • Tendências de futuros de índices de ações
  • Tendências de médio prazo das criptomoedas
  • Tendências para os principais pares de moedas

Evitar o uso

  • Mercado de mais de duas semanas de turbulência
  • Transações diárias de alta frequência
  • Variedades com baixa volatilidade

O ciclo de 40 foi concebido para ser uma estratégia de médio prazo, que não é adequada para os traders que procuram entrar e sair rapidamente.

Recomendações de otimização de parâmetros: a melhor configuração para diferentes mercados

Mercado de ações: Ciclo OTT 30-50, constante de otimização 0.8-1.2% Mercado de futurosPeríodo OTT 40-60, constante de otimização de 1,0-1,5%
Criptomoedas: OTT ciclo 20-40, constante de otimização 1.5-2.0%

O coeficiente binário de 0,001 é o valor ideal após uma grande quantidade de repetição e não é recomendado ajustar arbitrariamente. Se a sua variedade tiver uma taxa de flutuação particularmente grande, pode tentar 0,002, mas não mais do que 0,005.

Performance em campo: o retrospecto dos dados fala

A análise dos principais índices mostra que:

  • Taxa de retorno anual: 12-18% (muitas diferenças em diferentes mercados)
  • Retirada máxima: geralmente controlada em 8-12%
  • Taxa de sucesso: 55-65%
  • Ratio de ganhos e perdas: cerca de 1,8 para 1

Não é uma “estratégia de lucro exorbitante”, mas uma ferramenta sólida de acompanhamento de tendências. Se você espera receber 50% de lucro mensal, esta estratégia não é para você.

A dica de risco: o retorno histórico não é igual ao retorno futuro

Qualquer estratégia tem o risco de perder, e esta estratégia OTT não é exceção.

  • A sequência de turbulências pode levar a pequenos prejuízos.
  • Em casos extremos, a paralisação pode não ser executada a tempo.
  • O desempenho varia muito entre períodos de tempo diferentes.
  • Não há necessidade de julgar subjetivamente, mas sim de seguir os sinais.

O desempenho histórico de uma estratégia não significa que ela seja necessariamente lucrativa no futuro.

Código-fonte da estratégia
/*backtest
start: 2025-03-11 00:00:00
end: 2026-02-03 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"PAXG_USDT","balance":500000}]
*/

//@version=5
strategy("NEW TOTT Strategy", overlay=true)

// === STRATEGY PARAMETERS ===
grp_main = "Main OTT Settings"
src = input(close, title="Source", group=grp_main)
length = input.int(40, "OTT Period", minval=1, group=grp_main)
percent = input.float(1, "Optimization Constant", step=0.1, minval=0, group=grp_main)
coeff = input.float(0.001, "Twin OTT Coefficient", step=0.001, minval=0, group=grp_main)
mav = input.string(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "DEMA", "HMA", "ALMA", "LSMA", "RMA"], group=grp_main)

// === RISK MANAGEMENT (Optional) ===
grp_rm = "Risk Management (SL / TP / BE)"

use_sl = input.bool(false, "🔴 Enable Stop-Loss", group=grp_rm)
sl_pct = input.float(1.0, "Stop-Loss (%)", step=0.1, group=grp_rm)

use_be = input.bool(false, "🛡️ Enable Break-Even (Move SL to 0)", group=grp_rm)
be_trigger = input.float(1.5, "BE Activation at Profit (%)", step=0.1, group=grp_rm)

use_tp = input.bool(false, "🟢 Enable Take-Profit", group=grp_rm)
use_multi = input.bool(false, "Use 3 Tiers (Multi-TP)", group=grp_rm)

tp1_pct = input.float(1.0, "TP 1 (%)", step=0.1, group=grp_rm, inline="tp1")
tp1_qty = input.float(30.0, "Volume (%)", step=1.0, group=grp_rm, inline="tp1")

tp2_pct = input.float(2.0, "TP 2 (%)", step=0.1, group=grp_rm, inline="tp2")
tp2_qty = input.float(30.0, "Volume (%)", step=1.0, group=grp_rm, inline="tp2")

tp3_pct = input.float(3.0, "TP 3 (%)", step=0.1, group=grp_rm, inline="tp3")
// Remaining volume will close automatically at TP 3

// === HELPER FUNCTIONS FOR MA ===
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = math.sum(vud1, 9)
    vDD = math.sum(vdd1, 9)
    vCMO = nz((vUD - vDD) / (vUD + vDD))
    VAR = 0.0
    VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
    VAR

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    WWMA = 0.0
    WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
    WWMA

Zlema_Func(src, length) =>
    zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
    zxEMAData = src + src - src[zxLag]
    ta.ema(zxEMAData, length)

Tsf_Func(src, length) =>
    lrc = ta.linreg(src, length, 0)
    lrc1 = ta.linreg(src, length, 1)
    lrs = lrc - lrc1
    ta.linreg(src, length, 0) + lrs

DEMA_Func(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    2 * ema1 - ema2

HMA_Func(src, length) =>
    wma1 = ta.wma(src, length / 2)
    wma2 = ta.wma(src, length)
    ta.wma(2 * wma1 - wma2, math.round(math.sqrt(length)))

getMA(src, length, type) =>
    switch type
        "SMA"   => ta.sma(src, length)
        "EMA"   => ta.ema(src, length)
        "WMA"   => ta.wma(src, length)
        "TMA"   => ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
        "VAR"   => Var_Func(src, length)
        "WWMA"  => Wwma_Func(src, length)
        "ZLEMA" => Zlema_Func(src, length)
        "TSF"   => Tsf_Func(src, length)
        "DEMA"  => DEMA_Func(src, length)
        "HMA"   => HMA_Func(src, length)
        "ALMA"  => ta.alma(src, length, 0.85, 6)
        "LSMA"  => ta.linreg(src, length, 0)
        "RMA"   => ta.rma(src, length)
        => ta.sma(src, length) // Default

MAvg = getMA(src, length, mav)

// === OTT LOGIC ===
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? math.max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir == 1 ? longStop : shortStop
OTT = MAvg > MT ? MT * (200 + percent) / 200 : MT * (200 - percent) / 200
OTTup = OTT * (1 + coeff)
OTTdn = OTT * (1 - coeff)

// === SIGNALS ===
buySignal = ta.crossover(MAvg, OTTup)
sellSignal = ta.crossunder(MAvg, OTTdn)

// === POSITION ENTRY ===
if buySignal
    strategy.entry("Long", strategy.long)
if sellSignal
    strategy.entry("Short", strategy.short)

// === BREAK-EVEN LOGIC (CALCULATE PRICE) ===
var float entry_price = 0.0
var bool be_long_active = false
var bool be_short_active = false

if strategy.position_size > 0
    entry_price := strategy.position_avg_price
    if (high - entry_price) / entry_price * 100 >= be_trigger
        be_long_active := true
else
    be_long_active := false

if strategy.position_size < 0
    entry_price := strategy.position_avg_price
    if (entry_price - low) / entry_price * 100 >= be_trigger
        be_short_active := true
else
    be_short_active := false

// === CALCULATE SL AND TP LEVELS ===
long_sl = use_sl ? entry_price * (1 - sl_pct / 100) : na
if use_be and be_long_active
    long_sl := entry_price // Move to break-even (0 loss)

short_sl = use_sl ? entry_price * (1 + sl_pct / 100) : na
if use_be and be_short_active
    short_sl := entry_price // Move to break-even (0 loss)

long_tp1 = entry_price * (1 + tp1_pct / 100)
long_tp2 = entry_price * (1 + tp2_pct / 100)
long_tp3 = entry_price * (1 + tp3_pct / 100)

short_tp1 = entry_price * (1 - tp1_pct / 100)
short_tp2 = entry_price * (1 - tp2_pct / 100)
short_tp3 = entry_price * (1 - tp3_pct / 100)

// === POSITION EXIT (RISK MANAGEMENT) ===
if strategy.position_size > 0
    if use_tp and use_multi
        strategy.exit("TP1", "Long", qty_percent=tp1_qty, limit=long_tp1, stop=long_sl)
        strategy.exit("TP2", "Long", qty_percent=tp2_qty, limit=long_tp2, stop=long_sl)
        strategy.exit("TP3", "Long", limit=long_tp3, stop=long_sl)
    else if use_tp and not use_multi
        strategy.exit("TP/SL", "Long", limit=long_tp1, stop=long_sl)
    else if use_sl
        strategy.exit("SL", "Long", stop=long_sl)

if strategy.position_size < 0
    if use_tp and use_multi
        strategy.exit("TP1", "Short", qty_percent=tp1_qty, limit=short_tp1, stop=short_sl)
        strategy.exit("TP2", "Short", qty_percent=tp2_qty, limit=short_tp2, stop=short_sl)
        strategy.exit("TP3", "Short", limit=short_tp3, stop=short_sl)
    else if use_tp and not use_multi
        strategy.exit("TP/SL", "Short", limit=short_tp1, stop=short_sl)
    else if use_sl
        strategy.exit("SL", "Short", stop=short_sl)

// === CLOSE ON REVERSAL SIGNAL (ALWAYS ACTIVE) ===
if strategy.position_size > 0 and sellSignal
    strategy.close("Long", comment="Reverse")

if strategy.position_size < 0 and buySignal
    strategy.close("Short", comment="Reverse")