Эта стратегия разрабатывает количественную торговую систему на основе индикатора Ichimoku Cloud, в основном для активов с хорошими тенденциями.
Облако Ичимоку состоит из линий конверсии, базовой линии, лидирующего спена 1, лидирующего спена 2 и облачных графиков. Торговые сигналы этой стратегии происходят из отношения между ценой и облачными графиками. В частности, сигнал покупки генерируется, когда цена пересекает лидирующий спен 1; сигнал продажи генерируется, когда цена пересекает лидирующий спен 1. Кроме того, лидирующий спен 2 также служит вспомогательным индикатором суждения.
Эта стратегия также устанавливает стоп-лосс и прибыль на основе индикатора ATR. Индикатор ATR может эффективно отслеживать степень колебаний рынка. Стоп-лосс установлен в 2 раза выше ATR, а прибыль установлена в 4 раза выше ATR. Это может эффективно контролировать одиночные потери и блокировать некоторые прибыли.
Наконец, стратегия использует механизм отслеживания стоп-лосса. В частности, для длинных позиций она будет использовать 2 раза ATR в качестве амплитуды обратного вызова для корректировки линии стоп-лосса в режиме реального времени для блокировки прибыли; для коротких позиций она будет использовать 2 раза ATR в качестве амплитуды обратного вызова для корректировки линии стоп-лосса в режиме реального времени для блокирования прибыли.
Решение соответствующих рисков:
В целом, эта стратегия является стабильной стратегией отслеживания тренда. Судите о направлении тренда на основе индикатора облака Ичимоку; установите стоп-лосс и получите прибыль с помощью индикатора ATR; используйте последующую стоп-лосс для блокировки прибыли. Преимущества просты в логике, легко понятны; можно контролировать одиночный убыток; можно эффективно отслеживать тренд. Но есть также некоторые риски нарушения чувствительности параметров и остановки убытков. Благодаря непрерывной оптимизации параметров и самой стратегии можно получить лучшую производительность.
/*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)