Estratégia Quant Trading Baseada na Nuvem Ichimoku

Autora:ChaoZhang, Data: 2024-01-12 14:20:43
Tags:

img

Resumo

Esta estratégia projeta um sistema de negociação quantitativo baseado no indicador Ichimoku Cloud, principalmente para ativos com boas tendências.

Princípio da estratégia

A nuvem Ichimoku consiste em linha de conversão, linha de base, lead span 1, lead span 2 e gráficos de nuvem. Os sinais de negociação desta estratégia vêm da relação entre o preço e os gráficos de nuvem. Especificamente, um sinal de compra é gerado quando o preço cruza acima do lead span 1; Um sinal de venda é gerado quando o preço cruza abaixo do lead span 1. Além disso, o lead span 2 também serve como um indicador de julgamento auxiliar.

Esta estratégia também define stop loss e take profit com base no indicador ATR. O indicador ATR pode efetivamente capturar o grau de flutuação do mercado. O stop loss é definido em 2 vezes o ATR e o take profit é definido em 4 vezes o ATR. Isso pode efetivamente controlar a perda única e bloquear alguns lucros.

Finalmente, a estratégia adota um mecanismo de stop loss de trail. Especificamente, para posições longas, ele usará 2 vezes o ATR como a amplitude de callback para ajustar a linha de stop loss em tempo real para bloquear lucros; para posições curtas, ele usará 2 vezes o ATR como a amplitude de callback para ajustar a linha de stop loss em tempo real para bloquear lucros.

Análise das vantagens

  1. Com base no indicador de gráfico de nuvens de Ichimoku, pode efetivamente capturar tendências
  2. Com o ATR baseado em stop loss e take profit, pode controlar os riscos
  3. Adotar um mecanismo de stop loss para garantir os lucros
  4. A lógica estratégica é simples e clara, fácil de compreender e verificar
  5. A parametrização está disponível, os parâmetros podem ser ajustados de acordo com diferentes mercados

Análise de riscos

  1. Os mapas de nuvem Ichimoku são muito sensíveis às configurações de parâmetros, configurações incorretas podem perder oportunidades de negociação ou gerar sinais errados
  2. Se a amplitude de perda de parada de tracção for demasiado grande, a perda de parada pode ocorrer prematuramente
  3. As ações fortes podem atravessar a linha de stop loss ou a linha de stop loss posterior dada pelo indicador ATR
  4. Os custos de transacção também terão um certo impacto na rendibilidade

Soluções para os riscos correspondentes:

  1. Otimize os parâmetros dos mapas de nuvem Ichimoku para encontrar as configurações mais adequadas
  2. Avaliação da amplitude razoável de stop loss de trail, nem demasiado grande nem demasiado pequena
  3. Para ações fortes, relaxar adequadamente o intervalo de stop loss
  4. Escolha corretores com baixas comissões

Orientações de otimização

  1. Combinar outros indicadores técnicos de filtragem de sinais para reduzir as operações erradas
  2. Otimizar os parâmetros com base em dados históricos/backtesting
  3. Os parâmetros para diferentes variedades podem ser otimizados separadamente
  4. Considerar o ajuste dinâmico da amplitude de stop loss
  5. Combinar algoritmos para fazer engenharia de recursos para construir sinais comerciais mais confiáveis

Resumo

Em geral, esta estratégia é uma estratégia de rastreamento de tendência estável. Julgue a direção da tendência com base no indicador de nuvem de Ichimoku; defina stop loss e tire lucro usando o indicador ATR; use stop loss para bloquear lucros. As vantagens são lógica simples, fáceis de entender; perda única pode ser controlada; a tendência pode ser rastreada efetivamente. Mas também há alguns riscos de sensibilidade de parâmetros e perda de parada sendo quebrada. Ao otimizar continuamente os parâmetros e a própria estratégia, um melhor desempenho pode ser obtido.


/*backtest
start: 2023-01-05 00:00:00
end: 2024-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Ichimoku Cloud Strategy with SL, TP, and Trailing Stop", overlay=true)

conversionPeriods = input(9, "Conversion Line Length")
basePeriods = input(26, "Base Line Length")
laggingSpan2Periods = input(52, "Leading Span B Length")
displacement = input(26, "Lagging Span")
atrLength = input(14, title="ATR Length")

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

// Plot the Ichimoku Cloud components
plot(conversionLine, color=color.blue, title="Conversion Line")
plot(baseLine, color=color.red, title="Base Line")
plot(leadLine1, color=color.green, title="Leading Span A")
plot(leadLine2, color=color.orange, title="Leading Span B")
plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, color=color.green, title="Kumo Cloud Upper Line")
plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, color=color.red, title="Kumo Cloud Lower Line")

// ATR for stop loss and take profit
atrValue = ta.atr(atrLength)
stopLoss = atrValue * 2
takeProfit = atrValue * 4

// Strategy entry and exit conditions
longCondition = ta.crossover(close, leadLine1) and close > leadLine2
shortCondition = ta.crossunder(close, leadLine1) and close < leadLine2

// Plot buy and sell signals
plotshape(series=longCondition ? leadLine1 : na, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=shortCondition ? leadLine1 : na, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// Execute strategy orders with stop loss and take profit
strategy.entry("Buy", strategy.long, when=longCondition)
strategy.close("Buy", when=shortCondition) // Close buy position when sell condition is met
strategy.entry("Sell", strategy.short, when=shortCondition)
strategy.close("Sell", when=longCondition) // Close sell position when buy condition is met

// Trailing stop
strategy.cancel("Trailing Stop")
var float trailingStopPrice = na
if (longCondition)
    trailingStopPrice := math.max(trailingStopPrice, close - atrValue * 2)
    strategy.exit("Trailing Stop", from_entry="Buy", trail_offset=atrValue * 2, trail_price=trailingStopPrice)
else if (shortCondition)
    trailingStopPrice := math.min(trailingStopPrice, close + atrValue * 2)
    strategy.exit("Trailing Stop", from_entry="Sell", trail_offset=atrValue * 2, trail_price=trailingStopPrice)


Mais.