
Chiến lược này là hệ thống giao dịch theo xu hướng kết hợp chỉ báo Coral Trend với Kênh Donchian. Bằng cách nắm bắt chính xác động lực thị trường và nhiều lần xác nhận đột phá xu hướng, các tín hiệu sai trên thị trường biến động sẽ được lọc hiệu quả, cải thiện độ chính xác của giao dịch. Chiến lược này sử dụng công nghệ trung bình động thích ứng, có thể điều chỉnh các thông số một cách linh hoạt theo điều kiện thị trường, do đó có thể duy trì hiệu suất ổn định trong các môi trường thị trường khác nhau.
Logic cốt lõi của chiến lược này dựa trên sự kết hợp của hai chỉ số chính:
Khi cả hai chỉ báo xác nhận xu hướng tăng (coralTrendVal == 1 và donchianTrendVal == 1), hệ thống tạo ra tín hiệu dài hạn; khi cả hai chỉ báo xác nhận xu hướng giảm (coralTrendVal == -1 và donchianTrendVal == -1), hệ thống tạo ra một tín hiệu ngắn. Chiến lược này sử dụng máy trạng thái (trendState) để theo dõi trạng thái xu hướng hiện tại và tránh các tín hiệu trùng lặp.
Chiến lược này triển khai hệ thống theo dõi xu hướng mạnh mẽ thông qua nhiều cơ chế xác nhận xu hướng và cài đặt tham số linh hoạt. Bản chất thích ứng và logic tín hiệu rõ ràng của nó làm cho nó phù hợp với nhiều chu kỳ giao dịch và môi trường thị trường khác nhau. Thông qua các hướng tối ưu hóa được đề xuất, hiệu suất của chiến lược có thể được cải thiện hơn nữa. Khi áp dụng vào giao dịch thực tế, nên kết hợp các biện pháp quản lý rủi ro và tối ưu hóa các thông số theo đặc điểm của từng sản phẩm giao dịch cụ thể.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("Coral Tides Strategy", shorttitle="CoralTidesStrat", overlay=true)
// === Inputs ===
dlen = input.int(defval=20, title="Donchian Channel Period", minval=10)
coralPeriod = input.int(defval=14, title="Coral Trend Period")
// === Functions ===
// Coral Trend Calculation
coralTrend(period) =>
smooth = (high + low + close) / 3
coral = ta.ema(smooth, period)
trend = 0
trend := close > coral ? 1 : close < coral ? -1 : trend[1]
[trend, coral]
// Donchian Trend Calculation
donchianTrend(len) =>
hh = ta.highest(high, len)
ll = ta.lowest(low, len)
trend = 0
trend := close > hh[1] ? 1 : close < ll[1] ? -1 : trend[1]
trend
// === Trend Calculation ===
[coralTrendVal, coralLine] = coralTrend(coralPeriod)
donchianTrendVal = donchianTrend(dlen)
// === Signal Logic ===
var int trendState = 0
buySignal = false
sellSignal = false
if (coralTrendVal == 1 and donchianTrendVal == 1 and trendState != 1)
buySignal := true
sellSignal := false
trendState := 1
else if (coralTrendVal == -1 and donchianTrendVal == -1 and trendState != -1)
sellSignal := true
buySignal := false
trendState := -1
else
buySignal := false
sellSignal := false
// === Strategy Execution ===
// Entry Signals
if (buySignal)
strategy.entry("Long", strategy.long)
if (sellSignal)
strategy.entry("Short", strategy.short)
// === Plots ===
// Coral Trend Line
plot(coralLine, color=color.green, linewidth=2, title="Coral Trend Line")
// Buy/Sell Signal Labels
if buySignal
label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.normal)
if sellSignal
label.new(bar_index, high, "SELL", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.normal)