Chiến lược giao dịch định lượng dựa trên đường chéo trung bình di chuyển kép

Tác giả:ChaoZhang, Ngày: 2024-02-21 14:28:28
Tags:

img

Tổng quan

Chiến lược này được gọi là Quantitative Trading Strategy Based on Double Moving Average Crossover. Ý tưởng chính của chiến lược này là sử dụng các tín hiệu chéo giữa các đường trung bình di chuyển nhanh và chậm để xác định xu hướng giá và đưa ra quyết định mua và bán phù hợp.

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

Các chỉ số cốt lõi của chiến lược này là các đường trung bình di chuyển nhanh và chậm. Chiến lược sử dụng mối quan hệ chéo giữa các đường trung bình di chuyển nhanh và chậm để xác định xu hướng giá và đưa ra quyết định giao dịch dựa trên điều này.

Cụ thể, tham số đường trung bình di chuyển nhanh được thiết lập thành 24 giai đoạn, và tham số đường trung bình di chuyển chậm được thiết lập thành 100 giai đoạn. Khi đường trung bình di chuyển nhanh vượt qua trên đường trung bình di chuyển chậm từ dưới, nó cho thấy giá đang đi vào xu hướng tăng, và chiến lược sẽ phát ra tín hiệu mua vào thời điểm này. Khi đường trung bình di chuyển nhanh vượt qua dưới đường trung bình di chuyển chậm từ trên, nó cho thấy giá đang đi vào xu hướng giảm, và chiến lược sẽ phát ra tín hiệu bán vào thời điểm này.

Bằng cách đánh giá hướng chéo của các đường trung bình di chuyển nhanh và chậm, các thay đổi xu hướng giá có thể được nắm bắt hiệu quả để hỗ trợ trong việc đưa ra quyết định mua và bán.

Ưu điểm của Chiến lược

Chiến lược này có những lợi thế sau:

  1. Nguyên tắc đơn giản và dễ hiểu, dễ thực hiện.

  2. Các thông số của các đường trung bình di chuyển nhanh và chậm có thể được điều chỉnh theo điều kiện thực tế, làm cho chiến lược linh hoạt hơn.

  3. Khả năng nắm bắt những thay đổi xu hướng mạnh mẽ.

  4. Có thể lọc hiệu quả các hợp nhất và giảm các giao dịch không hợp lệ.

Rủi ro của chiến lược

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Các tín hiệu chéo trung bình di chuyển kép có thể bị chậm trễ. Là các chỉ số theo dõi xu hướng, các tín hiệu chéo của các trung bình di chuyển kép thường bị chậm một khoảng thời gian nhất định, có thể dẫn đến một mức độ chi phí cơ hội nhất định.

  2. Dễ tạo ra tín hiệu sai trong thị trường dao động. Trung bình di chuyển đôi hoạt động tốt nhất khi giá có xu hướng rõ ràng. Nhưng trong thị trường dao động, chúng có xu hướng tạo ra các tín hiệu sai thường xuyên.

  3. Các thiết lập thông số không chính xác có thể ảnh hưởng đến hiệu suất chiến lược. Nếu các thông số trung bình chuyển động nhanh và chậm được thiết lập không chính xác, nó sẽ ảnh hưởng đến độ nhạy để nắm bắt các giao lộ xu hướng.

Các giải pháp tương ứng:

  1. Giảm ngắn thời gian trung bình động để tăng độ nhạy của tín hiệu chéo.

  2. Thêm các chỉ số biến động hoặc khối lượng để lọc để giảm các giao dịch không hợp lệ trong các thị trường dao động.

  3. Tối ưu hóa tham số để tìm kết hợp tham số tốt nhất. Thêm máy học và các phương pháp khác để tối ưu hóa tự động.

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

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. Sử dụng các chỉ số kỹ thuật trung bình di chuyển tiên tiến hơn như Trung bình di chuyển cân nhắc tuyến tính để thay thế Trung bình di chuyển đơn giản để cải thiện khả năng theo dõi và dự đoán của các chỉ số.

  2. Thêm thêm các chỉ số phụ trợ như chỉ số khối lượng và biến động để lọc chung để giảm tín hiệu không hợp lệ.

  3. Tối ưu hóa các thông số trung bình chuyển động nhanh và chậm để cải thiện khả năng thích nghi của các thông số. Các phương pháp như học máy và tối ưu hóa ngẫu nhiên có thể được sử dụng để tìm các thông số tối ưu.

  4. Sau khi chiến lược vào thị trường, điểm dừng lỗ và điểm dừng lỗ sau có thể được thiết kế để kiểm soát lỗ đơn.

  5. Các công nghệ mới như học sâu có thể được sử dụng để xác định các mô hình giá phức tạp hơn để hỗ trợ các đường chéo trung bình chuyển động trong việc đưa ra quyết định mua và bán, để có được kết quả tốt hơn.

Tóm lại

Nói chung, chiến lược này tương đối cổ điển và đơn giản. Nó xác định xu hướng giá dựa trên các chỉ số trung bình động kép để phát hiện cơ hội khi giá chuyển từ hợp nhất sang xu hướng. Những lợi thế là logic rõ ràng và đơn giản, phù hợp với việc theo dõi thị trường xu hướng. Nhưng cũng có một số lỗ hổng như sự chậm trễ tín hiệu cần được cải thiện thông qua điều chỉnh tham số và tối ưu hóa để tăng sự ổn định và hiệu quả của chiến lược. Nhìn chung, như một chiến lược cơ bản, đây là khá phù hợp, nhưng cần tối ưu hóa liên tục để thích nghi với môi trường thị trường phức tạp hơn.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-02-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Pine Script Tutorial Example Strategy 1', overlay=true, initial_capital=100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

//OBV
src = close
obv = ta.cum(math.sign(ta.change(src)) * volume)
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)
typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing")
smoothingLength = input.int(title = "Length", defval = 20, minval = 1, maxval = 100, group="Smoothing")
Limit = input.float(title = "Limit", defval = 1, minval = 0.1, maxval = 10, group="Smoothing")
smoothingLine_ma = ma(obv,smoothingLength, typeMA)
obv_diff = (obv-smoothingLine_ma)*100/obv

//PVT
var cumVolp = 0.
cumVolp += nz(volume)
if barstate.islast and cumVolp == 0
    runtime.error("No volume is provided by the data vendor.")
srcp = close
vt = ta.cum(ta.change(srcp)/srcp[1]*volume)
smoothingLine_map = ma(vt,smoothingLength, typeMA)
pvt_diff = (vt-smoothingLine_map)*100/vt

// plot(obv_diff+close+100 ,title="OBV_DIFF", color = color.rgb(255, 118, 54))
// plot(pvt_diff+close+80 ,title="PVT_DIFF", color = color.rgb(223, 61, 255))

indicator = (pvt_diff+obv_diff)/2
goLongCondition1 = ta.crossover(indicator,Limit)
timePeriod = time >= timestamp(syminfo.timezone, 2023,1, 1, 0, 0)  // Backtesting Time
notInTrade = strategy.position_size <= 0
if goLongCondition1 and timePeriod and notInTrade
    stopLoss = low * 0.99 // -2%
    takeProfit = high * 1.05 // +5%
    strategy.entry('long', strategy.long )
    strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)






// fastEMA = ta.ema(close, 24)
// slowEMA = ta.ema(close, 100)
// goLongCondition1 = ta.crossover(fastEMA, slowEMA)
// timePeriod = time >= timestamp(syminfo.timezone, 2018, 12, 15, 0, 0)
// notInTrade = strategy.position_size <= 0
// if goLongCondition1 and timePeriod and notInTrade
//     stopLoss = low * 0.97
//     takeProfit = high * 1.12
//     strategy.entry('long', strategy.long)
//     strategy.exit('exit', 'long', stop=stopLoss, limit=takeProfit)
// plot(fastEMA, color=color.new(color.blue, 0))
// plot(slowEMA, color=color.new(color.yellow, 0))

Thêm nữa