Estratégia de árvore de decisão multi-indicador: IMACD, EMA e Ichimoku

Autora:ChaoZhang, Data: 2024-01-22 11:25:56
Tags:

img

Resumo

Esta estratégia integra múltiplos indicadores técnicos como o IMACD, EMA e Ichimoku para construir um modelo abrangente de árvore de decisão para gerar sinais de negociação.

Estratégia lógica

  1. IMACD: MACD reforçado para captar melhor as tendências do mercado através do ImpulseMACD e do ImpulseHisto
  2. Ichimoku: Linha de conversão gráfica, linha de base, comprimento principal A, comprimento principal B para identificar níveis de suporte e resistência
  3. EMA 40: Auxiliar na determinação da direcção da tendência
  4. Os sinais longos/cortos são acionados com base em condições específicas entre o IMACD, os componentes da nuvem e a EMA 40

Signo longo: Quando o IMACD é uma cor específica e a EMA 40 está acima do topo da nuvem, vá longo

Quando o IMACD estiver em vermelho e a EMA 40 estiver abaixo do fundo das nuvens, vá para curto

Análise das vantagens

  1. A combinação de múltiplos indicadores melhora a precisão do julgamento da tendência
  2. Classificação clara do modelo de árvore de decisão gera sinais comerciais inequívocos
  3. Duração flexível da EMA para uma melhor assistência na determinação da tendência
  4. Identificar melhor os níveis de suporte e resistência com indicadores de nuvem e tendência

Análise de riscos

  1. Ajuste de parâmetros complexos com múltiplos indicadores
  2. Os sinais falsos podem ser desencadeados por um comprimento EMA inadequado
  3. Dificuldade de acompanhar vários indicadores simultaneamente

Soluções de risco: Otimize as configurações dos parâmetros, ajuste o comprimento da EMA, simplifique o fluxo de trabalho.

Orientações de otimização

  1. Melhorar a estabilidade através da otimização dos parâmetros
  2. Limitar perdas com estratégias de stop loss
  3. Melhorar a qualidade do sinal através de backtesting com dados enormes
  4. Construir modelo de árvore de decisão adaptativa com aprendizagem de máquina

Resumo

Esta estratégia identifica tendências usando vários indicadores para construir um modelo de árvore de decisão para gerar sinais de negociação. Os prós são sinais de alta qualidade e precisos. Consiste em espaço para otimização progressiva. Requer foco no ajuste de parâmetros e stop loss para controlar riscos para retornos constantes a longo prazo.


/*backtest
start: 2024-01-14 00:00:00
end: 2024-01-21 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Decision Tree Strategy: IMACD, EMA and Ichimoku [cryptoonchain]", overlay=true)

lengthMA = input(34, title="Length MA")
lengthSignal = input(9, title="Length Signal")
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length")
basePeriods = input.int(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length")
displacement = input.int(26, minval=1, title="Lagging Span")
emaLength = input(40, title="EMA Length")  // Added user-configurable EMA length

calc_smma(src, len) =>
    smma = float(na)
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

calc_zlema(src, length) =>
    ema1 = ta.ema(src, length)
    ema2 = ta.ema(ema1, length)
    d = ema1 - ema2
    ema1 + d

src = ohlc4
hi = calc_smma(high, lengthMA)
lo = calc_smma(low, lengthMA)
mi = calc_zlema(src, lengthMA)

md = (mi > hi) ? (mi - hi) : (mi < lo) ? (mi - lo) : 0
sb = ta.sma(md, lengthSignal)
sh = md - sb
mdc = src > mi ? (src > hi ? color.rgb(128, 255, 0, 26) : color.green) : (src < lo ? color.red : color.orange)

colorCondition = color.rgb(128, 255, 0, 26)

conversionLine = math.avg(ta.lowest(conversionPeriods), ta.highest(conversionPeriods))
baseLine = math.avg(ta.lowest(basePeriods), ta.highest(basePeriods))
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = math.avg(ta.lowest(laggingSpan2Periods), ta.highest(laggingSpan2Periods))

// Use user-configurable length for EMA
ema40 = ta.ema(close, emaLength)

ebc = input(false, title="Enable bar colors")
barcolor(ebc ? mdc : na)

conversionLinePlot = plot(conversionLine, color=#2962FF, title="Conversion Line", display=display.none)
baseLinePlot = plot(baseLine, color=#B71C1C, title="Base Line", display=display.none)
laggingSpanPlot = plot(close, offset=-displacement + 1, color=#43A047, title="Lagging Span", display=display.none)
leadLine1Plot = plot(leadLine1, offset=displacement - 1, color=#A5D6A7, title="Leading Span A", display=display.none)
leadLine2Plot = plot(leadLine2, offset=displacement - 1, color=#EF9A9A, title="Leading Span B", display=display.none)
kumoCloudUpperLinePlot = plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset=displacement - 1, title="Kumo Cloud Upper Line", display=display.none)
kumoCloudLowerLinePlot = plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset=displacement - 1, title="Kumo Cloud Lower Line", display=display.none)
fill(kumoCloudUpperLinePlot, kumoCloudLowerLinePlot, color=leadLine1 > leadLine2 ? color.green : color.red)

a = (leadLine1 > leadLine2 ? leadLine1 : leadLine2) 
b = (leadLine1 < leadLine2 ? leadLine1 : leadLine2)  

if mdc == colorCondition and ema40 > a[displacement - 1]
    strategy.entry("Long", strategy.long)

if mdc == color.red and ema40 < b[displacement - 1]
    strategy.entry("Short", strategy.short)


Mais.