Chiến lược giao dịch định lượng theo dõi xu hướng trung bình động T3 và dừng lỗ di chuyển

T3MA SMA EMA
Ngày tạo: 2024-11-28 15:17:13 sửa đổi lần cuối: 2024-11-28 15:17:13
sao chép: 1 Số nhấp chuột: 505
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch định lượng theo dõi xu hướng trung bình động T3 và dừng lỗ di chuyển

Tổng quan

Chiến lược này là một hệ thống giao dịch định lượng tổng hợp kết hợp với đường trung bình T3, theo dõi xu hướng và cơ chế dừng chân di động. Chiến lược xác định hướng xu hướng thị trường thông qua đường trung bình di động T3, đồng thời sử dụng chỉ số xu hướng Lemon và chỉ số TDFI để xác nhận tín hiệu và kết hợp với hệ thống quản lý rủi ro kết hợp với dừng chân di động và dừng chân cố định để nắm bắt xu hướng và kiểm soát rủi ro hiệu quả.

Nguyên tắc chiến lược

Trung tâm của chiến lược này bao gồm ba phần chính: nhận dạng xu hướng, xác nhận tín hiệu và quản lý rủi ro. Đầu tiên, sử dụng đường trung bình di chuyển T3 làm công cụ nhận dạng xu hướng chính, đường trung bình T3 có thể tính toán trung bình di chuyển bằng chỉ số sáu lần, có thể làm giảm sự chậm trễ và giữ gọn.

Lợi thế chiến lược

  1. Cơ chế xác nhận tín hiệu đa dạng cải thiện độ chính xác của giao dịch
  2. Sử dụng đường trung bình T3 làm giảm tác động của đột phá giả
  3. Hệ thống quản lý rủi ro linh hoạt, cho phép các xu hướng phát triển trong khi bảo vệ lợi nhuận
  4. Hỗ trợ dừng vị trí một phần, có thể thực hiện thanh toán từng bước lợi nhuận
  5. Các tham số có thể điều chỉnh được để tối ưu hóa phù hợp với các môi trường thị trường khác nhau

Rủi ro chiến lược

  1. Tính trung bình T3 phức tạp, có thể có sự chậm trễ trong tính toán
  2. Xác nhận nhiều tín hiệu có thể dẫn đến việc bỏ lỡ một số cơ hội giao dịch
  3. Hạn chế di động có thể được kích hoạt quá sớm khi biến động mạnh
  4. Cần có sự biến động giá lớn hơn để tạo ra tín hiệu hiệu quả.
  5. Các tín hiệu sai có thể xảy ra thường xuyên trong thị trường giao dịch ngang

Hướng tối ưu hóa chiến lược

  1. Giới thiệu chỉ số biến động điều chỉnh tham số dừng di chuyển
  2. Thêm mô-đun nhận diện môi trường thị trường, sử dụng các tham số khác nhau trong các điều kiện thị trường khác nhau
  3. Tối ưu hóa chu kỳ tính toán của chỉ số TDFI, nâng cao tính kịp thời của tín hiệu
  4. Xác nhận tín hiệu xem xét thêm yếu tố giao dịch
  5. Nghiên cứu cơ chế thiết lập tỷ lệ ngưng phần tự thích ứng

Tóm tắt

Đây là một chiến lược theo dõi xu hướng được thiết kế toàn diện, bằng cách sử dụng nhiều chỉ số kỹ thuật kết hợp, đảm bảo độ tin cậy của tín hiệu giao dịch và quản lý rủi ro hiệu quả. Thiết kế mô-đun của chiến lược cho phép nó có khả năng mở rộng và tối ưu hóa tốt, phù hợp với khung cơ bản của hệ thống theo dõi xu hướng trung và dài hạn. Trong ứng dụng thực tế, khuyến nghị điều chỉnh các tham số tối ưu hóa theo các loại giao dịch cụ thể và môi trường thị trường.

Mã nguồn chiến lược
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Lemon Trend Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
 
// Input parameters
lookbackPeriod = input.int(14, "Lookback Period")
t3Length = input.int(200, "T3 MA Length")
t3Factor = input.float(0.7, "T3 Factor", minval=0, maxval=1)

// 移动止损参数
trailingStopPct = input.float(1.5, "移动止损百分比", minval=0.1, step=0.1)
trailingStopActivationPct = input.float(1.0, "移动止损激活百分比", minval=0.1, step=0.1)
 
// === T3 Moving Average Function ===
t3(src, length, factor) =>
    // First EMA
    e1 = ta.ema(src, length)
    // Second EMA
    e2 = ta.ema(e1, length)
    // Third EMA
    e3 = ta.ema(e2, length)
    // Fourth EMA
    e4 = ta.ema(e3, length)
    // Fifth EMA
    e5 = ta.ema(e4, length)
    // Sixth EMA
    e6 = ta.ema(e5, length)
   
    c1 = -factor * factor * factor
    c2 = 3 * factor * factor + 3 * factor * factor * factor
    c3 = -6 * factor * factor - 3 * factor - 3 * factor * factor * factor
    c4 = 1 + 3 * factor + factor * factor * factor + 3 * factor * factor
   
    t3 = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3
 
// Calculate T3 MA
t3ma = t3(close, t3Length, t3Factor)
plot(t3ma, "T3 MA", color=color.blue)
 
// === Lemon Trend Indicator ===
highLowDiff = high - low
normalizedDiff = ta.sma(highLowDiff, lookbackPeriod)
upperBand = ta.highest(high, lookbackPeriod)
lowerBand = ta.lowest(low, lookbackPeriod)
buySignal = ta.crossover(close, upperBand - normalizedDiff)
sellSignal = ta.crossunder(close, lowerBand + normalizedDiff)
 
// === TDFI Indicator ===
tdfiLength = input.int(14, "TDFI Length")
tdfi = ta.ema(close - close[1], tdfiLength)
tdfiSignal = ta.ema(tdfi, 9)
 
// Plot signals
plotshape(buySignal and tdfi > tdfiSignal and close > t3ma, "Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(sellSignal and tdfi < tdfiSignal and close < t3ma, "Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
 
// === Strategy Logic ===
longCondition = buySignal and tdfi > tdfiSignal and close > t3ma
shortCondition = sellSignal and tdfi < tdfiSignal and close < t3ma
 
// 计算移动止损价格
var float longTrailingStop = na
var float shortTrailingStop = na

// 更新移动止损价格
if (strategy.position_size > 0)
    threshold = strategy.position_avg_price * (1 + trailingStopActivationPct / 100)
    if (high > threshold)
        stopPrice = high * (1 - trailingStopPct / 100)
        if (na(longTrailingStop) or stopPrice > longTrailingStop)
            longTrailingStop := stopPrice
    
if (strategy.position_size < 0)
    threshold = strategy.position_avg_price * (1 - trailingStopActivationPct / 100)
    if (low < threshold)
        stopPrice = low * (1 + trailingStopPct / 100)
        if (na(shortTrailingStop) or stopPrice < shortTrailingStop)
            shortTrailingStop := stopPrice

// Entry orders
if (longCondition)
    strategy.entry("Long", strategy.long)
    longTrailingStop := na
    
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortTrailingStop := na
 
// Calculate stop loss and take profit levels
longStopLoss = ta.lowest(low, lookbackPeriod)
shortStopLoss = ta.highest(high, lookbackPeriod)
 
// Exit conditions with fixed R:R
fixedRR = input.float(1.8, "Fixed Risk:Reward Ratio")
partialExitPct = input.float(50.0, "Partial Exit Percentage", minval=0, maxval=100) / 100
 
// 综合移动止损和固定止损
if (strategy.position_size > 0)
    longTakeProfit = strategy.position_avg_price + (strategy.position_avg_price - longStopLoss) * fixedRR
    stopPrice = na(longTrailingStop) ? longStopLoss : math.max(longStopLoss, longTrailingStop)
    strategy.exit("Long Exit", "Long", qty_percent=partialExitPct, stop=stopPrice, limit=longTakeProfit)
    
if (strategy.position_size < 0)
    shortTakeProfit = strategy.position_avg_price - (shortStopLoss - strategy.position_avg_price) * fixedRR
    stopPrice = na(shortTrailingStop) ? shortStopLoss : math.min(shortStopLoss, shortTrailingStop)
    strategy.exit("Short Exit", "Short", qty_percent=partialExitPct, stop=stopPrice, limit=shortTakeProfit)

// 绘制移动止损线
plot(strategy.position_size > 0 ? longTrailingStop : na, "Long Trailing Stop", color=color.red, style=plot.style_linebr)
plot(strategy.position_size < 0 ? shortTrailingStop : na, "Short Trailing Stop", color=color.red, style=plot.style_linebr)