Candlestick Demigod MACD Divergência Tendência Seguindo Estratégia

Autora:ChaoZhang, Data: 2024-02-04 15:06:58
Tags:

img

Resumo

Esta estratégia calcula o indicador MACD e seu histograma MACD para detectar sinais de divergência entre o histograma MACD e o movimento dos preços, gerando assim sinais de negociação. Quando um novo alto no preço, mas nenhum novo alto no histograma MACD é detectado, um sinal de divergência de baixa é gerado. Quando um novo baixo no preço, mas nenhum novo baixo no histograma MACD é detectado, um sinal de divergência de alta é gerado. Combinado com o indicador ATR para stop loss e take profit, ele executa negociações seguindo a tendência.

Estratégia lógica

O princípio central desta estratégia é utilizar o indicador MACD e o seu histograma MACD para refletir as alterações nas tendências de preços e detectar sinais de divergência entre o histograma MACD e o preço como condição de desencadeamento para os sinais de negociação.

Especificamente, a estratégia primeiro calcula a linha MACD, a linha de sinal e o histograma MACD. Em seguida, definindo a função fractal para detectar picos e vales do histograma MACD para extrair máximos e mínimos locais. Combinado com o preço mais alto e o preço mais baixo, determina se há uma divergência entre o histograma MACD e o preço.

Quando o preço atinge uma nova alta, mas o histograma MACD não atinge uma nova alta, é gerado um sinal de divergência de baixa regular_bearish_div. Quando o preço cai para uma nova baixa, mas o histograma MACD não cai para uma nova baixa, é gerado um sinal de divergência de alta regular_bullish_div.

Por fim, quando são gerados sinais de divergência de baixa e alta, a estratégia emite ordens de curto e longo, respectivamente, e sai das posições com ATR stop loss e take profit.

Análise das vantagens

Esta estratégia tem as seguintes vantagens:

  1. Ao utilizar o recurso de divergência entre o histograma MACD e o preço, ele pode capturar as voltas nas tendências de preços cedo.

  2. As definições de stop loss e take profit do ATR são razoáveis para controlar eficazmente a perda máxima por transação.

  3. Usar o método de tendência pode maximizar o lucro bloqueado.

  4. Configurações razoáveis de parâmetros filtram alguns sinais comerciais ruidosos.

  5. A lógica da estratégia é clara e fácil de entender, fácil de validar na negociação ao vivo.

Análise de riscos

Esta estratégia tem também alguns riscos:

  1. A divergência do MACD não conduz necessariamente a uma inversão de preços, existem alguns riscos de falso sinal.

  2. As configurações desnecessárias de stop loss e take profit podem conduzir a perdas excessivas ou a lucros insuficientes.

  3. Os sinais de divergência com ciclos curtos podem ser causados por ruído e devem ser adequadamente filtrados.

  4. Os produtos de negociação e as definições de parâmetros incompatíveis também afetarão o desempenho da estratégia.

Soluções correspondentes:

  1. Aumentar os requisitos de comprimento e magnitude da divergência para filtrar falsos sinais.

  2. O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.

  3. Selecionar diferentes parâmetros para diferentes produtos de negociação.

Orientações de otimização

Esta estratégia pode também ser otimizada nas seguintes direcções:

  1. Confirmação de divergência mais complexa, como a confirmação de divergência de volume.

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

  3. Otimizar os múltiplos de ATR stop loss e take profit.

  4. Adicionar algoritmos de aprendizagem de máquina para ajudar a julgar a confiabilidade dos sinais de divergência.

  5. Adicionar a previsão do modelo para determinar a probabilidade de reversão do preço.

  6. Ajustar dinamicamente os parâmetros da estratégia de acordo com as alterações das condições do mercado.

Resumo

Em resumo, esta estratégia de seguimento de tendência de divergência do MACD do candelabro de Demigod utiliza a divergência entre o histograma do MACD e o preço para capturar tendências. As configurações razoáveis de stop loss e take profit do ATR podem controlar os riscos por comércio. A lógica da estratégia é clara e fácil de entender, vale a pena validar na negociação ao vivo. As otimizações de acompanhamento podem ser feitas em muitos aspectos para obter melhores resultados.


/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
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/
// © bigwin_sun
// copyright: Tradingvue Limited    

//@version = 5
strategy(title = "Demigod : CDMA histogram Divergence strategy", shorttitle = "Demigod strategy", overlay = false, pyramiding = 100)

//macd input
fastMA = input.int(13, title = "fast Length", minval = 1,     group = "CDMA")
slowMA = input.int(34, title = "slow Length", minval = 1,     group = "CDMA")
src          = input.source(title = "source", defval = close, group = "CDMA")
signalSmooth = input.int(9, title="ma Length", minval = 1,    group = "CDMA")
//Divergenc
divLength    = input.int(title = "Divergenc Length",   defval = 5, minval = 1,   maxval = 50,  inline = "ATRLength",  group = "Divergence")
divStren     = input.float(title="Divergenc Strength", defval = 2, minval = 1.0, maxval = 5.0, inline = "ATRLength",  group = "Divergence")

//atr input
atrLength = input.int(13, title = "ATR Length", minval = 1,   inline = "ATRLength", group = "ATR")
m         = input.float(1.0,  "ATR multyple",   minval = 0.5, inline = "ATRLength", group = "ATR", step = 0.5)
collong   = input.color(color.teal, title = "upper color",  inline = "ATR显示", group = "ATR")
colshort  = input.color(color.red,  title = "under color",  inline = "ATR显示", group = "ATR")

// MACD---------------------------------------------------------------------------------------------------------------------------------
DivOffset = -2
macdLine   = ta.ema(src, fastMA) - ta.ema(src, slowMA)    
signalLine = ta.ema(macdLine, signalSmooth)
histogram  = macdLine - signalLine

histogramColor = if histogram > 0
    histogram > histogram[1] ? color.lime : color.green
else 
    histogram < histogram[1] ? color.maroon : color.red

// cdma histogram
plot(histogram, title = "MACD histogram", linewidth = 2, style = plot.style_histogram, color = histogramColor)
plot(0,         title = "zero line",      linewidth = 1,                               color = color.gray)

// Divergenc calculation-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//peak / valley fundation
f_top_fractal(_src)=>_src[4] < _src[2] and _src[3] < _src[2] and _src[2] > _src[1] and _src[2] > _src[0] and _src > 0
f_bot_fractal(_src)=>_src[4] > _src[2] and _src[3] > _src[2] and _src[2] < _src[1] and _src[2] < _src[0] and _src < 0
f_fractalize(_src)=>f_top_fractal(_src) ? 1 : f_bot_fractal(_src) ? -1 : 0

//peak / valley value
fractal_top1 = f_fractalize(histogram) > 0 ? true : false //histogram[2] : na
fractal_bot1 = f_fractalize(histogram) < 0 ? true : false //histogram[2] : na

//previouse peak or valley
high_prev1  = ta.valuewhen(fractal_top1, histogram[2], 0)[2]
high_price1 = ta.valuewhen(fractal_top1, high[2], 0)[2]
low_prev1   = ta.valuewhen(fractal_bot1, histogram[2], 0)[2]
low_price1  = ta.valuewhen(fractal_bot1, low[2], 0)[2]

//Divergenc : cdma histogram against candle value
regular_bearish_div1 = high[2] > high_price1 + divStren and histogram[2] < high_prev1 / divStren and ta.barssince(fractal_top1[1]) > divLength
regular_bullish_div1 = low[2]  < low_price1 - divStren  and histogram[2] > low_prev1 / divStren  and ta.barssince(fractal_bot1[1]) > divLength

//-------------------------cdma Divergenc range------------------------------------------------
//histogramColor
col1 = regular_bearish_div1 ? color.red : na
col2 = regular_bullish_div1 ? #00FF00EB : na
//plot
plot(title='看跌背离', series= fractal_top1 ? histogram[2] : na, color=col1, linewidth=3, offset=DivOffset)
plot(title='看涨背离', series= fractal_bot1 ? histogram[2] : na, color=col2, linewidth=3, offset=DivOffset)

// calculate ATR				--------------------------------------------------------------------------------------------------------------------------------------------------
atr = ta.ema(ta.tr(true), atrLength) * m
up = atr + high
dw = low - atr

//stratety : enrty and exit---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if regular_bearish_div1 and fractal_top1
//if regular_bullish_div1 and fractal_bot1
    //label.new(bar_index, histogram[2], text = "Short", textcolor = color.white, color = color.gray,  style = label.style_label_lower_left)
    strategy.entry("Short", strategy.short, qty = 1)
    strategy.exit("exitShort", "Short", stop = up, limit = dw - atr)
if regular_bullish_div1 and fractal_bot1
//if regular_bearish_div1 and fractal_top1   
    //label.new(bar_index, histogram[2], text = "Long", textcolor = color.white, color = color.fuchsia, style = label.style_label_upper_left)
	strategy.entry("Long", strategy.long, qty = 1)
    strategy.exit("exitLong", "Long", stop = dw, limit = up + atr)


Mais.