Estratégia Quant da Nuvem Ichimoku

Autora:ChaoZhang, Data: 2023-11-24 10:15:15
Tags:

img

Resumo

Esta é uma estratégia de quantidade de nuvem Ichimoku de longo prazo. A estratégia julga a direção da tendência através do indicador Ichimoku, combinado com padrões de linha K, médias móveis e o indicador Stochastic RSI para filtrar sinais e ir longo em melhores pontos de entrada quando a tendência sobe.

Princípio da estratégia

Os principais critérios de avaliação da estratégia são:

  1. A linha de condução Ichimoku 1 cruza acima da linha de condução 2, indicando uma tendência ascendente
  2. O preço de fechamento da linha K cruza acima da linha principal 1, preenchendo a condição de seguir a tendência
  3. A linha K é uma vela verde, a tendência sobe.
  4. Quando as médias móveis estiverem ativadas, a MA rápida cruza acima da MA lenta
  5. Quando o RSI estocástico está habilitado, a linha %K cruza acima da linha %D

Quando todas as condições acima são satisfeitas ao mesmo tempo, a estratégia abrirá posições longas.

A estratégia usa principalmente a nuvem Ichimoku para determinar a direção da tendência principal, combinada com indicadores auxiliares para filtrar sinais e fazer longos em pontos melhores quando a tendência sobe.

Vantagens da estratégia

  1. Use a nuvem Ichimoku para determinar a tendência principal, o backtest mostra alta precisão
  2. Combinado com múltiplos indicadores auxiliares para filtrar os pontos de entrada, pode melhorar significativamente a taxa de lucro
  3. Estratégia de longo prazo, adequada para moedas que se encontrem num mercado de alta
  4. Grande espaço para otimização de parâmetros, pode ajustar parâmetros do indicador para otimização adicional

Riscos da Estratégia

  1. Há uma probabilidade de a nuvem Ichimoku julgar a tendência erroneamente.
  2. O ponto de stop loss pode ser quebrado durante mudanças repentinas no mercado, levando a perdas aumentadas
  3. Projetado para mercados de alta, não adequado para moedas com sinais ocultos de inversão de tendência
  4. Configurações incorretas dos parâmetros podem levar a entradas excessivamente agressivas ou a ações excessivamente conservadoras

Contramedidas:

  1. Combinar mais indicadores para avaliar a tendência, melhorar a precisão
  2. Estabelecer pontos razoáveis de parada de perdas para controlar rigorosamente perdas individuais
  3. Selecionar estratégias adequadas de acordo com as condições de mercado das diferentes moedas
  4. Teste e otimize cuidadosamente os parâmetros para tornar a estratégia mais estável

Orientações para a otimização da estratégia

  1. Otimizar as definições dos parâmetros dos indicadores auxiliares para melhorar ainda mais a estabilidade
  2. Adicionar mecanismos de stop loss, tais como stop loss, média móvel exponencial, etc.
  3. Adicionar gestão de posição como posicionamento fixo dimensionamento, média de posição, etc.
  4. Fazer ajustes de parâmetros e otimizações para moedas específicas

Resumo

Esta estratégia de quantidade de nuvem Ichimoku alcança uma alta taxa de ganho, mas uma estratégia de longo prazo controlada pelo risco, julgando as direções da tendência. As vantagens da estratégia são óbvias e mostra um desempenho excepcional em mercados de alta. O próximo passo é melhorar aspectos como otimização de indicadores, mecanismo de stop loss, gerenciamento de posição para tornar a estratégia mais abrangente e estável.


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

//@version=4

strategy(title="Ichimoku only Long Strategy", shorttitle="Ichimoku only Long", overlay = true, pyramiding = 0, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=10000, currency=currency.USD)

// Time Range
FromMonth=input(defval=1,title="FromMonth",minval=1,maxval=12)
FromDay=input(defval=1,title="FromDay",minval=1,maxval=31)
FromYear=input(defval=2017,title="FromYear",minval=2017)
ToMonth=input(defval=1,title="ToMonth",minval=1,maxval=12)
ToDay=input(defval=1,title="ToDay",minval=1,maxval=31)
ToYear=input(defval=9999,title="ToYear",minval=2017)
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>true
// See if this bar's time happened on/after start date
afterStartDate = time >= start and time<=finish?true:false

//Enable RSI
enableema = input(true, title="Enable EMA?")
enablestochrsi = input(false, title="Enable Stochastik RSI?")

//EMA
emasrc = close, 
len1 = input(24, minval=1, title="EMA 1")
len2 = input(90, minval=1, title="EMA 2")

ema1 = ema(emasrc, len1)
ema2 = ema(emasrc, len2)

col1 = color.lime
col2 = color.red

//EMA Plots
plot(ema1, title="EMA 1", linewidth=1, color=col1)
plot(ema2, title="EMA 2", linewidth=1, color=col2)

//STOCH RSI
smoothK = input(3, minval=1, title="RSI K Line")
smoothD = input(3, minval=1, title="RSI D Line")
lengthRSI = input(14, minval=1, title="RSI Length")
lengthStoch = input(14, minval=1, title="Stochastik Length")
src = input(close, title="RSI Source")

rsi1 = rsi(src, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)

//Ichimoku
conversionPeriods = input(9, minval=1, title="Ichi Conversion Line Length")
basePeriods = input(26, minval=1, title="Ichi Base Line Length")
laggingSpan2Periods = input(52, minval=1, title="Ichi Lagging Span 2 Length")
displacement = input(1, minval=0, title="Ichi Displacement")
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)
p1 = plot(leadLine1, offset = displacement - 1, color=color.green,
	 title="Lead 1")
p2 = plot(leadLine2, offset = displacement - 1, color=color.red,
	 title="Lead 2")
fill(p1, p2, color = leadLine1 > leadLine2 ? color.green : color.red)


//Long Condition
crossup = k[0] > d[0] and k[1] <= d[1]
ichigreenabovered = leadLine1 > leadLine2
ichimokulong = close > leadLine1
greencandle =  close > open
redcandle = close < open
emacond = ema1 > ema2
longcondition = ichigreenabovered and ichimokulong and greencandle

//Exit Condition
ichimokuexit = close < leadLine1

exitcondition = ichimokuexit and redcandle

//Entrys

if (enablestochrsi == false) and (enableema == false) and (longcondition) and (afterStartDate) and (strategy.opentrades < 1)
    strategy.entry("Long", strategy.long)
    
if (enablestochrsi == true) and (enableema == false) and (longcondition) and (crossup) and (afterStartDate) and (strategy.opentrades < 1)
    strategy.entry("Long", strategy.long)

if (enableema == true) and (enablestochrsi == false) and (longcondition) and (emacond) and (afterStartDate) and (strategy.opentrades < 1)
    strategy.entry("Long", strategy.long)

if (enableema == true) and (enablestochrsi == true) and (longcondition) and (emacond) and (crossup) and (afterStartDate) and (strategy.opentrades < 1)
    strategy.entry("Long", strategy.long)


//Exits
if (afterStartDate)
    strategy.close(id = "Long", when = exitcondition)









Mais.