Estratégia de ruptura do intervalo do MACD Stochastics

Autora:ChaoZhang, Data: 2023-12-11 11:48:27
Tags:

img

Resumo

A estratégia de ruptura do intervalo do MACD Stochastics combina os indicadores MACD e Stochastics em uma estratégia de negociação quantitativa.

Ao tomar posições, esta estratégia considera os sinais do MACD e do Estocástico para melhorar a qualidade das entradas.

Estratégia lógica

A estratégia de ruptura do intervalo do MACD Stochastics baseia-se principalmente nos seguintes princípios:

  1. O indicador MACD pode identificar eficazmente a direcção e o ímpeto das tendências dos preços
  2. Indicador estocástico pode detectar condições de sobrecompra ou sobrevenda de uma ação
  3. Quando o preço das ações tem variado por um período de tempo, é provável que ocorra um movimento direcional significativo após a quebra do intervalo anterior
  4. A combinação dos sinais do MACD e do Stochastics sobre intervalos permite entradas oportunas e melhora a qualidade

Especificamente, a estratégia usa a linha MACDDIFF cruzando a linha DEA para determinar sinais de tendência de alta ou baixa.

Enquanto isso, os cruzes entre a linha K e a linha D do Estocástico em torno de áreas de sobrecompra/supervenda (default 30 e 70) também produzem sinais comerciais.

Quando o MACD e o Estocástico derem sinais alinhados, a estratégia assumirá uma posição.

Após a entrada, os pontos de stop loss e take profit são definidos para controlar racionalmente a perda de uma única negociação e bloquear os lucros.

Forças

A estratégia de ruptura do intervalo do MACD Stochastics tem os seguintes pontos fortes:

  1. A combinação de indicadores melhora a qualidade do sinal

    Utilizando tanto o MACD quanto o Estocástico, filtra alguns sinais falsos e permite uma melhor qualidade de entrada.

  2. Captura de movimentos de ruptura e negociação de tendências

    A estratégia especializa-se em capturar movimentos significativos de fuga após o alcance.

  3. O mecanismo de stop loss/take profit otimizado controla eficazmente os riscos

    A lógica de stop loss/take profit integrada limita razoavelmente as perdas de transações individuais e bloqueia os ganhos em tempo hábil.

Riscos

Apesar do design cuidadoso, a estratégia de ruptura do intervalo do MACD Stochastics tem alguns riscos inerentes:

  1. Falta de tempo de entrada perfeito

    Falsos breakouts são comuns antes de breakouts válidos acontecerem.

  2. Fracassou a fuga

    Embora sejam feitos preparativos adequados antes das entradas, ainda são possíveis fugas fracassadas, levando a perdas.

  3. Optimização incorreta de parâmetros

    Configurações de parâmetros inadequadas prejudicam seriamente o desempenho da estratégia.

Para enfrentar os riscos acima referidos, podem ser adoptadas as seguintes optimizações:

  1. Adição de outros indicadores aos sinais filtrados

  2. Intervenção manual para garantir uma ruptura válida

  3. Testes rigorosos de otimização de parâmetros de múltiplos conjuntos

Orientações de otimização

Ainda há espaço para uma maior otimização da estratégia de ruptura do intervalo do MACD Stochastics:

  1. Otimizar os parâmetros MACD para encontrar a melhor combinação

  2. Otimize os parâmetros estocásticos para encontrar a melhor combinação

  3. Incorporar outros indicadores como KDJ, BOLL para melhorar a qualidade da entrada

  4. Teste diferentes períodos de detenção, otimize o stop loss/take profit

  5. Diferenças de parâmetros entre os activos de ensaio

  6. Introduzir algoritmos de aprendizagem de máquina para otimização automatizada de parâmetros

Conclusão

A estratégia de quebra de faixa do MACD Stochastics capitaliza as quebras de faixa, entrando com base em sinais alinhados do MACD e do Stochastics. O mecanismo de stop loss/take profit controla ainda mais os riscos.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="macd stoch strategy", shorttitle="benzo MACD stoch",overlay=true)
// Getting inputs
fast_length = input(title = "Fast Length", defval = 180)
slow_length = input(title = "Slow Length", defval = 390)
src = input(title = "Source", defval = close)
signal_length = input.int(title = "Signal Smoothing",  minval = 1, maxval = 500, defval = 135)
sma_source = input.string(title = "Oscillator MA Type",  defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

// hline(0, "Zero Line", color = color.new(#787B86, 50))
// plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
// plot(macd,   title = "MACD",   color = #2962FF)

// plot(signal, title = "Signal", color = #FF6D00)

periodK = input.int(14, title="%K Length", minval=1)
smoothK = input.int(1, title="%K Smoothing", minval=1)
periodD = input.int(3, title="%D Smoothing", minval=1)
k = ta.sma(ta.stoch(close, high, low, periodK), smoothK)
d = ta.sma(k, periodD)
// plot(k, title="%K", color=#2962FF)
// plot(d, title="%D", color=#FF6D00)
// h0 = hline(80, "Upper Band", color=#787B86)
// hline(50, "Middle Band", color=color.new(#787B86, 50))
// h1 = hline(20, "Lower Band", color=#787B86)
// fill(h0, h1, color=color.rgb(33, 150, 243, 90), title="Background")


// Make inputs that set the take profit % (optional)
longProfitPerc = input.float(3, title="Long Take Profit (%)", minval=0.0, step=0.1) * 0.01

shortProfitPerc = input.float(3, title="Short Take Profit (%)",minval=0.0, step=0.1) * 0.01

// Calculate trading conditions
enterLong  = macd>signal and ta.crossover(k,30)
enterShort = macd<signal and ta.crossunder(k,70)

// Figure out take profit price
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)
shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)

// Plot take profit values for confirmation
plot(strategy.position_size > 0 ? longExitPrice : na,
     color=color.green, style=plot.style_circles,
     linewidth=3, title="Long Take Profit")

plot(strategy.position_size < 0 ? shortExitPrice : na,
     color=color.red, style=plot.style_circles,
     linewidth=3, title="Short Take Profit")

// Submit entry orders
if enterLong
    strategy.entry("long", strategy.long)

if enterShort
    strategy.entry("short", strategy.short)

// STEP 3:
// Submit exit orders based on take profit price
if strategy.position_size > 0
    strategy.exit("long TP", limit=longExitPrice)

if strategy.position_size < 0
    strategy.exit("short TP", limit=shortExitPrice)

Mais.