Tendência dinâmica multiindicador seguindo estratégia de negociação diária

EMA RSI MACD ATR IST
Data de criação: 2025-02-21 13:15:30 última modificação: 2025-02-21 13:15:30
cópia: 0 Cliques: 365
2
focar em
319
Seguidores

Tendência dinâmica multiindicador seguindo estratégia de negociação diária Tendência dinâmica multiindicador seguindo estratégia de negociação diária

Visão geral

Trata-se de uma estratégia de negociação intradiária baseada em múltiplos indicadores técnicos, que opera principalmente com múltiplos sinais, como o canal EMA, o RSI Overbought/Overbought e a confirmação de tendência MACD. A estratégia opera em períodos de 3 minutos, capturando a tendência do mercado através de uma trajetória de alta e baixa do EMA combinada com a confirmação cruzada do RSI e do MACD, e configura um stop loss dinâmico baseado no ATR, bem como um tempo de liquidação fixo.

Princípio da estratégia

A estratégia usa 20 EMAs de períodos para calcular os preços mais altos e mais baixos, respectivamente, para formar um canal e entrar quando o preço quebra o canal e atende às seguintes condições:

  1. Entrada múltipla: EMA alta no preço de fechamento, RSI entre 50-70 e linha MACD em linha de sinal
  2. Entrada em branco: EMA abaixo do preço de fechamento, RSI entre 30-50 e linha de sinal abaixo do MACD
  3. Calcule a posição de stop loss usando o ATR dinâmico e configure o stop loss de acordo com 2,5 vezes o risco-benefício
  4. O risco de cada transação é de 1% da conta, o tamanho da posição é calculado dinamicamente de acordo com a distância de parada
  5. Todas as posições devem ser obrigatoriamente liquidadas às 15h00 (horário de Brasília).

Vantagens estratégicas

  1. Verificação cruzada de indicadores tecnológicos múltiplos para aumentar a confiabilidade dos sinais de negociação
  2. Stop loss dinâmico baseado no indicador ATR, melhor adaptado às flutuações do mercado
  3. Proporção de risco fixo e proporção de risco-benefício, controle eficaz do risco
  4. Considere o custo da transação, incluindo o cálculo das comissões
  5. Proibição de posicionamento simultâneo para evitar riscos excessivos
  6. “Fixar o horário de fechamento para evitar o risco de ficar a noite toda”

Risco estratégico

  1. Indicadores múltiplos podem causar atraso no sinal e afetar o tempo de entrada
  2. O canal EMA pode gerar brechas falsas frequentes no mercado horizontal
  3. A relação de risco/benefício fixa pode não ser suficientemente flexível em diferentes cenários de mercado
  4. A restrição do intervalo RSI pode ter perdido algumas das grandes tendências
  5. O fechamento de posições forçadas pode forçar a saída em pontos-chave

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

  1. Considerar o aumento dos indicadores de volume de negócios como confirmação auxiliar
  2. A taxa de risco-benefício pode ser ajustada de acordo com a dinâmica de características de flutuação em diferentes períodos de tempo
  3. Introdução de um RSI de baixa para um ajustamento dinâmico do indicador de volatilidade do mercado
  4. Considere aumentar a intensidade da tendência e reduzir os filtros de false breakouts
  5. Considere ajustar os parâmetros de acordo com as características de diferentes períodos do dia
  6. Adição de análise de volatilidade histórica para otimizar a gestão de posições

Resumir

A estratégia utiliza a combinação de vários indicadores técnicos para construir um sistema de negociação relativamente completo. A vantagem da estratégia é que o controle de risco é mais completo, incluindo mecanismos como stop loss dinâmico, risco fixo e liquidação de liquidação. Embora haja algum risco de atraso, o desempenho da estratégia pode ser melhorado ainda mais com a otimização de parâmetros e o aumento de indicadores auxiliares.

Código-fonte da estratégia
/*backtest
start: 2024-02-21 00:00:00
end: 2024-09-09 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Intraday 3min EMA HL Strategy v6", 
     overlay=true,
     margin_long=100, 
     margin_short=100,
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     commission_type=strategy.commission.percent,
     commission_value=0.05,
     calc_on_every_tick=false,
     process_orders_on_close=true,
     pyramiding=0)

// Input Parameters
i_emaLength = input.int(20, "EMA Length", minval=5, group="Strategy Parameters")
i_rsiLength = input.int(14, "RSI Length", minval=5, group="Strategy Parameters")
i_atrLength = input.int(14, "ATR Length", minval=5, group="Risk Management")
i_rrRatio = input.float(2.5, "Risk:Reward Ratio", minval=1, maxval=10, step=0.5, group="Risk Management")
i_riskPercent = input.float(1, "Risk % per Trade", minval=0.1, maxval=5, step=0.1, group="Risk Management")

// Time Exit Parameters (IST)
i_exitHour = input.int(15, "Exit Hour (IST)", minval=0, maxval=23, group="Session Rules")
i_exitMinute = input.int(0, "Exit Minute (IST)", minval=0, maxval=59, group="Session Rules")

// Indicator Calculations
emaHigh = ta.ema(high, i_emaLength)
emaLow = ta.ema(low, i_emaLength)

rsi = ta.rsi(close, i_rsiLength)
atr = ta.atr(i_atrLength)

fastMA = ta.ema(close, 12)
slowMA = ta.ema(close, 26)
macdLine = fastMA - slowMA
signalLine = ta.ema(macdLine, 9)

// Time Calculations (UTC to IST Conversion)
istHour = (hour(time) + 5) % 24  // UTC+5
istMinute = minute(time) + 30    // 30 minute offset
istHour += istMinute >= 60 ? 1 : 0
istMinute := istMinute % 60

// Exit Condition
timeExit = istHour > i_exitHour or (istHour == i_exitHour and istMinute >= i_exitMinute)

// Entry Conditions (Multi-line formatting fix)
longCondition = close > emaHigh and
     rsi > 50 and
     rsi < 70 and
     ta.crossover(macdLine, signalLine)

shortCondition = close < emaLow and
     rsi < 50 and
     rsi > 30 and
     ta.crossunder(macdLine, signalLine)

// Risk Calculations
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float posSize = na

// Strategy Logic
if longCondition and not timeExit and strategy.position_size == 0
    entryPrice := close
    stopLoss := math.min(low, entryPrice - atr)
    takeProfit := entryPrice + (entryPrice - stopLoss) * i_rrRatio
    posSize := strategy.equity * i_riskPercent / 100 / (entryPrice - stopLoss)
    strategy.entry("Long", strategy.long, qty=posSize)
    strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)

if shortCondition and not timeExit and strategy.position_size == 0
    entryPrice := close
    stopLoss := math.max(high, entryPrice + atr)
    takeProfit := entryPrice - (stopLoss - entryPrice) * i_rrRatio
    posSize := strategy.equity * i_riskPercent / 100 / (stopLoss - entryPrice)
    strategy.entry("Short", strategy.short, qty=posSize)
    strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)

// Force Close at Session End
if timeExit
    strategy.close_all()

// Visual Components
plot(emaHigh, "EMA High", color=color.rgb(0, 128, 0), linewidth=2)
plot(emaLow, "EMA Low", color=color.rgb(255, 0, 0), linewidth=2)

plotshape(longCondition, "Long Signal", shape.triangleup, 
  location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, "Short Signal", shape.triangledown, 
  location.abovebar, color=color.red, size=size.small)

// Debugging Table
var table infoTable = table.new(position.top_right, 3, 3)
if barstate.islast
    table.cell(infoTable, 0, 0, "EMA High: " + str.tostring(emaHigh, "#.00"))
    table.cell(infoTable, 0, 1, "EMA Low: " + str.tostring(emaLow, "#.00"))
    table.cell(infoTable, 0, 2, "Current RSI: " + str.tostring(rsi, "#.00"))