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

O valor da posição em risco deve ser calculado de acordo com o método de cálculo da posição em risco, de acordo com o método de cálculo da posição em risco.

Autora:ChaoZhang, Data: 2024-11-29 14:54:57
Tags:MACDRSIBBATRSMAS.D.

img

Resumo

Esta estratégia é um sistema de negociação abrangente baseado em múltiplos indicadores técnicos, combinando MACD, RSI, Bandas de Bollinger e ATR para capturar oportunidades de tendência e reversão. A estratégia emprega mecanismos dinâmicos de stop-loss e take-profit, adaptando os parâmetros de negociação de acordo com a volatilidade do mercado, controlando efetivamente os riscos. Os resultados do backtesting mostram um retorno de 676,27% durante o período de teste de três meses, demonstrando uma boa adaptabilidade do mercado.

Princípios de estratégia

A estratégia utiliza um sistema de validação de indicadores técnicos de várias camadas, que inclui:

  1. MACD ((12,26,9) para capturar sinais de mudança de momento, gerando sinais de compra quando a linha MACD cruza acima da linha de sinal e sinais de venda quando cruza abaixo
  2. O RSI(14) como um filtro secundário, com leituras abaixo de 35 consideradas sobrevendidas e acima de 65 sobrecompradas
  3. Bandas de Bollinger ((20,2)) para identificar os intervalos de volatilidade dos preços, considerando compras em bandas inferiores e vendas em bandas superiores
  4. ATR para fixação dinâmica de objetivos de stop loss e de lucro, com stop loss a 3x ATR e objetivo de lucro a 5x ATR

A lógica de negociação combina estratégias de negociação de tendência e reversão, melhorando a precisão através de múltiplas validações.

Vantagens da estratégia

  1. Sistema de validação de sinais multidimensional melhora a fiabilidade das negociações
  2. O regime dinâmico de stop-loss e de captação de lucros adapta-se às diferentes condições de mercado
  3. Combina as abordagens de negociação de tendência e inversão, aumentando as oportunidades de negociação
  4. O sistema automatizado de gestão de riscos reduz os erros de julgamento humanos
  5. A taxa de ganhos de 53,99% e o fator de lucro de 1,44 demonstram a estabilidade da estratégia
  6. A estratégia suporta alertas de negociação em tempo real para uma operação conveniente

Riscos estratégicos

  1. Indicadores múltiplos podem conduzir a um atraso no sinal, perdendo oportunidades em mercados rápidos
  2. 56,33% de aproveitamento máximo requer uma tolerância de risco significativa
  3. As negociações frequentes podem acarretar custos elevados de transacção
  4. A estratégia pode enfrentar riscos significativos em mercados altamente voláteis

Recomendações de controlo de riscos:

  • Aplicação rigorosa do plano de gestão do dinheiro
  • Revisão e ajustamento regulares dos parâmetros
  • Pausa de negociação durante os principais comunicados de imprensa
  • Estabelecer limites máximos de perdas diárias

Orientações para a otimização da estratégia

  1. Optimização de parâmetros:

    • Considerar a utilização de parâmetros de indicador de período adaptativo
    • Otimizar as definições do multiplicador ATR para melhorar a relação risco/recompensa
  2. Melhorias no sistema de sinalização:

    • Adicionar a validação do indicador de volume
    • Incorporar indicadores do sentimento do mercado
  3. Melhoria da gestão de riscos:

    • Implementar dimensionamento de posição dinâmica
    • Adicionar filtros baseados no tempo
  4. Melhorias técnicas:

    • Adicionar filtros de volatilidade de mercado
    • Otimizar o tempo de entrada e saída

Resumo

A estratégia atinge bons resultados de negociação através da combinação de múltiplos indicadores técnicos e sistema dinâmico de gerenciamento de riscos. Embora existam riscos de retirada, a estratégia demonstra boa adaptabilidade e estabilidade do mercado por meio de controle rigoroso de riscos e otimização contínua.


/*backtest
start: 2024-11-21 00:00:00
end: 2024-11-28 00:00:00
period: 15m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("XAUUSD STRATEGY 10MIN", overlay=true)

// Spread Adjustment (38-point spread)
spread = 38 * syminfo.mintick       

// MACD Calculation
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
macdBuy = ta.crossover(macdLine, signalLine)
macdSell = ta.crossunder(macdLine, signalLine)

// RSI Calculation
rsi = ta.rsi(close, 14)
rsiOverbought = rsi > 65
rsiOversold = rsi < 35

// Bollinger Bands Calculation
basis = ta.sma(close, 20)
dev = 2 * ta.stdev(close, 20)
upperBand = basis + dev
lowerBand = basis - dev

// ATR Calculation for Volatility-Based Stop Loss and Take Profit
atr = ta.atr(14)
stopLoss = 3 * atr
takeProfit = 5 * atr

// Variables to track entry price and line
var line entryLine = na
var int tradeNumber = 0
var string tradeType = ""
var string tradeSignalComment = ""

// Buy Condition
buyCondition = (macdBuy or rsiOversold or close < lowerBand)

// Sell Condition
sellCondition = (macdSell or rsiOverbought or close > upperBand)

// Strategy Entry and Alerts
if (buyCondition and strategy.opentrades == 0)  // Open a new buy trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by adding the spread (ask price)
    buyPrice = close + spread

    // Enter a new buy trade at the ask price, and close it with the bid price
    strategy.entry("Buy", strategy.long, stop=buyPrice - stopLoss, limit=buyPrice + takeProfit, comment="Enter buy $" + str.tostring(buyPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Long"
    tradeSignalComment := "Enter buy trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, buyPrice, bar_index + 50, buyPrice, width=1, color=color.green, style=line.style_dotted)
    
    // Send alert for the buy entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(buyPrice), alert.freq_once_per_bar_close)

if (sellCondition and strategy.opentrades == 0)  // Open a new sell trade
    // Remove the previous entry line if it exists
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Adjust the entry price by subtracting the spread (bid price)
    sellPrice = close - spread

    // Enter a new sell trade at the bid price, and close it with the ask price
    strategy.entry("Sell", strategy.short, stop=sellPrice + stopLoss, limit=sellPrice - takeProfit, comment="Enter sell $" + str.tostring(sellPrice))
    tradeNumber := tradeNumber + 1  // Increment trade number
    tradeType := "Entry Short"
    tradeSignalComment := "Enter sell trade"
    
    // Plot new dotted entry line for the current trade
    // entryLine := line.new(bar_index, sellPrice, bar_index + 50, sellPrice, width=1, color=color.red, style=line.style_dotted)
    
    // Send alert for the sell entry
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(sellPrice), alert.freq_once_per_bar_close)

// Exit conditions and alerts
if (strategy.position_size > 0 and sellCondition)  // Close buy when sell conditions met
    // Adjust the exit price by subtracting the spread (bid price)
    exitPrice = close - spread
    strategy.close("Buy", comment="Exit buy $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the buy exit
    tradeType := "Exit Long"
    tradeSignalComment := "Exit buy trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - "  + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

if (strategy.position_size < 0 and buyCondition)  // Close sell when buy conditions met
    // Adjust the exit price by adding the spread (ask price)
    exitPrice = close + spread
    strategy.close("Sell", comment="Exit sell $" + str.tostring(exitPrice))
    
    // Remove the entry line when the trade is closed
    // if not na(entryLine)
    //     line.delete(entryLine)
    
    // Send alert for the sell exit
    tradeType := "Exit Short"
    tradeSignalComment := "Exit sell trade"
    alert("Trade No: " + str.tostring(tradeNumber) + "\n" +
          "Signal: " + tradeType + " - " + tradeSignalComment + "\n" +
          "Date/Time: " + str.format("{0,date,dd-MM-yyyy HH:mm}", time) + "\n" +
          "Price: " + str.tostring(exitPrice), alert.freq_once_per_bar_close)

// Plot Indicators
plot(upperBand, title="Upper Bollinger Band", color=color.blue)
plot(lowerBand, title="Lower Bollinger Band", color=color.blue)


Relacionados

Mais.