Chiến lược giao dịch định lượng dựa trên sự giao thoa trung bình động có trọng số


Ngày tạo: 2023-12-06 12:05:01 sửa đổi lần cuối: 2023-12-06 12:05:01
sao chép: 0 Số nhấp chuột: 626
1
tập trung vào
1619
Người theo dõi

Chiến lược giao dịch định lượng dựa trên sự giao thoa trung bình động có trọng số

Tổng quan

Chiến lược này có tên làChiến lược chéo trung bình di chuyển định lượng(Weighted Quantitative Moving Average Crossover Strategy), ý tưởng cơ bản của nó là kết hợp nhiều chỉ số như giá cả, khối lượng giao dịch, thiết kế đường nhanh và đường chậm, và phát tín hiệu mua và bán khi chúng xảy ra.

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

Chỉ số cốt lõi của chiến lược này là trung bình di chuyển định lượng (Quantitative Moving Average, QMA). QMA đo hướng xu hướng bằng cách tính trung bình giá có trọng số trong một khoảng thời gian. Nó khác với trung bình di chuyển thông thường ở chỗ trọng lượng của giá (Quantitative Moving Average, QMA) = giá*Lượng giao dịch) sẽ suy giảm theo thời gian. Như vậy, giá gần đây có trọng lượng lớn hơn và có thể phản ứng nhanh hơn với sự thay đổi của thị trường.

Cụ thể, chiến lược này xây dựng các đường QMA nhanh và đường QMA chậm. Các tham số đường nhanh được đặt là 25 ngày và tham số đường chậm là 29 ngày.

Phân tích lợi thế

So với trung bình di chuyển thông thường, chiến lược này có những ưu điểm sau:

  1. Phản ứng nhanh hơn với thị trường để nắm bắt cơ hội ngắn hạn
  2. Kết hợp nhiều chiều của giá cả và khối lượng giao dịch, có tính ổn định cao hơn
  3. Thiết lập tham số linh hoạt để thích ứng với các môi trường thị trường khác nhau

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Các hoạt động ngắn gọn thường xuyên có thể làm tăng chi phí giao dịch và điểm trượt.
  2. PARAMETERS tối ưu hóa quá mức có thể dẫn đến cong
  3. Chỉ số có thể giảm hiệu quả khi giao dịch ít

Các rủi ro trên có thể được giảm thiểu bằng cách điều chỉnh tần số tham số, phân tích tiến bộ nghiêm ngặt và kết hợp với các chỉ số khác.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa hơn nữa:

  1. Động thái điều chỉnh các tham số của QMA, cho phép nó tự điều chỉnh theo mức độ biến động của thị trường
  2. Các chỉ số khác nhau như biến động, khối lượng giao dịch và cơ hội nhập cảnh.
  3. Tăng chiến lược dừng lỗ, kiểm soát tổn thất đơn lẻ

Tóm tắt

Chiến lược này nói chung là một chiến lược giao dịch ngắn hạn ổn định hơn. Các chỉ số của nó phản ánh tốt hơn mối quan hệ cung cầu của thị trường so với giá trung bình đơn lẻ. Bằng cách điều chỉnh tham số và giới thiệu các phương tiện kiểm soát rủi ro, chiến lược này có thể hoạt động ổn định lâu dài và thu được lợi nhuận tốt.

Mã nguồn chiến lược
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Brad VWMACD Strategy 2233", overlay=false, max_bars_back=500,default_qty_type=strategy.percent_of_equity,commission_type=strategy.commission.percent, commission_value=0.18, default_qty_value=100)

// === INPUT BACKTEST RANGE === 
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create function "within window of time"

// === INPUT SMA === 
//fastMA    = input(defval = 16, type = integer, title = "FastMA", minval = 1 )
//slowMA    = input(defval = 23, type = integer, title = "SlowMA", minval = 1)

fastMA    = input(defval = 25, title = "FastMA", minval = 1 )
slowMA    = input(defval = 29,  title = "SlowMA", minval = 1)

Long_period = slowMA
Short_period = fastMA
Smoothing_period = input(9, minval=1)
xLongMAVolPrice = ema(volume * close, Long_period) 
xLongMAVol = ema(volume, Long_period) 
xResLong = (xLongMAVolPrice * Long_period) / (xLongMAVol * Long_period)
xShortMAVolPrice = ema(volume * close, Short_period) 
xShortMAVol = ema(volume, Short_period) 
xResShort = (xShortMAVolPrice * Short_period) / (xShortMAVol * Short_period)
xVMACD = xResShort - xResLong
xVMACDSignal = ema(xVMACD, Smoothing_period)
nRes = xVMACD - xVMACDSignal
//plot(nRes*20+slowMA, color=blue, style = line )
//plot(3000, color=red, style = line )


// === SERIES SETUP ===

buy  = crossover( xVMACD,xVMACDSignal)     // buy when fastMA crosses over slowMA
sell = crossunder( xVMACD,xVMACDSignal)  // sell when fastMA crosses under slowMA


// === SERIES SETUP === 

//buy  = crossover(vwma(close, fastMA),7+vwma(close, slowMA))     // buy when fastMA crosses over slowMA
//sell = crossunder(vwma(close, fastMA),vwma(close, slowMA)-7)    // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy)  // buy long when "within window of time" AND crossover
strategy.close("L", when = window() and sell)                // sell long when "within window of time" AND crossunder         

// === EXECUTION ===
strategy.entry("S", strategy.short, when = window() and sell)  // buy long when "within window of time" AND crossover
strategy.close("S", when = window() and buy)                // sell long when "within window of time" AND crossunder         

plotshape(window() and buy, style=shape.triangleup, color=green, text="up")
plotshape(window() and sell, style=shape.triangledown, color=red, text="down")
plot(xVMACD*100, title = 'FastMA', color = orange, linewidth = 2, style = line)  // plot FastMA
plot(xVMACDSignal*100, title = 'SlowMA', color = aqua, linewidth = 2, style = line)    // plot SlowMA