Esta estrategia diseña un sistema de negociación cuantitativo basado en el indicador Ichimoku Cloud, principalmente para activos con buenas tendencias.
La nube Ichimoku se compone de una línea de conversión, una línea base, un intervalo de liderazgo 1, un intervalo de liderazgo 2 y gráficos de nube. Las señales de negociación de esta estrategia provienen de la relación entre el precio y los gráficos de la nube.
Esta estrategia también establece stop loss y take profit basados en el indicador ATR. El indicador ATR puede capturar efectivamente el grado de fluctuación del mercado. La stop loss se establece en 2 veces el ATR, y la take profit se establece en 4 veces el ATR. Esto puede controlar efectivamente la pérdida única y bloquear algunas ganancias.
Por último, la estrategia adopta un mecanismo de stop loss de seguimiento. Específicamente, para las posiciones largas, utilizará 2 veces el ATR como la amplitud de callback para ajustar la línea de stop loss en tiempo real para bloquear las ganancias; para las posiciones cortas, utilizará 2 veces el ATR como la amplitud de callback para ajustar la línea de stop loss en tiempo real para bloquear las ganancias.
Soluciones a los riesgos correspondientes:
En general, esta estrategia es una estrategia de seguimiento de tendencia estable. Juzga la dirección de la tendencia basada en el indicador de la nube Ichimoku; establece stop loss y toma ganancias utilizando el indicador ATR; usa stop loss de seguimiento para bloquear ganancias. Las ventajas son lógicas simples, fáciles de entender; se puede controlar una sola pérdida; se puede rastrear la tendencia de manera efectiva. Pero también hay algunos riesgos de que se rompa la sensibilidad de los parámetros y la pérdida de stop. Al optimizar continuamente los parámetros y la estrategia en sí, se puede obtener un mejor rendimiento.
/*backtest start: 2023-01-05 00:00:00 end: 2024-01-11 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Ichimoku Cloud Strategy with SL, TP, and Trailing Stop", overlay=true) conversionPeriods = input(9, "Conversion Line Length") basePeriods = input(26, "Base Line Length") laggingSpan2Periods = input(52, "Leading Span B Length") displacement = input(26, "Lagging Span") atrLength = input(14, title="ATR Length") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = math.avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) // Plot the Ichimoku Cloud components plot(conversionLine, color=color.blue, title="Conversion Line") plot(baseLine, color=color.red, title="Base Line") plot(leadLine1, color=color.green, title="Leading Span A") plot(leadLine2, color=color.orange, title="Leading Span B") plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, color=color.green, title="Kumo Cloud Upper Line") plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, color=color.red, title="Kumo Cloud Lower Line") // ATR for stop loss and take profit atrValue = ta.atr(atrLength) stopLoss = atrValue * 2 takeProfit = atrValue * 4 // Strategy entry and exit conditions longCondition = ta.crossover(close, leadLine1) and close > leadLine2 shortCondition = ta.crossunder(close, leadLine1) and close < leadLine2 // Plot buy and sell signals plotshape(series=longCondition ? leadLine1 : na, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) plotshape(series=shortCondition ? leadLine1 : na, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) // Execute strategy orders with stop loss and take profit strategy.entry("Buy", strategy.long, when=longCondition) strategy.close("Buy", when=shortCondition) // Close buy position when sell condition is met strategy.entry("Sell", strategy.short, when=shortCondition) strategy.close("Sell", when=longCondition) // Close sell position when buy condition is met // Trailing stop strategy.cancel("Trailing Stop") var float trailingStopPrice = na if (longCondition) trailingStopPrice := math.max(trailingStopPrice, close - atrValue * 2) strategy.exit("Trailing Stop", from_entry="Buy", trail_offset=atrValue * 2, trail_price=trailingStopPrice) else if (shortCondition) trailingStopPrice := math.min(trailingStopPrice, close + atrValue * 2) strategy.exit("Trailing Stop", from_entry="Sell", trail_offset=atrValue * 2, trail_price=trailingStopPrice)