Tendencia de la nube de Ichimoku siguiendo la estrategia

El autor:¿ Qué pasa?, fecha: 2024-02-01 11:34:23
Las etiquetas:

img

I. Nombre de la estrategia: Tendencia de la nube de Ichimoku Siguiendo la estrategia

II. Resumen de la estrategia

Esta estrategia utiliza múltiples señales de la nube de Ichimoku para diseñar una estrategia de tendencia pura que tiene como objetivo capturar tendencias a medio y largo plazo, filtrar las consolidaciones y seguir direcciones de tendencia fuertes.

III. Principio de la estrategia

Esta estrategia utiliza principalmente Tenkan-sen, Kijun-sen, Chikou Span y otros indicadores clave de la Nube Ichimoku. Para juzgar las tendencias a largo plazo, se centra en la relación entre el Span líder y el rezagado; para los tiempos de entrada y salida específicos, se observa los cruces de Tenkan-sen y Kijun-sen y los cambios en la relación de precios con la Nube.

En resumen, la lógica central es: confirmar la tendencia a medio y largo plazo -> esperar fuertes señales de reanudación de la tendencia -> entrar para seguir las tendencias -> salir con un stop loss.

Específicamente, para determinar la tendencia a medio y largo plazo, utiliza la relación entre el Span líder y el rezagado (por encima del Span verde líder que señala la tendencia al alza y viceversa).

Esto filtra las consolidaciones a corto y medio plazo y permite captar fuertes tendencias para obtener un rendimiento superior constante en los mercados.

IV. Ventajas

(1) El uso de la nube de Ichimoku para determinar la dirección de la tendencia a medio y largo plazo es beneficioso para localizar los principales bordes direccionales.

(2) Los cruces Tenkan-sen/Kijun-sen y los cambios en la relación de precios con la nube permiten filtrar eficazmente las consolidaciones y capturar temprano las tendencias fuertes.

(3) El mecanismo de salida de pérdidas de parada de seguimiento permite manejar grandes tendencias mientras que también controla las pérdidas aisladas de manera efectiva.

(4) La combinación de varias señales Ichimoku crea un sistema robusto que sigue las tendencias sin problemas.

V. Riesgos

(1) Riesgo sistémico de identificación errónea de una tendencia mayor.

(2) Riesgo de un momento de entrada mal elegido: un momento de entrada inadecuado corre el riesgo de que se produzcan cambios adversos en los precios.

(3) Riesgo de las paradas colocadas demasiado apretadas. Los movimientos de precios extremos podrían sacar las paradas que están demasiado apretadas, lo que resulta en pérdidas no planificadas.

(4) Frecuencia de operaciones alta que conduce a costes de transacción excesivos.

VI. Áreas de mejora

(1) Probar diferentes combinaciones de periodos de entrada de Ichimoku para encontrar parámetros óptimos.

(2) Optimizar los filtros de entrada para garantizar entradas de alta calidad.

(3) Ajustar la distancia de parada para equilibrar el riesgo-recompensa.

(4) Agregar los niveles de objetivo de ganancias basados en las distancias entre los indicadores clave de precios para crear mecanismos de obtención de ganancias adaptativos.

VII. Conclusión

Esta estrategia de seguimiento de tendencias de la nube Ichimoku sintetiza múltiples señales de Ichimoku para diagnosticar tendencias, entradas de tiempo y paradas de rastro. La práctica muestra que puede capturar efectivamente las tendencias a medio y largo plazo, filtrar las consolidaciones y lograr un rendimiento 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())


Más.