Chiến lược này thiết kế một hệ thống giao dịch định lượng dựa trên chỉ số Ichimoku Cloud, chủ yếu cho các tài sản có xu hướng tốt. Chiến lược tích hợp các chức năng như dừng lỗ, lấy lợi nhuận và dừng lỗ để đạt được lợi nhuận ổn định.
Các tín hiệu giao dịch của chiến lược này đến từ mối quan hệ giữa giá và biểu đồ đám mây. Cụ thể, một tín hiệu mua được tạo ra khi giá vượt quá phạm vi dẫn đầu 1; Một tín hiệu bán được tạo ra khi giá vượt qua dưới phạm vi dẫn đầu 1. Ngoài ra, phạm vi dẫn đầu 2 cũng phục vụ như một chỉ số phán đoán phụ.
Chiến lược này cũng thiết lập stop loss và take profit dựa trên chỉ số ATR. Chỉ số ATR có thể nắm bắt hiệu quả mức độ biến động của thị trường. Stop loss được thiết lập là 2 lần ATR, và take profit được thiết lập là 4 lần ATR. Điều này có thể kiểm soát hiệu quả lỗ đơn và khóa một số lợi nhuận.
Cuối cùng, chiến lược này áp dụng cơ chế dừng lỗ sau. Cụ thể, đối với các vị trí dài, nó sẽ sử dụng 2 lần ATR như chiều rộng gọi lại để điều chỉnh đường dừng lỗ trong thời gian thực để khóa lợi nhuận; cho các vị trí ngắn, nó sẽ sử dụng 2 lần ATR như chiều rộng gọi lại để điều chỉnh đường dừng lỗ trong thời gian thực để khóa lợi nhuận.
Giải pháp cho các rủi ro tương ứng:
Nói chung, chiến lược này là một chiến lược theo dõi xu hướng ổn định. Đánh giá hướng xu hướng dựa trên chỉ số đám mây Ichimoku; đặt dừng lỗ và lấy lợi nhuận bằng cách sử dụng chỉ số ATR; sử dụng dừng lỗ để khóa lợi nhuận. Ưu điểm là logic đơn giản, dễ hiểu; lỗ đơn có thể được kiểm soát; xu hướng có thể được theo dõi hiệu quả. Nhưng cũng có một số rủi ro về độ nhạy của tham số và dừng lỗ bị phá vỡ. Bằng cách liên tục tối ưu hóa các tham số và chính chiến lược, có thể đạt được hiệu suất tốt hơn.
/*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)