Estratégia multimodo de acompanhamento de tendências de stop-profit e stop-loss com base em EMA, Bandas de Madrid e Canais Donchian

EMA RRR
Data de criação: 2025-01-10 16:24:30 última modificação: 2025-01-10 16:24:30
cópia: 2 Cliques: 418
1
focar em
1617
Seguidores

Estratégia multimodo de acompanhamento de tendências de stop-profit e stop-loss com base em EMA, Bandas de Madrid e Canais Donchian

Visão geral

Esta é uma estratégia de acompanhamento de tendências que combina a Média Móvel Exponencial (MME), a Faixa de Madri e o Canal de Donchian. A singularidade da estratégia está no fornecimento de três modos de stop-profit e stop-loss comutáveis: com base em pontos, com base no valor e com base na relação risco-retorno. A confiabilidade das transações é melhorada por meio de um mecanismo de confirmação de sinal secundário, e as transações só são feitas quando um sinal válido aparece pela segunda vez.

Princípio da estratégia

A estratégia usa uma combinação de três indicadores técnicos para identificar oportunidades de negociação:

  1. A média móvel exponencial de 200 períodos é usada para determinar a direção geral da tendência
  2. As Bandas de Madrid (cruzamento de EMAs de 5 e 100 períodos) são usadas para determinar tendências de médio prazo
  3. Fugas do Canal Donchian para Tempo de Entrada Específico

Condições de negociação longas: o preço está acima da MME 200, a Banda de Madri se torna otimista e o preço rompe o Canal Donchian superior. Condições de negociação curta: o preço está abaixo de 200EMA, a Banda de Madri fica baixista e o preço rompe o Canal Donchian inferior. Para reduzir sinais falsos, a estratégia executa uma negociação somente quando um sinal válido aparece pela segunda vez.

Vantagens estratégicas

  1. Sistema flexível de gerenciamento de stop-profit e stop-loss, que pode alternar os modos de acordo com diferentes estilos de negociação
  2. A combinação de vários indicadores técnicos fornece sinais de negociação mais confiáveis
  3. O mecanismo de confirmação secundária reduz efetivamente o impacto de sinais falsos
  4. A estratégia evita completamente o viés de previsão e não há problema de redesenho.
  5. Altamente personalizável para se adaptar a diferentes ambientes de mercado

Risco estratégico

  1. Um retrocesso maior pode ocorrer quando a tendência se inverte Solução: Você pode melhorar a sensibilidade da estratégia ajustando os parâmetros do indicador
  2. A dependência excessiva de indicadores técnicos pode levar à perda de oportunidades de mercado Solução: Recomenda-se combinar análise fundamental
  3. Stop-loss fixo e take-profit podem não ser adequados para todas as condições de mercado Solução: Ajuste dinamicamente os níveis de take-profit e stop-loss com base na volatilidade

Direção de otimização da estratégia

  1. Introdução de indicadores de volatilidade para ajustar dinamicamente os níveis de take-profit e stop-loss
  2. Análise de volume adicionada para melhorar a confiabilidade do sinal
  3. Adicionando mais indicadores de sentimento de mercado
  4. Desenvolvimento de um sistema de otimização de parâmetros adaptativos
  5. Adicionar módulos de gerenciamento de risco, como controle de redução máxima

Resumir

Esta é uma estratégia de monitoramento de tendências que combina vários indicadores técnicos clássicos, melhorando a estabilidade das transações por meio de gerenciamento flexível de stop-profit e stop-loss e mecanismo de confirmação secundária. A alta personalização da estratégia permite que ela se adapte a diferentes ambientes de mercado e estilos de negociação. É recomendável realizar testes retrospectivos de dados históricos suficientes antes do uso real e ajustar as configurações dos parâmetros de acordo com as características específicas do mercado.

Código-fonte da estratégia
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=6
strategy("Pamplona Enhanced TP/SL Toggleable", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// Input settings
use_tick_based = input.bool(false, title="Use Tick-Based TP/SL")
use_dollar_based = input.bool(false, title="Use Dollar-Based TP/SL")
use_risk_reward = input.bool(true, title="Use Risk-Reward TP/SL") // Default option

tick_size = input.float(0.1, title="Tick Size (for Tick-Based)", minval=0.0001, step=0.0001)
ticks = input.int(10, title="Ticks (for Tick-Based TP/SL)", minval=1)
dollar_tp = input.float(10.0, title="Dollar Take Profit (for Dollar-Based)", minval=0.01, step=0.01)
dollar_sl = input.float(10.0, title="Dollar Stop Loss (for Dollar-Based)", minval=0.01, step=0.01)
risk_reward_ratio = input.float(2.0, title="Risk-Reward Ratio (for Risk-Reward TP/SL)", minval=0.1, step=0.1)
contract_size = input.int(1, title="Contract Size", minval=1)

// Retrieve indicators
ema200 = ta.ema(close, 200)
src = close
ma05 = ta.ema(src, 5)
ma100 = ta.ema(src, 100)
madrid_green = ma05 > ma100
dlen = input.int(20, title="Donchian Channel Period")
highest_d = ta.highest(high, dlen)
lowest_d = ta.lowest(low, dlen)
donchian_green = close > highest_d[1]
donchian_red = close < lowest_d[1]

// Track signals
var int long_signal_count = 0
var int short_signal_count = 0

// Conditions
long_condition_raw = madrid_green and donchian_green and close > ema200
short_condition_raw = not madrid_green and donchian_red and close < ema200

// Update signal counters
if long_condition_raw
    long_signal_count += 1
else
    long_signal_count := 0

if short_condition_raw
    short_signal_count += 1
else
    short_signal_count := 0

// Final conditions to enter on the second signal
long_condition = long_signal_count == 2
short_condition = short_signal_count == 2

// Ensure exactly one TP/SL mode is enabled
tp_sl_mode_count = (use_tick_based ? 1 : 0) + (use_dollar_based ? 1 : 0) + (use_risk_reward ? 1 : 0)
if tp_sl_mode_count != 1
    runtime.error("Enable exactly ONE TP/SL mode (Tick-Based, Dollar-Based, or Risk-Reward).")

// Function to calculate TP/SL based on active mode
calc_tp_sl(entry_price, is_long) =>
    float tp = na
    float sl = na
    if use_tick_based
        tp := is_long ? entry_price + ticks * tick_size : entry_price - ticks * tick_size
        sl := is_long ? entry_price - ticks * tick_size : entry_price + ticks * tick_size
    else if use_dollar_based
        tp := is_long ? entry_price + (dollar_tp / contract_size) : entry_price - (dollar_tp / contract_size)
        sl := is_long ? entry_price - (dollar_sl / contract_size) : entry_price + (dollar_sl / contract_size)
    else if use_risk_reward
        risk = is_long ? close - low : high - close
        tp := is_long ? close + (risk * risk_reward_ratio) : close - (risk * risk_reward_ratio)
        sl := is_long ? close - risk : close + risk
    [tp, sl]

// Entry logic
if long_condition
    [take_profit, stop_loss] = calc_tp_sl(close, true)
    strategy.entry("Long", strategy.long, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Long", limit=take_profit, stop=stop_loss)

if short_condition
    [take_profit, stop_loss] = calc_tp_sl(close, false)
    strategy.entry("Short", strategy.short, qty=contract_size)
    strategy.exit("Take Profit", from_entry="Short", limit=take_profit, stop=stop_loss)

// Plot indicators
plot(ema200, title="200 EMA", color=color.white, linewidth=2)
bgcolor(long_condition ? color.new(color.green, 90) : short_condition ? color.new(color.red, 90) : na)