
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.
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.
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:
Chiến lược này cũng có một số rủi ro:
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.
Chiến lược này có thể được tối ưu hóa hơn nữa:
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.
/*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