Estrategia de seguimiento de tendencias cruzadas de una hora TENKAN KIJUN basada en ADX

El autor:¿ Qué pasa?, Fecha: 2023-12-08 15:37:00
Las etiquetas:

img

Resumen general

Esta es una estrategia de seguimiento de tendencias simple pero rentable basada en el cruce de TENKAN y KIJUN en el sistema ICHIMOKU combinado con el indicador ADX para filtrar los mercados de tendencia débiles para generar señales comerciales.

Estrategia lógica

La estrategia utiliza la línea de conversión (TENKAN) y la línea de base (KIJUN) en el sistema ICHIMOKU para determinar la dirección de la tendencia del mercado.

Cuando TENKAN cruza por encima de KIJUN, es una señal alcista. Cuando TENKAN cruza por debajo de KIJUN, es una señal bajista. Esto tiene como objetivo capturar la inversión de tendencia a mediano plazo.

Además, el indicador ADX se utiliza para medir la fuerza de la tendencia.

En resumen, esta estrategia identifica la dirección de la tendencia a mediano plazo a través del cruce TENKAN y KIJUN, y utiliza ADX para filtrar las falsas rupturas, con el fin de rastrear las tendencias a largo plazo.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. Utilizando el sistema ICHIMOKU maduro y confiable para determinar la dirección de la tendencia y los puntos de inflexión.

  2. Filtrando el mercado de tendencias débiles usando ADX para evitar problemas en la consolidación.

  3. El marco de tiempo de una hora filtra el ruido del mercado y sólo capta las tendencias a medio y largo plazo.

  4. La lógica es sencilla y fácil de seguir para los operadores de tendencias.

  5. Resultados sólidos de backtesting especialmente en monedas con alta capitalización de mercado como ETH / BTC.

Análisis de riesgos

Algunos riesgos a tener en cuenta acerca de esta estrategia:

  1. Los parámetros de ICHIMOKU son sensibles, necesita personalización para diferentes pares.

  2. ADX puede retrasarse en algunos casos, causando una entrada perdida.

  3. Performances inferiores en mercados variados con frecuentes golpes de stop loss.

  4. El rendimiento varía mucho en diferentes pares y marcos de tiempo.

  5. La retención de posiciones a largo plazo puede ser arriesgada, se necesita un stop loss/take profit adecuado.

La optimización se puede hacer a través del ajuste de parámetros ADX, la adición de filtros como MACD para reducir las señales falsas, o el ajuste dinámico de parámetros para la robustez.

Direcciones de optimización

Algunas direcciones principales para mejorar la estrategia:

  1. Optimización dinámica de los parámetros TENKAN y KIJUN para una mejor adaptación.

  2. Buscando mejores indicadores de tendencia para reemplazar o combinar con ADX.

  3. La suma de pérdidas de detención/beneficios obtenidos para controlar la relación riesgo/beneficio.

  4. Combinar el modelado con indicadores complementarios para mejorar la estabilidad.

  5. Modularización y flexibilidad para ajustar parámetros en más pares.

  6. Gestión del riesgo cuantitativo, por ejemplo, control de la extracción máxima contra movimientos extremos.

Conclusión

En conclusión, esta es una estrategia de seguimiento de tendencias simple pero práctica, basada principalmente en el cruce TENKAN/KIJUN y ADX para identificar tendencias a medio y largo plazo y generar señales. Ha mostrado resultados positivos de backtesting, especialmente en pares de BTC de alta capitalización de mercado como ETH/BTC, con una rentabilidad relativamente estable. Pero también se basa en el ajuste de parámetros, requiere optimización por par. El control del riesgo por operación también es necesario para limitar las pérdidas cuando las tendencias se invierten.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="Odin's Kraken (TK Cross Strategy)", shorttitle="Odin's Kraken", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title="Source")

// define tk in ichimoku

conversionPeriods = input(18, minval=1, title="Conversion Line Periods (Tenkan)"),
basePeriods = input(58, minval=1, title="Base Line Periods (Kijun)")

donchian(len) => avg(lowest(len), highest(len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)

TK_Uptrend = crossover(conversionLine,baseLine)
TK_Downtrend = crossunder(conversionLine,baseLine)

plot(conversionLine, color=lime, title="Tenkan", linewidth=3)
plot(baseLine, color=red, title="Kijun", linewidth=3)

// define ADX

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
th = input(title="threshold", defval=20)
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)

	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	
[plus, minus] = dirmov(dilen)
sig = adx(dilen, adxlen)

// backtesting range

// From Date Inputs
fromDay = input(defval = 3, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2018, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 3, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 9, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2019, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

// open long and short

longCondition = TK_Uptrend
if (longCondition and sig > 12 and time_cond)
    strategy.entry("LONG", strategy.long)

shortCondition = TK_Downtrend
if (shortCondition and sig > 12 and time_cond)
    strategy.entry("SHORT", strategy.short)

// close trade if backtesting criteria not met

if (not time_cond)
    strategy.close_all()




Más.