
Chiến lược này là hệ thống giao dịch theo xu hướng dựa trên chỉ báo Volatility Rate Stop (VStop) và đường trung bình động theo hàm mũ (EMA). Chiến lược này kết hợp triết lý giao dịch của Stan Weinstein để tối ưu hóa việc quản lý tiền thông qua mức dừng lỗ được điều chỉnh linh hoạt, đồng thời sử dụng EMA để xác nhận hướng xu hướng. Sự kết hợp này cung cấp cho các nhà đầu tư và nhà giao dịch lướt sóng một khuôn khổ giao dịch cho phép họ nắm bắt xu hướng đồng thời quản lý rủi ro hiệu quả.
Logic cốt lõi của chiến lược này dựa trên hai chỉ số kỹ thuật chính:
Dừng biến động (VStop): Một chỉ báo dừng động dựa trên ATR (Phạm vi trung bình thực) giúp điều chỉnh vị trí dừng một cách thích ứng theo sự biến động của thị trường. Khi giá đang trong xu hướng tăng, đường dừng lỗ sẽ di chuyển lên khi giá tăng; khi xu hướng đảo ngược, đường dừng lỗ sẽ đổi hướng và được tính toán lại.
Đường trung bình động hàm mũ (EMA): hoạt động như một công cụ xác nhận xu hướng và giúp lọc ra các tín hiệu sai. Giá cần phải cao hơn đường EMA trước khi cân nhắc mở vị thế, điều này đảm bảo rằng hướng giao dịch phù hợp với xu hướng chính.
Logic tạo tín hiệu giao dịch như sau:
Chiến lược này xây dựng một khuôn khổ giao dịch theo xu hướng hoàn chỉnh bằng cách kết hợp hệ thống dừng lỗ theo biến động và trung bình động. Ưu điểm chính của chiến lược này nằm ở khả năng thích ứng và quản lý rủi ro, nhưng cũng cần phải chú ý đến tác động của môi trường thị trường đến hiệu quả của chiến lược. Thông qua quá trình tối ưu hóa và cải tiến liên tục, chiến lược này được kỳ vọng sẽ duy trì hiệu suất ổn định trong nhiều môi trường thị trường khác nhau. Các nhà giao dịch nên kiểm tra đầy đủ các thiết lập tham số và điều chỉnh chiến lược dựa trên khả năng chịu rủi ro của riêng mình trước khi áp dụng vào giao dịch thực tế.
/*backtest
start: 2024-12-17 00:00:00
end: 2025-01-16 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/
//@version=5
strategy("VStop + EMA Strategy", overlay=true)
// VStop Parameters
length = input.int(20, "VStop Length", minval=2)
multiplier = input.float(2.0, "VStop Multiplier", minval=0.25, step=0.25)
// EMA Parameters
emaLength = input.int(30, "EMA Length", minval=1)
// VStop Calculation
volStop(src, atrlen, atrfactor) =>
if not na(src)
var max = src
var min = src
var uptrend = true
var float stop = na
atrM = nz(ta.atr(atrlen) * atrfactor, ta.tr)
max := math.max(max, src)
min := math.min(min, src)
stop := nz(uptrend ? math.max(stop, max - atrM) : math.min(stop, min + atrM), src)
uptrend := src - stop >= 0.0
if uptrend != uptrend[1] and not barstate.isfirst
max := src
min := src
stop := uptrend ? max - atrM : min + atrM
[stop, uptrend]
// Calculate VStop
[vStop, isUptrend] = volStop(close, length, multiplier)
// Plot VStop
plot(vStop, "Volatility Stop", style=plot.style_cross, color=isUptrend ? color.teal : color.red)
// Calculate 30 EMA
emaValue = ta.ema(close, emaLength)
plot(emaValue, "EMA", color=color.blue)
// Entry and Exit Conditions
longCondition = isUptrend and close > emaValue
exitCondition = close <= emaValue
// Strategy Execution
if longCondition and not strategy.opentrades
strategy.entry("Long", strategy.long)
if exitCondition and strategy.opentrades
strategy.close("Long")
// Display Strategy Info
bgcolor(isUptrend ? color.new(color.teal, 90) : color.new(color.red, 90), title="Trend Background")