Một chiến lược giao dịch định lượng đa yếu tố, chiến lược này xem xét tổng hợp các yếu tố cân bằng và yếu tố chỉ số dao động để kiểm soát rủi ro và tăng sự ổn định. Bài viết này sẽ giới thiệu chi tiết về nguyên tắc, lợi thế và rủi ro có thể có của chiến lược giao dịch này.
Chiến lược này bao gồm ba mô-đun chính:
Xây dựng bộ lọc xu hướng bằng cách sử dụng các đường trung bình EMA của 5 chu kỳ khác nhau (8, 13, 21, 34 và 55 ngày). Các đường trung bình được sắp xếp từ ngắn đến dài, chỉ có đặc điểm xu hướng và tạo ra tín hiệu giao dịch khi đường trung bình ngắn xuyên qua đường trung bình dài.
Đồng thời kết hợp hai chỉ số dao động lớn RSI và Stochastic để xác minh đột phá, tránh tạo ra nhiều đột phá giả trong thị trường lắc lư.
RSI có tham số 14, khi RSI ở trong khoảng 40-70 phù hợp với điều kiện làm nhiều, khi ở trong khoảng 30-60 phù hợp với điều kiện làm ngắn.
Stochastic tham số là ((14,3,3), khi K đường trong phạm vi 20-80 phù hợp với điều kiện làm nhiều, trong phạm vi 5-95 phù hợp với điều kiện làm không.
Chỉ khi yếu tố đường trung bình và yếu tố chỉ số dao động đồng thời phù hợp, tín hiệu ra sân sẽ được kích hoạt; khi bất kỳ yếu tố nào không còn phù hợp, tín hiệu ra sân sẽ được tạo ra.
Toàn bộ chiến lược sử dụng một cơ chế lọc đa yếu tố nghiêm ngặt, đảm bảo tín hiệu giao dịch ổn định và đáng tin cậy trong khi vẫn duy trì tỷ lệ thắng cao.
Chiến lược này đã kết hợp thành công các ưu điểm của theo dõi xu hướng và giao dịch đảo ngược, mô hình đa yếu tố kiểm soát rủi ro hiệu quả, có thể thu được lợi nhuận vượt trội ổn định. Đây là một mô hình chiến lược giao dịch định lượng rất thực tế, đáng để cộng đồng trí tuệ nhân tạo nghiên cứu và áp dụng sâu hơn.
/*backtest
start: 2022-09-12 00:00:00
end: 2022-11-15 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Combined Strategy", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value = .0020, pyramiding = 0, slippage = 3, overlay = true)
//----------//
// MOMENTUM //
//----------//
ema8 = ema(close, 8)
ema13 = ema(close, 13)
ema21 = ema(close, 21)
ema34 = ema(close, 34)
ema55 = ema(close, 55)
plot(ema8, color=red, style=line, title="8", linewidth=1)
plot(ema13, color=orange, style=line, title="13", linewidth=1)
plot(ema21, color=yellow, style=line, title="21", linewidth=1)
plot(ema34, color=aqua, style=line, title="34", linewidth=1)
plot(ema55, color=lime, style=line, title="55", linewidth=1)
longEmaCondition = ema8 > ema13 and ema13 > ema21 and ema21 > ema34 and ema34 > ema55
exitLongEmaCondition = ema13 < ema55
shortEmaCondition = ema8 < ema13 and ema13 < ema21 and ema21 < ema34 and ema34 < ema55
exitShortEmaCondition = ema13 > ema55
// ---------- //
// OSCILLATORS //
// ----------- //
rsi = rsi(close, 14)
longRsiCondition = rsi < 70 and rsi > 40
exitLongRsiCondition = rsi > 70
shortRsiCondition = rsi > 30 and rsi < 60
exitShortRsiCondition = rsi < 30
// Stochastic
length = 14, smoothK = 3, smoothD = 3
kFast = stoch(close, high, low, 14)
dSlow = sma(kFast, smoothD)
longStochasticCondition = kFast < 80
exitLongStochasticCondition = kFast > 95
shortStochasticCondition = kFast > 20
exitShortStochasticCondition = kFast < 5
//----------//
// STRATEGY //
//----------//
longCondition = longEmaCondition and longRsiCondition and longStochasticCondition and strategy.position_size == 0
exitLongCondition = (exitLongEmaCondition or exitLongRsiCondition or exitLongStochasticCondition) and strategy.position_size > 0
if (longCondition)
strategy.entry("LONG", strategy.long)
if (exitLongCondition)
strategy.close("LONG")
shortCondition = shortEmaCondition and shortRsiCondition and shortStochasticCondition and strategy.position_size == 0
exitShortCondition = (exitShortEmaCondition or exitShortRsiCondition or exitShortStochasticCondition) and strategy.position_size < 0
if (shortCondition)
strategy.entry("SHORT", strategy.short)
if (exitShortCondition)
strategy.close("SHORT")