
Esta estratégia utiliza os vários sinais fornecidos pelo indicador de nuvens de balanço, projetando uma estratégia de rastreamento de tendências puras, que visa capturar tendências de médio e longo prazo, filtrar oscilações e acompanhar a direção de tendências fortes.
A estratégia usa a linha de conversão, a linha de referência e a linha de atraso nos indicadores de nuvens de escala de equilíbrio como sinais principais. Em julgamentos de tendências de longo prazo, o foco é na relação de mudança ascendente e descendente entre nuvens de antecedência e de antecedência para determinar a tendência; na escolha de horários específicos de entrada e saída, o cruzamento da linha de conversão e da linha de referência e a mudança na relação de preço com a nuvem são os principais fundamentos.
Em geral, a lógica central da estratégia é: Confirmar a direção da tendência a médio e longo prazo - > Esperar a oportunidade de uma tendência forte se reiniciar - > Seguir a tendência de entrada - > Seguir a saída de parada.
Concretamente, para julgar a tendência de médio e longo prazo, a relação de mudança entre a nuvem anterior e a nuvem posterior é determinada: “Se a nuvem anterior estiver em cima e estiver verde, representa uma tendência ascendente, ao contrário, representa uma tendência descendente”. Quando a tendência de médio e longo prazo é confirmada, a tendência de julgamento é reiniciada pelo cruzamento da linha de conversão e da linha de referência e pelo sinal de ruptura do gráfico da nuvem de preços.
Assim, além de filtrar oscilações de curto e médio prazo, é possível aproveitar a oportunidade de uma forte tendência para obter excedentes de lucro de longo prazo no mercado de valores mobiliários.
(i) Utilização de gráficos de nuvens de escala de equilíbrio para determinar a direção de tendências de médio e longo prazo, favorável à localização das principais direções
(ii) A intersecção de linhas de conversão e linhas de referência e a mudança na relação entre o preço e o gráfico da nuvem para determinar o momento de entrada, pode filtrar eficazmente oscilações e capturar tendências fortes
(iii) Mecanismos de parada de perdas e saidas de rastreamento, que permitem obter ganhos de grandes tendências e controlar efetivamente perdas individuais
(iv) Integração de vários sinais de nuvens de escala de equilíbrio para formar uma estratégia sistemática de acompanhamento de tendências, bom desempenho estável
(i) risco sistemático de erro de julgamento a médio e longo prazo. Se a tendência a médio e longo prazo for julgada erroneamente, as operações subsequentes estarão sujeitas a risco de erro de direção.
(ii) Risco de escolha inadequada da hora de entrada. Se a hora de entrada não for escolhida corretamente, é fácil ser enganado.
(III) rastrear o risco de um stop-loss ser muito próximo. Se o stop-loss for muito próximo, a situação extrema pode ser ultrapassada e causar prejuízos.
(D) carga de taxas de transação causada pela frequência de transação excessiva. Se a configuração de parâmetros for imprópria, a frequência de transação será excessiva, e as taxas de transação também serão aumentadas.
(i) testar combinações de diferentes parâmetros de ciclo de escala de equilíbrio para encontrar o parâmetro ideal
(ii) Otimizar as condições de entrada, projetar filtros mais rigorosos para garantir a entrada eficaz
(iii) Ajustar a distância de suspensão para encontrar o melhor equilíbrio entre riscos e ganhos
(iv) A adição de objetivos de preços de lucro, combinados com a distância entre os preços e os indicadores-chave de equilíbrio, formando mecanismos de lucro dinâmico
Esta estratégia de acompanhamento de tendências de nuvem de escala de equilíbrio integra vários sinais para determinar a direção da tendência, o tempo de entrada e a parada de perdas. A prática mostra que a estratégia pode capturar de forma eficaz a tendência de médio e longo prazo, filtrar oscilações e obter ganhos excedentários de forma estável. No futuro, através de testes de otimização contínua, espera-se melhorar ainda mais o desempenho da estratégia e obter melhores resultados.
/*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())