Estratégia de negociação quantitativa Triple Super Trend Ichimoku Cloud


Data de criação: 2023-12-27 15:22:40 última modificação: 2023-12-27 15:22:40
cópia: 1 Cliques: 1074
1
focar em
1623
Seguidores

Estratégia de negociação quantitativa Triple Super Trend Ichimoku Cloud

Visão geral

Esta estratégia é uma estratégia de negociação quantitativa que combina o triplo indicador de tendência ultrapassada, o indicador da nuvem de Ichimoku, o indicador de amplitude real média (ATR) e o indicador de média móvel do índice (EMA). A estratégia determina a direção da tendência do mercado através do triplo indicador de tendência ultrapassada, a nuvem de Ichimoku determina a pressão de suporte, o indicador de ATR define o stop loss e o indicador de EMA confirma a tendência, formando um sistema de negociação mais completo.

Princípio da estratégia

A lógica central desta estratégia baseia-se no julgamento de três indicadores de ultra-trend. Os indicadores de ultra-trend julgam a direção da tendência comparando o preço com a grandeza da relação entre a amplitude real média em um determinado período.

Além disso, o índice de densidade de nuvens de Ichimoku julga a força e a fraqueza da tendência atual, eliminando assim alguns sinais falsos. O indicador ATR é usado para definir o ponto de parada. O indicador EMA é usado para confirmar a tendência de linha média e longa.

Concretamente, quando o preço está acima da linha superior de três grupos de indicadores de tendência ultrapassada, faça mais; quando o preço está abaixo da linha inferior de três grupos de indicadores de tendência ultrapassada, faça um vazio. Ao mesmo tempo, solicite que o preço esteja acima ou abaixo da nuvem de Ichimoku, filtrando os sinais de incerteza. O ponto de parada é definido como o preço de abertura da posição menos o valor do indicador ATR, para permitir o acompanhamento dinâmico.

Vantagens estratégicas

  1. A configuração de parâmetros do indicador de tendência super triplo é diferente, permitindo filtrar efetivamente o ruído do mercado e determinar com maior precisão a direção da tendência.

  2. Os indicadores da nuvem Ichimoku julgam a tendência forte ou fraca, evitando falsas rupturas. A configuração de stop loss do ATR é razoável, evitando o máximo de perdas enormes.

  3. Os indicadores EMA auxiliam a determinar a direção da tendência da linha média longa, verificando-se mutuamente com a determinação da tendência ultra, aumentando ainda mais a confiabilidade do sinal.

  4. A combinação de vários indicadores permite a verificação mútua entre os diferentes indicadores, o julgamento integral da tendência do mercado, e os sinais são mais confiáveis.

Risco estratégico

  1. Apesar de se juntar ao Ichimoku Cloud Index, existe o risco de quebrar a nuvem e entrar na zona de invalidez. Nesse caso, o ATR controla parte dos prejuízos em um determinado intervalo.

  2. Quando o mercado está muito flutuante, o ponto de parada definido pelo indicador ATR pode ser acionado diretamente, aumentando a taxa de perda da estratégia. Nesse caso, os parâmetros do ATR podem ser ajustados ou o alcance de parada pode ser aumentado.

  3. Se os parâmetros do indicador de supertendência tripla forem configurados incorretamente, muitos sinais inválidos podem ser produzidos. Isso requer um grande número de retrocessões para encontrar o melhor parâmetro de combinação.

Direção de otimização da estratégia

  1. Pode-se adicionar outros indicadores de julgamento, como o indicador de taxa de flutuação, o indicador de faixa de Brin, etc., para auxiliar o filtro de sinais e melhorar a confiabilidade.

  2. Pode-se ajustar dinamicamente o limiar de parada em grandes flutuações, reduzindo a taxa de perda, melhorando a forma de cálculo do indicador ATR.

  3. Pode ser incorporado um modelo de aprendizagem de máquina para julgar os sinais de compra e venda através do treinamento de dados históricos, reduzindo o impacto da configuração de parâmetros manuais e aumentando a precisão do sinal.

Resumir

Esta estratégia integra o uso de três supertrends, a nuvem de Ichimoku, o indicador ATR e os quatro componentes do indicador EMA. Os diferentes indicadores verificam os sinais uns dos outros para determinar a direção da tendência do mercado. A nuvem de Ichimoku e o indicador ATR controlam o risco de perda e a EMA auxiliam na confirmação da tendência da linha média. O sinal estratégico é mais confiável e adequado para a linha média.

Código-fonte da estratégia
/*backtest
start: 2022-12-20 00:00:00
end: 2023-12-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true )

// 
float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100

// ichimoku Cloud
conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku")
basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku")
laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku")
displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = math.avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7,
	 title="Leading Span A", display = display.none)
p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a,
	 title="Leading Span B", display = display.none)
plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none) 
plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none) 
fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70))


// three supertrend

//1
atrPeriod1 = input(10, "ATR Length1", group="SuperTrend")
factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend")

[supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1)
supertrend1 := barstate.isfirst ? na : supertrend1

bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend1 =    plot(direction1 < 0 ? supertrend1 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend1 =  plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red,   style = plot.style_linebr)


//2
atrPeriod2 = input(11, "ATR Length2", group="SuperTrend")
factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend")

[supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2)
supertrend2 := barstate.isfirst ? na : supertrend2

bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend2 =    plot(direction2 < 0 ? supertrend2 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend2 =  plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red,   style = plot.style_linebr)


//3
atrPeriod3 = input(12, "ATR Length2", group="SuperTrend")
factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend")

[supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3)
supertrend3 := barstate.isfirst ? na : supertrend3

bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none)
upTrend3 =    plot(direction3 < 0 ? supertrend3 : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend3 =  plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red,   style = plot.style_linebr)


// ATR
lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR")
smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR")
ma_function(sourceATR, lengthATR) =>
	switch smoothingATR
		"RMA" => ta.rma(sourceATR, lengthATR)
		"SMA" => ta.sma(sourceATR, lengthATR)
		"EMA" => ta.ema(sourceATR, lengthATR)
		=> ta.wma(sourceATR, lengthATR)
ATR = ma_function(ta.tr(true), lengthATR)
plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none)

// EMA
lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA")
srcEMA = input(close, title="Source of EMA", group="EMA")
offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA")
outEMA = ta.ema(srcEMA, lenEMA)
plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none)

ma(sourceEMA, lengthEMA, type) =>
    switch type
        "SMA" => ta.sma(sourceEMA, lengthEMA)
        "EMA" => ta.ema(sourceEMA, lengthEMA)
        "SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA)
        "WMA" => ta.wma(sourceEMA, lengthEMA)
        "VWMA" => ta.vwma(sourceEMA, lengthEMA)

typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA")
smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA")

smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none)


//logic



if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3) 
	strategy.entry("L", strategy.long)
else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR) 
	strategy.entry("S", strategy.short)
else
	strategy.close_all("C")