Chiến lược giao dịch định lượng đa yếu tố

Tác giả:ChaoZhang, Ngày: 2023-09-13 14:46:59
Tags:

Chiến lược giao dịch định lượng đa yếu tố tích hợp các yếu tố trung bình động và các chỉ số dao động để kiểm soát rủi ro và cải thiện sự ổn định.

Chiến lược logic

Chiến lược bao gồm ba mô-đun chính:

  1. Các yếu tố trung bình di chuyển

Sử dụng 5 EMA với các khoảng thời gian khác nhau (8, 13, 21, 34, 55) để xây dựng bộ lọc xu hướng. Các EMA được sắp xếp từ ngắn đến dài. Chỉ khi EMA nhanh hơn vượt qua EMA chậm hơn, tín hiệu xu hướng được tạo ra.

  1. Các chỉ số dao động

Kết hợp các dao động RSI và Stochastic để xác nhận các tín hiệu đột phá, tránh các đột phá sai quá mức trong các thị trường dao động.

RSI (14) tạo ra tín hiệu dài khi trong phạm vi 40-70 và tín hiệu ngắn khi trong phạm vi 30-60.

Stochastic (14,3,3) cho tín hiệu dài khi đường K nằm trong khoảng 20-80 và tín hiệu ngắn khi đường K nằm trong khoảng 5-95.

  1. Logic vào và ra

Tín hiệu nhập chỉ được kích hoạt khi cả hai yếu tố được sắp xếp.

Bộ lọc đa yếu tố nghiêm ngặt đảm bảo tỷ lệ chiến thắng cao và tín hiệu đáng tin cậy.

Ưu điểm

  • Thiết kế đa yếu tố lọc hiệu quả tiếng ồn thị trường và ngăn chặn giao dịch quá mức.
  • Kết hợp theo xu hướng và đảo ngược trung bình, cân bằng giao dịch năng động và giao dịch vị trí.
  • Khám phá các điểm đảo ngược trong xu hướng bằng cách sử dụng MA và dao động.
  • Không gian tối ưu hóa lớn để có được hiệu suất tốt hơn.

Rủi ro

  • Tần số tín hiệu tương đối thấp, có thể bỏ lỡ một số cơ hội.
  • Sự chậm trễ của MA nên được xác minh bằng các dao động nhanh hơn.
  • Các bộ dao động dễ bị tín hiệu sai nên được sử dụng làm yếu tố phụ trợ.
  • Các thông số cần tối ưu hóa định kỳ để thích nghi với các điều kiện thị trường thay đổi.

Kết luận

Chiến lược này kết hợp thành công các điểm mạnh của các chiến lược giao dịch theo xu hướng và đảo ngược. Mô hình kiểm soát rủi ro đa yếu tố cung cấp alpha ổn định.


/*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")

Thêm nữa