¿ Qué te parece?

El autor:¿ Qué pasa?, Fecha: 2023-10-27 16:36:59
Las etiquetas:

img

Resumen general

La estrategia Ichimoku Kumo Twist utiliza la línea de conversión, la línea base y las líneas de alcance principales del indicador Ichimoku para construir señales comerciales como una estrategia de tendencia.

Estrategia lógica

La estrategia utiliza principalmente tres líneas Ichimoku la línea de conversión, la línea de base y el intervalo principal 1, junto con los precios altos y bajos de los candelabros para calcular los límites de las nubes superior e inferior. La línea de conversión calcula el punto medio del alto y bajo de las últimas 9 velas, representando la media a corto plazo. La línea de base calcula el punto medio del alto y bajo de las últimas 26 velas como la media a largo plazo. El intervalo principal 1 es el promedio de la conversión y las líneas de base. El intervalo principal 2 es el precio del punto medio de las últimas 52 velas.

Las señales de compra se generan cuando el intervalo líder 1 cruza el intervalo líder 2, mientras que las señales de venta se generan cuando el intervalo líder 1 cruza el intervalo líder 2.

Análisis de ventajas

  • La estrategia de giro de la nube de Ichimoku combina tendencias a corto y mediano plazo, lo que puede identificar eficazmente los puntos de inversión de tendencia.

  • Las estrategias basadas en la reversión media tienen algún retraso incorporado para filtrar el ruido.

  • El uso de las nubes para medir la fuerza de la tendencia permite mejores entradas y salidas.

  • No se necesita optimización de parámetros, los parámetros estándar de Ichimoku funcionan bien.

Análisis de riesgos

  • Ichimoku tiene internos bastante complejos y no es muy sensible a los ajustes de parámetros que dificultan la sobreoptimización.

  • Puede haber múltiples señales falsas durante los mercados de rango.

  • La divergencia entre las tendencias a corto y a medio plazo puede provocar fallas en la estrategia.

  • Las pérdidas de detención son esenciales para controlar el riesgo, de lo contrario son posibles grandes reducciones.

Oportunidades de mejora

  • Prueba diferentes combinaciones de períodos de conversión y de referencia para encontrar el equilibrio óptimo.

  • Añadir filtros con otros indicadores para evitar recibir señales en formaciones desfavorables.

  • Incorporar estrategias de stop loss como parada dinámica o de seguimiento.

  • Optimizar el tamaño de las posiciones en función de las condiciones del mercado.

  • Agregue comisiones comerciales en las pruebas de retroceso para obtener resultados más realistas.

Resumen de las actividades

En general, la estrategia de giro de la nube de Ichimoku es una estrategia de tendencia moderada. Puede identificar efectivamente los giros en la tendencia y tomar posiciones en alineación con la dirección de la tendencia. Pero se requiere monitoreo y se requieren controles de riesgo estrictos para su uso a largo plazo. Las mejoras continuas en el ajuste de parámetros, filtros de entrada, mecánica de stop loss y más pueden mejorar aún más la estabilidad y rentabilidad de esta estrategia.


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

//@version=3
strategy(title="Ichimoku Kumo Twist Strategy (Presets)", shorttitle="Kumo Twist Strategy", overlay=true)

xlowest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := min(x, v)
    x

xlowest(src, len) =>
    na(src[len]) ? xlowest_(src, len) : lowest(src, len)

xhighest_(src, len) =>
    x = src
    for i = 1 to len - 1
        v = src[i]
        if (na(v))
            break
        x := max(x, v)
    x

xhighest(src, len) =>
    na(src[len]) ? xhighest_(src, len) : highest(src, len)

dropn(src, n) =>
    na(src[n]) ? na : src

ichiConversionPeriods(presets) =>
    if presets == "Crypto Doubled"
        20
    else
        if presets == "Crypto Singled"
            10
        else
            if presets == "Standard Doubled"
                18
            else
                9

ichiBasePeriods(presets) =>
    if presets == "Crypto Doubled"
        60
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                52
            else
                26

ichiLaggingSpan2Periods(presets) =>
    if presets == "Crypto Doubled"
        120
    else
        if presets == "Crypto Singled"
            60
        else
            if presets == "Standard Doubled"
                104
            else
                52

ichiDisplacement(presets) =>
    if presets == "Crypto Doubled"
        30
    else
        if presets == "Crypto Singled"
            30
        else
            if presets == "Standard Doubled"
                26
            else
                26

scaling = input(title="Scaling", options=["Linear", "Log"], defval="Linear")
presets = input(title="Presets",  options=["Crypto Doubled", "Crypto Singled", "Standard Doubled", "Standard Singled"], defval="Crypto Doubled")
dropCandles = input(1, minval=0, title="Drop first N candles")
showClouds = input(false, "Show Clouds")
stoploss = input(true, title="Stop Loss")

conversionPeriods = ichiConversionPeriods(presets)
basePeriods = ichiBasePeriods(presets)
laggingSpan2Periods = ichiLaggingSpan2Periods(presets)
displacement = ichiDisplacement(presets)
logScaling = scaling == "Log"

lows = dropn(low, dropCandles)
highs = dropn(high, dropCandles)

lowsp = logScaling ? log(lows) : lows
highsp = logScaling ? log(highs) : highs

donchian(len) =>
    avg(xlowest(lowsp, len), xhighest(highsp, len))

conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)
leadLine2 = donchian(laggingSpan2Periods)

golong = crossover(leadLine1, leadLine2)
goshort = crossunder(leadLine1, leadLine2)

strategy.entry("Buy", strategy.long, when=golong, stop=(stoploss ? high+syminfo.mintick : na))
strategy.entry("Sell", strategy.short, when=goshort, stop=(stoploss ? low-syminfo.mintick : na))

conversionLinep = logScaling ? exp(conversionLine) : conversionLine
baseLinep = logScaling ? exp(baseLine) : baseLine
leadLine1p = logScaling ? exp(leadLine1) : leadLine1
leadLine2p = logScaling ? exp(leadLine2) : leadLine2

plot(showClouds ? conversionLinep : na, color=#0496ff, title="Conversion Line")
plot(showClouds ? baseLinep : na, color=#991515, title="Base Line")

p1 = plot(showClouds ? leadLine1p : na, offset = displacement, color=green, title="Lead 1")
p2 = plot(showClouds ? leadLine2p : na, offset = displacement, color=red, title="Lead 2")
fill(p1, p2, color = showClouds ? (leadLine1p > leadLine2p ? green : red) : na)


Más.