
Strategi ini direka bentuk berdasarkan petunjuk grafik awan Ichimoku untuk sistem perdagangan kuantitatif, terutamanya untuk aset yang mempunyai trend yang baik. Strategi ini menggabungkan fungsi-fungsi seperti hentikan kerugian, menghentikan kerugian, dan mengesan kerugian, bertujuan untuk mencapai keuntungan yang stabil.
Carta awan Ichimoku terdiri daripada garisan peralihan, garisan asas, garisan hadapan 1, garisan hadapan 2 dan carta awan. Isyarat perdagangan untuk strategi ini berasal dari hubungan harga dengan garisan awan. Secara khusus, apabila harga naik melintasi garisan hadapan 1, ia menghasilkan isyarat beli; apabila harga turun melintasi garisan hadapan 1, ia menghasilkan isyarat jual.
Strategi ini juga menetapkan stop loss dan penangguhan berdasarkan ATR. Penunjuk ATR dapat menangkap kadar turun naik pasaran dengan berkesan. Stop loss adalah 2 kali ganda ATR dan penangguhan adalah 4 kali ganda ATR. Ini dapat mengawal kerugian tunggal dengan berkesan dan mengunci sebahagian keuntungan.
Akhirnya, strategi ini menggunakan mekanisme hentian pengesanan. Khususnya, untuk membuat pesanan berganda, akan menggunakan 2 kali ATR sebagai penarikan balik, menyesuaikan garis hentian untuk mengunci keuntungan; untuk membuat pesanan udara, akan menggunakan 2 kali ATR sebagai penarikan balik, menyesuaikan garis hentian untuk mengunci keuntungan.
Penyelesaian untuk menghadapi risiko:
Strategi ini secara keseluruhan merupakan strategi pengesanan trend yang stabil. Berdasarkan petunjuk grafik awan Ichimoku untuk menentukan arah trend; menetapkan stop loss dengan menggunakan indikator ATR; menggunakan pengesanan berhenti untuk mengunci keuntungan. Kelebihan adalah logiknya ringkas dan mudah difahami; boleh mengawal kerugian tunggal; boleh mengesan trend dengan berkesan.
/*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)