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

Estratégia de convergência do MACD com R:R, limites diários e stop loss mais apertados

Autora:ChaoZhang, Data: 2024-06-03 16:47:56
Tags:MACD

img

Resumo

Esta estratégia usa a convergência e divergência do indicador MACD para gerar sinais de negociação. Quando a linha MACD cruza a linha de sinal, e o valor da linha MACD é maior que 1,5 ou menor que -1,5, gera sinais longos e curtos, respectivamente. A estratégia define níveis fixos de take-profit e stop-loss e introduz o conceito de relação risco-recompensa (R: R). Além disso, emprega perdas máximas diárias e limites de lucro e um stop-loss mais apertado para controlar melhor os riscos.

Princípio da estratégia

  1. Calcular a linha MACD e a linha de sinal do indicador MACD.
  2. Determinar as situações de cruzamento entre a linha MACD e a linha de sinal, considerando simultaneamente se o valor da linha MACD excede certos limiares (1.5 e -1.5).
  3. Quando aparecer um sinal longo, abrir uma posição longa com um preço de take-profit do preço mais alto atual + 600 unidades mínimas de tick e um preço de stop-loss do preço mais baixo atual - 100 unidades mínimas de tick.
  4. Quando aparecer um sinal de curto prazo, abrir uma posição curta com um preço de take-profit do preço mais baixo atual - 600 unidades mínimas de tick e um preço stop-loss do preço mais alto atual + 100 unidades mínimas de tick.
  5. Introduzir uma lógica de stop-loss de trailing: quando o preço sobe (posição longa) ou desce (posição curta) mais de 300 unidades de tick mínimas em relação ao preço de entrada, mover o preço de stop-loss para o preço de entrada + (preço de fechamento - preço de entrada - 300) para posições longas ou preço de entrada - (preço de entrada - preço de fechamento - 300) para posições curtas.
  6. Estabelecer limites máximos diários de perdas e lucros: quando a perda diária atingir 600 unidades mínimas de tick ou o lucro atingir 1800 unidades mínimas de tick, fechar todas as posições.

Análise das vantagens

  1. A combinação do indicador MACD com as condições de limiar de preços filtra efetivamente alguns sinais de ruído.
  2. A relação risco/recompensa fixa (R:R) torna o risco e a recompensa de cada negociação controláveis.
  3. A lógica de stop-loss protege os lucros após a formação de uma tendência e reduz os drawdowns.
  4. Os limites máximos diários de perdas e lucros ajudam a controlar a exposição diária ao risco e a evitar perdas ou lucros excessivos seguidos de retrações.

Análise de riscos

  1. O indicador MACD tem um efeito de atraso, o que pode resultar em sinais atrasados ou falsos.
  2. Os níveis fixos de take-profit e stop-loss podem não se adaptar às diferentes condições de mercado e podem ser frequentemente desencadeados em mercados instáveis.
  3. A lógica de stop-loss pode falhar em deter as perdas a tempo durante as inversões de tendência, levando a perdas de lucro.
  4. Os limites máximos diários de perdas e lucros podem fazer com que a estratégia feche posições prematuramente quando a tendência diária estiver clara, perdendo lucros potenciais.

Direcção de otimização

  1. Considere a utilização de indicadores MACD multi-tempo para confirmar sinais e melhorar a precisão do sinal.
  2. Ajustar dinamicamente os níveis de take-profit e stop-loss com base na volatilidade do mercado para se adaptar às diferentes condições do mercado.
  3. Otimizar a lógica de stop-loss final, como definir a distância de stop-loss final com base no indicador ATR para melhor adaptação às flutuações de preços.
  4. Otimizar os parâmetros dos limites máximos diários de perdas e lucros para encontrar valores-limite adequados que controlem os riscos enquanto captam os movimentos da tendência tanto quanto possível.

Resumo

Esta estratégia usa a convergência e divergência do indicador MACD para gerar sinais de negociação, ao mesmo tempo em que introduz medidas de controle de risco, como relação risco-recompensa, stop-loss e limites diários.


/*backtest
start: 2023-05-28 00:00:00
end: 2024-06-02 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DD173838

//@version=5
strategy("MACD Convergence Strategy with R:R, Daily Limits, and Tighter Stop Loss", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1)

// MACD settings
fastLength = input.int(12, title="Fast Length", minval=1)
slowLength = input.int(26, title="Slow Length", minval=1)
signalSmoothing = input.int(9, title="Signal Smoothing", minval=1)
source = input(close, title="Source")

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)

// Plot MACD and signal line
plot(macdLine, title="MACD Line", color=color.blue)
plot(signalLine, title="Signal Line", color=color.red)

// Define convergence conditions
macdConvergenceUp = ta.crossover(macdLine, signalLine) and macdLine > 1.5
macdConvergenceDown = ta.crossunder(macdLine, signalLine) and macdLine < -1.5

// Define take profit and stop loss

        
    
takeProfit = 600
stopLoss = 100

// Plot buy and sell signals on the chart
plotshape(series=macdConvergenceDown, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT")
plotshape(series=macdConvergenceUp, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG")

// Execute short and long orders with defined take profit and stop loss
if (macdConvergenceDown)
    strategy.entry("Short", strategy.short, qty=1, stop=high + (stopLoss / syminfo.mintick), limit=low - (takeProfit / syminfo.mintick))

if (macdConvergenceUp)
    strategy.entry("Long", strategy.long, qty=1, stop=low - (stopLoss / syminfo.mintick), limit=high + (takeProfit / syminfo.mintick))

// Trailing stop logic
var float entryPrice = na
var float trailingStopPrice = na

if (strategy.position_size != 0)
    entryPrice := strategy.opentrades.entry_price(0)

if (strategy.position_size > 0)  // For long positions
    if (close - entryPrice > 300)
        trailingStopPrice := entryPrice + (close - entryPrice - 300)

if (strategy.position_size < 0)  // For short positions
    if (entryPrice - close > 300)
        trailingStopPrice := entryPrice - (entryPrice - close - 300)

if (strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice)
    strategy.close("Long", comment="Trailing Stop")

if (strategy.position_size < 0 and not na(trailingStopPrice) and close > trailingStopPrice)
    strategy.close("Short", comment="Trailing Stop")

// Daily drawdown and profit limits
var float startOfDayEquity = na
if (na(startOfDayEquity) or ta.change(time('D')) != 0)
    startOfDayEquity := strategy.equity

maxDailyLoss = 600
maxDailyProfit = 1800
currentDailyPL = strategy.equity - startOfDayEquity

if (currentDailyPL <= -maxDailyLoss)
    strategy.close_all(comment="Max Daily Loss Reached")

if (currentDailyPL >= maxDailyProfit)
    strategy.close_all(comment="Max Daily Profit Reached")


Relacionados

Mais.