
A Estratégia de Breakout de Oscilação do MACD Stochastics é uma estratégia de negociação quantitativa que combina o indicador MACD com o indicador Stochastics. A estratégia tenta identificar a direção da tendência dos preços das ações e entrar em posições quando os preços saem da zona de oscilação.
Ao entrar em uma posição, a estratégia considera simultaneamente os sinais dos dois indicadores MACD e Stochastics para melhorar a qualidade das entradas. Além disso, a estratégia prevê um ponto de parada e um ponto de parada para controlar eficazmente o risco.
A estratégia de ruptura de onda do MACD Stochastics baseia-se principalmente nos seguintes princípios:
Especificamente, a estratégia usa o cruzamento da linha DIFF e da linha DEA do indicador MACD como um sinal para determinar a direção da tendência de preços. Quando a DIFF sobe e quebra a DEA, gera um sinal de multi-cabeça e, ao contrário, gera um sinal de cabeceira vazia.
Ao mesmo tempo, a linha K do Stochastics cruza-se para cima ou para baixo com a linha D perto das áreas de sobrecompra e sobrevenda (default 30 e 70), gerando também um sinal de negociação.
A estratégia escolhe a entrada quando o MACD e o Stochastics dão sinais simultâneos de sincronia. Nesse momento, o preço das ações provavelmente terá uma grande ruptura.
Após a entrada, a estratégia define um ponto de parada racional e um ponto de parada. Um ponto de parada racional pode controlar efetivamente a perda individual e um ponto de parada pode bloquear o lucro.
A estratégia de ruptura de choque do intervalo de ondas do MACD Stochastics tem as seguintes vantagens:
A estratégia usa MACD e Stochastics para filtrar alguns sinais falsos e melhorar a qualidade das entradas.
A estratégia é projetada especificamente para capturar brechas após oscilações de longo prazo. Estas tendem a ser maiores.
A estratégia possui um parâmetro de stop loss para controlar razoavelmente as perdas individuais e bloquear os lucros a tempo.
Apesar de uma estratégia de ruptura de onda do MACD Stochastics ter sido cuidadosamente projetada, existem alguns riscos:
Uma falsa ruptura pode ocorrer antes da ruptura do preço das ações. Se o momento de entrada não for escolhido corretamente, a entrada pode se transformar em um ponto de entrada perdido.
Apesar da preparação adequada antes da invasão, ainda há a possibilidade de uma invasão fracassada. Nesse caso, há prejuízos.
A configuração de parâmetros da estratégia pode ter um grande impacto nos resultados. Se a configuração de parâmetros for incorreta, haverá um grande desconto.
Para otimizar o risco acima, você pode:
Combinação de outros indicadores para filtrar sinais
Intervenção humana para garantir a posição de ruptura
Teste de otimização de múltiplos parâmetros
A estratégia de ruptura de onda do MACD Stochastics ainda tem espaço para otimização adicional:
Optimizar os parâmetros do MACD para encontrar a melhor combinação de parâmetros
Optimizar os parâmetros de Stochastics para encontrar a melhor combinação de parâmetros
Adicionar outros conjuntos de indicadores, como KDJ, BOLL e outros, para melhorar ainda mais a qualidade das entradas
Testar diferentes períodos de detenção e otimizar estratégias de stop-loss
Teste de variabilidade de parâmetros de diferentes indicadores de negociação
Adição de algoritmos de aprendizagem de máquina para otimização automática de parâmetros
A estratégia de ruptura de onda do MACD Stochastics usa integralmente os dois indicadores MACD e Stochastics, com entrada de alta qualidade no momento da ruptura de onda. Ao mesmo tempo, é auxiliada pela estratégia de parada de prejuízo para controlar eficazmente o risco.
/*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)