O recurso está a ser carregado... Carregamento...

Algoritmo de negociação de tendências dinâmicas de supertendências de vários prazos

Autora:ChaoZhang, Data: 2025-01-06 16:38:12
Tags:ATRMTFEMARSI

img

Resumo

Esta estratégia é um sistema adaptativo de tendência baseado no indicador Multi-Timeframe Supertrend. Integra sinais de Supertrend de intervalos de tempo de 15 minutos, 5 minutos e 2 minutos para construir uma estrutura abrangente de identificação de tendências. A estratégia emprega um filtro de tempo para garantir a operação apenas durante as sessões de negociação mais ativas e fecha automaticamente as posições no final do dia para evitar o risco da noite.

Princípios de estratégia

O mecanismo central baseia-se na consistência da tendência em vários prazos para confirmar os sinais de negociação.

  1. Calcula as linhas de Supertrend utilizando o período ATR e o fator multiplicador para cada período.
  2. Os gatilhos compram sinais quando as condições de alta se alinham em todos os três prazos (preço acima das linhas de Supertrend).
  3. Os iniciados vendem sinais quando o preço ultrapassa a linha Supertrend de 5 minutos ou chega ao final do dia de negociação.
  4. Controla horas de negociação através de configurações de fuso horário e filtro de sessão (default 09:30-15:30).

Vantagens da estratégia

  1. A confirmação multidimensional da tendência aumenta a fiabilidade do sinal e reduz os riscos de falhas de ruptura.
  2. Os parâmetros de Supertrend adaptáveis permitem ajustar a estratégia a diferentes ambientes de volatilidade do mercado.
  3. O mecanismo rigoroso de gestão do tempo elimina a interferência dos períodos de negociação ineficientes.
  4. A interface de visualização clara exibe o status da tendência em todos os prazos.
  5. O sistema flexível de gestão de posições suporta uma configuração baseada em percentagem.

Riscos estratégicos

  1. Pode gerar sinais de negociação excessivos em mercados variados, aumentando os custos de transação.
  2. Condições de filtragem múltiplas podem causar oportunidades lucrativas perdidas.
  3. A dependência de otimização de parâmetros requer ajustes para diferentes ambientes de mercado.
  4. A alta complexidade computacional pode levar a problemas de eficiência de execução.

Orientações de otimização

  1. Introduzir um mecanismo de adaptação à volatilidade para ajustar dinamicamente os parâmetros da Supertrend.
  2. Adicionar indicadores de confirmação de volume para melhorar a precisão do julgamento da tendência.
  3. Desenvolver um algoritmo inteligente de filtragem de tempo para identificar automaticamente as sessões de negociação ideais.
  4. Otimizar o algoritmo de gestão de posições para um controlo de risco mais preciso.
  5. Adicionar o módulo de classificação do ambiente de mercado para implementar estratégias diferenciadas para várias características do mercado.

Resumo

A estratégia constrói um sistema de negociação robusto através de análise de tendências de vários prazos e mecanismos de controle de risco rigorosos.


/*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.")


Relacionados

Mais.