Tendência de Nuvem Ichimoku Seguindo Estratégia

Autora:ChaoZhang, Data: 2024-02-01 11:34:23
Tags:

img

I. Nome da estratégia: Ichimoku Cloud Trend Seguindo a estratégia

II. Visão geral da estratégia

Esta estratégia utiliza múltiplos sinais da Nuvem Ichimoku para desenhar uma estratégia de tendência pura que visa capturar tendências de médio a longo prazo, filtrar consolidações e seguir direções de tendência fortes.

III. Princípio da estratégia

Esta estratégia usa principalmente o Tenkan-sen, Kijun-sen, Chikou Span e outros indicadores-chave da Nuvem Ichimoku. Para julgar tendências de longo prazo, ela se concentra na relação entre o Span líder e o atrasado; para tempos específicos de entrada e saída, olha para os cruzamentos Tenkan-sen e Kijun-sen e mudanças na relação de preços com a Nuvem.

Em resumo, a lógica central é: confirmar a tendência de médio e longo prazo -> esperar por sinais fortes de retomada da tendência -> entrar para seguir as tendências -> sair com stop loss.

Especificamente, para determinar a tendência de médio e longo prazo, ele usa a relação entre o Span líder e o retardante (acima do Span verde líder sinalizando tendência ascendente e vice-versa).

Isto elimina as consolidações de curto a médio prazo e permite captar fortes tendências para um desempenho superior constante nos mercados.

IV. Vantagens

(1) Usar a Nuvem de Ichimoku para determinar a direção da tendência a médio e longo prazo é benéfico para localizar as principais margens direcionais.

(2) O cruzamento Tenkan-sen/Kijun-sen e as alterações da relação de preços com a nuvem permitem filtrar eficazmente as consolidações e captar as fortes tendências precocemente.

(3) O mecanismo de saída de stop-loss permite controlar as grandes tendências e, ao mesmo tempo, controlar as perdas isoladas de forma eficaz.

(4) A combinação de vários sinais Ichimoku cria um sistema robusto que segue as tendências sem problemas.

V. Riscos

(1) Risco sistémico de identificação errada de uma tendência maior: se a tendência maior for diagnosticada erroneamente, todas as ações subsequentes implicariam um risco de direção errada.

(2) Risco decorrente de um calendário de entrada mal escolhido.

(3) Risco de paradas colocadas demasiado apertadas. Movimentos de preços extremos podem tirar paradas que são demasiado apertadas, resultando em perdas não planeadas.

(4) Frequência elevada das transacções que leva a custos excessivos de transacção.

VI. Áreas de reforço

(1) Teste diferentes combinações de períodos de entrada de Ichimoku para encontrar parâmetros ótimos.

(2) Otimizar os filtros de entrada para garantir entradas de alta qualidade.

(3) Ajustar a distância de parada para equilibrar o risco-recompensa.

(4) Adicionar os níveis de lucro-alvo baseados nas distâncias entre os indicadores chave de preços para criar mecanismos adaptativos de obtenção de lucro.

VII. Conclusão

Esta estratégia de seguimento de tendências Ichimoku Cloud sintetiza múltiplos sinais Ichimoku para diagnosticar tendências, entradas de tempo e paradas de trilha. A prática mostra que pode efetivamente capturar tendências de médio e longo prazo, filtrar consolidações e alcançar um desempenho consistente.


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

//@version=3
strategy("Ichimoku trendfollowing", overlay=true, initial_capital=1000, commission_type=strategy.commission.cash_per_order, commission_value=0.04, slippage=2)

//***************************
//  INPUT BACKTEST RANGE    *
//***************************
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2010, title = "From Year", minval = 2000) 
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2000)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true

//***************
//*  ICHIMOKU   *
//***************
//inizializzazione parametri,,
tenkanPeriods = input(9, minval=1, title="Tenkan-Sen")
kinjunPeriods = input(26, minval=1, title="Kinjun-Sen")
senkouSpanBPeriods = input(52, minval=1, title="Senkou Span B")
displacement = input(26, minval=1, title="-ChinkouSpan/+SenkouSpan A")

//definizione Tenkan-Sen (9 Period), Kinjun-Sen (26 Period), Chinkou Span (Lagging Line)
averageHighLow(period) => avg(lowest(period), highest(period))
tenkan= averageHighLow(tenkanPeriods)
kinjun = averageHighLow(kinjunPeriods)
senkouSpanA = avg(tenkan, kinjun)
senkouSpanB = averageHighLow(senkouSpanBPeriods)

//definisco il colore della kumo in base al trend.
senkouSpan1Above = senkouSpanA >= senkouSpanB ? 1 : na
senkouSpan2Below = senkouSpanA <= senkouSpanB ? 1 : na

span1plotU = senkouSpan1Above ? senkouSpanA : na
span2plotU = senkouSpan1Above ? senkouSpanB : na
span1plotD = senkouSpan2Below ? senkouSpanA : na
span2plotD = senkouSpan2Below ? senkouSpanB : na

col = senkouSpanA >= senkouSpanB ? lime : red

//plots Ichimoku
plot(tenkan, title = 'Tenkan-Sen', linewidth=1, color=blue)
plot(kinjun, title = 'Kinjun-Sen', linewidth=1, color=red)
plot(close, title = 'Chinkou Span', linewidth=1, offset = -displacement, color=aqua)
plot( senkouSpanA, title = 'Senkou Span A', style=line, linewidth=1, offset = displacement, color=lime)
plot(senkouSpanB, title = 'Senkou Span B', style=line, linewidth=1, offset = displacement, color=red)

//Cloud Lines Plot 
p1 = plot(span1plotU ? span1plotU  : na, title = 'Senkou Span A Above Senkou Span B', style=linebr, linewidth=1, offset = displacement, color=col)
p2 = plot(span2plotU ? span2plotU  : na, title = 'Senkou Span B (52 Period) Below Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p3 = plot(span1plotD ? span1plotD  : na, title = 'Senkou Span A (26 Period) Below Span B Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
p4 = plot(span2plotD ? span2plotD  : na, title = 'Senkou Span B (52 Period) Above Span A Cloud', style=linebr, linewidth=1, offset = displacement, color=col)
//Fills that color cloud based on Trend.
fill(p1, p2, color=lime, transp=70, title='Kumo (Cloud)')
fill(p3, p4, color=red, transp=70, title='Kumo (Cloud)')

//***********************************************
//*     condizioni ingresso ed uscita mercato   *
//***********************************************
isKumoRialzista = senkouSpanA >= senkouSpanB ? true : false
isSopraKumo = (close > max(senkouSpanA[displacement], senkouSpanB[displacement]))
isSottoKumo = (close < min(senkouSpanA[displacement], senkouSpanB[displacement]))
isChinkouSpanSopra = high[displacement]<close
isChinkouSpanSotto = low[displacement]>close

filtroLong=isSopraKumo and isChinkouSpanSopra
filtroShort=isSottoKumo and isChinkouSpanSotto

//rimbalzato su kijun quando i prezzi stavano ritracciando e il trend era già in atto(tenkan >kijun x entrare long
isPullBackLijunEntryLong = kinjun<tenkan and low<kinjun and (close>kinjun) 
isPullBackLijunEntryShort =kinjun>tenkan and high>kinjun and  (close<kinjun) 

//Breackout Kumo
isBreackoutKumoEntryLong =  crossover(close, max(senkouSpanA[displacement], senkouSpanB[displacement])) and (close>tenkan) and (close>kinjun) 
isBreackoutKumoEntryShort =  crossunder(close, min(senkouSpanA[displacement], senkouSpanB[displacement])) and (close<tenkan) and (close<kinjun)

ConditionEntryLong = (isPullBackLijunEntryLong or isBreackoutKumoEntryLong ) and filtroLong
ConditionEntryShort = (isPullBackLijunEntryShort or isBreackoutKumoEntryLong ) and filtroShort

isExitLong = close<kinjun
isExitShort = close>kinjun

//ingressi ed uscite Mercato
strategy.entry ("Long",long=true, when = window() and ConditionEntryLong)
strategy.entry ("Short",long=false, when = window() and ConditionEntryShort)

strategy.close(id="Long", when=isExitLong)
strategy.close(id="Short", when=isExitShort)
strategy.close_all(when=not window())


Mais.