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.
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.
Esta estratégia tem as seguintes vantagens:
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.
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.
Usar o método de tendência pode maximizar o lucro bloqueado.
Configurações razoáveis de parâmetros filtram alguns sinais comerciais ruidosos.
A lógica da estratégia é clara e fácil de entender, fácil de validar na negociação ao vivo.
Esta estratégia tem também alguns riscos:
A divergência do MACD não conduz necessariamente a uma inversão de preços, existem alguns riscos de falso sinal.
As configurações desnecessárias de stop loss e take profit podem conduzir a perdas excessivas ou a lucros insuficientes.
Os sinais de divergência com ciclos curtos podem ser causados por ruído e devem ser adequadamente filtrados.
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:
Aumentar os requisitos de comprimento e magnitude da divergência para filtrar falsos sinais.
O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.
Selecionar diferentes parâmetros para diferentes produtos de negociação.
Esta estratégia pode também ser otimizada nas seguintes direcções:
Confirmação de divergência mais complexa, como a confirmação de divergência de volume.
Otimizar os parâmetros MACD para encontrar a melhor combinação de parâmetros.
Otimizar os múltiplos de ATR stop loss e take profit.
Adicionar algoritmos de aprendizagem de máquina para ajudar a julgar a confiabilidade dos sinais de divergência.
Adicionar a previsão do modelo para determinar a probabilidade de reversão do preço.
Ajustar dinamicamente os parâmetros da estratégia de acordo com as alterações das condições do mercado.
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)