Algoritmo de combinação dinâmica de estratégia de negociação de tendência Supertrend de vários períodos de tempo

ATR MTF EMA RSI
Data de criação: 2025-01-06 16:38:12 última modificação: 2025-01-06 16:38:12
cópia: 2 Cliques: 482
1
focar em
1617
Seguidores

Algoritmo de combinação dinâmica de estratégia de negociação de tendência Supertrend de vários períodos de tempo

Visão geral

A estratégia é um sistema de acompanhamento de tendências adaptável baseado no indicador Supertrend de múltiplos períodos. Ele cria uma estrutura abrangente de identificação de tendências integrando sinais Supertrend de três períodos de tempo diferentes: 15 minutos, 5 minutos e 2 minutos. A estratégia usa filtros de tempo para garantir que seja executada apenas durante os horários de negociação mais ativos e fecha posições automaticamente no final do dia para evitar riscos durante a noite.

Princípio da estratégia

O cerne da estratégia é confirmar os sinais de negociação por meio da consistência de tendências em vários períodos de tempo. Especificamente:

  1. A linha Supertrend é calculada para cada período de tempo usando o período ATR e o fator de multiplicação.
  2. Uma compra é acionada quando sinais de alta aparecem em todos os três períodos (o preço está acima da linha Supertrend).
  3. Uma venda é acionada quando o preço cai abaixo da linha de supertendência de 5 minutos ou atinge o fim do dia de negociação.
  4. Controle o horário de negociação definindo o fuso horário e o filtro de sessão de negociação (padrão 09:30-15:30).

Vantagens estratégicas

  1. A confirmação de tendências multidimensionais melhora a confiabilidade do sinal e reduz efetivamente o risco de falsos avanços.
  2. As configurações de parâmetros do Supertrend Adaptável permitem que a estratégia se adapte a diferentes ambientes de volatilidade do mercado.
  3. O mecanismo rigoroso de gerenciamento de tempo evita a interferência de períodos de negociação ineficientes.
  4. A interface visual clara mostra o status da tendência de todos os períodos de tempo.
  5. O sistema de gerenciamento de posição flexível suporta configuração de porcentagem.

Risco estratégico

  1. Em um mercado lateral e volátil, muitos sinais de negociação podem ser gerados, aumentando os custos de transação.
  2. Várias condições de filtragem podem resultar na perda de algumas oportunidades potencialmente lucrativas.
  3. Depende da otimização dos parâmetros, e diferentes ambientes de mercado podem exigir ajustes de parâmetros.
  4. A complexidade computacional é alta e pode haver problemas com a eficiência de execução do programa.

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

  1. Introduzir um mecanismo adaptativo de volatilidade para ajustar dinamicamente os parâmetros do Supertrend de acordo com as condições de mercado.
  2. Adicione indicadores de confirmação de volume para melhorar a precisão do julgamento de tendências.
  3. Desenvolva algoritmos inteligentes de filtragem de tempo para identificar automaticamente os melhores horários de negociação.
  4. Otimize algoritmos de gerenciamento de posição para obter um controle de risco mais sofisticado.
  5. Adicione um módulo de classificação do ambiente de mercado e adote estratégias diferenciadas com base em diferentes características do mercado.

Resumir

Esta estratégia cria um sistema de negociação robusto por meio de análise de tendências de vários períodos de tempo e um sistema de controle de risco rigoroso. Embora haja alguma margem para otimização, sua lógica central é sólida e adequada para desenvolvimento posterior e aplicação no mundo real. O design modular do sistema também fornece uma boa base para expansão futura.

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

//@version=5
strategy("Multi-Timeframe Supertrend Strategy", 
         overlay=true, 
         shorttitle="MTF Supertrend TF", 
         default_qty_type=strategy.percent_of_equity, 
         default_qty_value=100, 
         initial_capital=50000, 
         currency=currency.USD)

// === Input Parameters === //
atrPeriod = input.int(title="ATR Period", defval=10, minval=1)
factor = input.float(title="Factor", defval=3.0, step=0.1)

// === Time Filter Parameters === //
// Define the trading session using input.session
// Format: "HHMM-HHMM", e.g., "0930-1530"
sessionInput = input("0930-1530", title="Trading Session")

// Specify the timezone (e.g., "Europe/Istanbul")
// Refer to the list of supported timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
timezoneInput = input.string("Europe/Istanbul", title="Timezone", tooltip="Specify a valid IANA timezone (e.g., 'Europe/Istanbul', 'America/New_York').")

// === Calculate Supertrend for Different Timeframes === //
symbol = syminfo.tickerid

// 15-Minute Supertrend
[st_15m, dir_15m] = request.security(symbol, "15", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// 5-Minute Supertrend
[st_5m, dir_5m] = request.security(symbol, "5", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// 2-Minute Supertrend
[st_2m, dir_2m] = request.security(symbol, "2", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// === Current Timeframe Supertrend === //
[st_current, dir_current] = ta.supertrend(factor, atrPeriod)

// === Time Filter: Check if Current Bar is Within the Trading Session === //
in_session = true

// === Define Trend Directions Based on Supertrend === //
is_up_15m = close > st_15m
is_up_5m  = close > st_5m
is_up_2m  = close > st_2m
is_up_current = close > st_current

// === Buy Condition === //
buyCondition = is_up_15m and is_up_5m and is_up_2m and is_up_current and in_session and strategy.position_size == 0

// === Sell Conditions === //
// 1. Price falls below the 5-minute Supertrend during trading session
sellCondition1 = close < st_5m

// 2. End of Trading Day: Sell at the close of the trading session
is_new_day = ta.change(time("D"))
sellCondition2 = not in_session and is_new_day

// Combined Sell Condition: Only if in Position
sellSignal = (sellCondition1 and in_session) or sellCondition2
sellCondition = sellSignal and strategy.position_size > 0

// === Execute Trades === //
if (buyCondition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.close("Buy")

// === Plot Supertrend Lines === //
// Plotting current timeframe Supertrend
plot(st_current, title="Current TF Supertrend", color=is_up_current ? color.green : color.red, linewidth=2, style=plot.style_line)

// Plotting higher timeframe Supertrend lines
plot(st_15m, title="15m Supertrend", color=is_up_15m ? color.green : color.red, linewidth=1, style=plot.style_line)
plot(st_5m, title="5m Supertrend", color=is_up_5m ? color.green : color.red, linewidth=1, style=plot.style_line)
plot(st_2m, title="2m Supertrend", color=is_up_2m ? color.green : color.red, linewidth=1, style=plot.style_line)

// === Plot Buy and Sell Signals === //
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, 
          color=color.green, style=shape.labelup, text="BUY", size=size.small)

plotshape(series=sellCondition, title="Sell Signal", location=location.abovebar, 
          color=color.red, style=shape.labeldown, text="SELL", size=size.small)

// === Optional: Background Color to Indicate Position === //
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : na, title="In Position Background")

// === Alerts === //
// Create alerts for Buy and Sell signals
alertcondition(buyCondition, title="Buy Alert", message="Buy signal generated by MTF Supertrend Strategy with Time Filter.")
alertcondition(sellCondition, title="Sell Alert", message="Sell signal generated by MTF Supertrend Strategy with Time Filter.")