Chiến lược phân kỳ dao động xu hướng biến động,

WT VWAP
Ngày tạo: 2024-05-28 17:43:54 sửa đổi lần cuối: 2024-05-28 17:43:54
sao chép: 0 Số nhấp chuột: 721
1
tập trung vào
1617
Người theo dõi

Chiến lược phân kỳ dao động xu hướng biến động,

Tổng quan

Chiến lược này kết hợp các chỉ số biến động WaveTrend (WT) và giá trung bình trọng lượng giao dịch (VWAP) để nắm bắt các cơ hội đảo ngược xu hướng tiềm năng bằng cách xác định giá và sự lệch của chỉ số. Chiến lược này sử dụng ATR (Phạm vi thực trung bình) để xác định vị trí dừng lỗ và điều chỉnh kích thước vị trí theo tỷ lệ rủi ro của tài khoản.

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

  1. Tính toán chỉ số dao động của WaveTrend ((WT): Tạo chỉ số dao động động động bằng cách so sánh giá hiện tại với sự khác biệt giữa kênh và giá trung bình của nó.
  2. Tính toán giá trung bình cân đối khối lượng giao dịch ((VWAP): Sử dụng khối lượng giao dịch làm trọng lượng để tính toán giá trung bình di chuyển.
  3. Xác định sự lệch giữa giá và chỉ số WT: Khi giá tạo ra một mức cao/thấp mới và chỉ số không tạo ra một mức cao/thấp mới, điều này cho thấy có thể có một sự đảo ngược xu hướng.
  4. Điều kiện nhập cảnh: Khi nhận ra đợt giảm giá, hãy mở thêm; Khi nhận ra đợt giảm giá, hãy giảm.
  5. Đặt điểm dừng động dựa trên ATR (Average True Range).
  6. Kích thước vị trí: Kích thước vị trí của mỗi giao dịch được điều chỉnh theo tỷ lệ rủi ro của tài khoản và khoảng cách dừng lỗ.
  7. Màu nền: Thay đổi màu nền tùy theo mức mua / bán quá mức của chỉ số, cung cấp thêm gợi ý trực quan.

Phân tích lợi thế

  1. Theo dõi xu hướng: Chiến lược này có thể nắm bắt cơ hội đảo ngược xu hướng tiềm ẩn bằng cách nhận diện giá cả và các chỉ số sai lệch.
  2. Quản lý rủi ro: Sử dụng dừng động dựa trên ATR và điều chỉnh quy mô vị trí theo tỷ lệ phần trăm rủi ro, giúp kiểm soát tổn thất tiềm ẩn.
  3. Dấu hiệu thị giác: Màu nền thay đổi tùy thuộc vào trạng thái quá mua / quá bán của chỉ số, cung cấp tín hiệu thị giác bổ sung cho nhà giao dịch.
  4. Tính linh hoạt: Các tham số của chiến lược (chẳng hạn như chiều dài kênh, chiều dài trung bình, cấp độ quá mua / quá bán) có thể được điều chỉnh theo các điều kiện thị trường và phong cách giao dịch khác nhau.

Phân tích rủi ro

  1. Thị trường biến động: Chiến lược này có thể chịu tổn thất liên tục trong điều kiện thị trường không có xu hướng rõ ràng.
  2. Tối ưu hóa tham số: Hiệu suất của chiến lược phụ thuộc rất nhiều vào sự lựa chọn tham số, thiết lập tham số không đúng cách có thể dẫn đến kết quả tối ưu hóa thứ cấp.
  3. Quá nhiều giao dịch: Các tín hiệu đi vào và ra ngoài thường xuyên có thể dẫn đến chi phí giao dịch cao hơn, ảnh hưởng đến hiệu suất tổng thể của chiến lược.

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

  1. Trình lọc xu hướng: Khi xảy ra sự lệch, giới thiệu các chỉ số xác nhận xu hướng bổ sung (như trung bình di chuyển) để lọc các tín hiệu giả tiềm ẩn.
  2. Các tham số động: Các tham số chỉ số được điều chỉnh theo biến động của thị trường, sử dụng các kênh và độ dài trung bình ngắn hơn khi biến động thấp, sử dụng các tham số dài hơn khi biến động cao.
  3. Hạn chế: giới thiệu mức dừng động dựa trên tỷ lệ lợi nhuận rủi ro hoặc giá mục tiêu để quản lý tốt hơn các vị trí đã kiếm được lợi nhuận.
  4. Bộ lọc đa khoảng: Bộ lọc tín hiệu giao dịch theo hướng xu hướng tổng thể của thị trường (như đường trung bình di chuyển dài hạn) và chỉ giao dịch theo hướng xu hướng.

Tóm tắt

Chiến lược Phản xạ Phong trào Phong trào kết hợp các chỉ số xu hướng dao động và giá trung bình trọng lượng giao dịch để xác định cơ hội đảo ngược xu hướng tiềm ẩn. Ưu điểm của chiến lược là khả năng theo dõi xu hướng và các biện pháp quản lý rủi ro, nhưng có thể gặp rủi ro trong thị trường biến động.

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

//@version=5
strategy("PipShiesty Swagger", overlay=true)

// WaveTrend Oscillator (WT)
n1 = input.int(10, "Channel Length")
n2 = input.int(21, "Average Length")
obLevel1 = input.float(60.0, "Overbought Level 1")
obLevel2 = input.float(53.0, "Overbought Level 2")
osLevel1 = input.float(-60.0, "Oversold Level 1")
osLevel2 = input.float(-53.0, "Oversold Level 2")

ap = hlc3
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)

// VWAP
vwap = ta.vwma(close, n1)

// Signal Line
wt1 = tci
wt2 = ta.sma(wt1, 4)

// Bullish and Bearish Divergences
bullishDivergence = (ta.lowest(close, 5) > ta.lowest(close[1], 5)) and (wt1 < wt1[1]) and (close > close[1])
bearishDivergence = (ta.highest(close, 5) < ta.highest(close[1], 5)) and (wt1 > wt1[1]) and (close < close[1])

// Plot WaveTrend Oscillator
plot(wt1, title="WT1", color=color.blue)
plot(wt2, title="WT2", color=color.red)

// Plot Divergences
plotshape(series=bullishDivergence, location=location.belowbar, color=color.green, style=shape.labelup, title="Bullish Divergence")
plotshape(series=bearishDivergence, location=location.abovebar, color=color.red, style=shape.labeldown, title="Bearish Divergence")

// Risk Management Parameters
riskPercentage = input.float(1, title="Risk Percentage per Trade", minval=0.1, step=0.1) / 100
stopLossATR = input.float(1.5, title="Stop Loss ATR Multiplier", minval=0.5, step=0.1)

// ATR Calculation
atr = ta.atr(14)

// Position Size Calculation
calculatePositionSize(stopLoss) =>
    riskAmount = strategy.equity * riskPercentage
    positionSize = riskAmount / stopLoss
    positionSize

// Entry and Exit Logic with Stop Loss
if bullishDivergence
    stopLoss = low - atr * stopLossATR
    positionSize = calculatePositionSize(close - stopLoss)
    strategy.entry("Buy", strategy.long, qty=positionSize)
    strategy.exit("Sell", from_entry="Buy", stop=stopLoss)

if bearishDivergence
    strategy.close("Buy")

// Plot VWAP
plot(vwap, title="VWAP", color=color.orange)

// Background color to indicate Overbought/Oversold conditions
bgcolor(wt1 > obLevel1 ? color.new(color.red, 90) : na, title="Overbought Level 1")
bgcolor(wt1 < osLevel1 ? color.new(color.green, 90) : na, title="Oversold Level 1")
bgcolor(wt1 > obLevel2 ? color.new(color.red, 70) : na, title="Overbought Level 2")
bgcolor(wt1 < osLevel2 ? color.new(color.green, 70) : na, title="Oversold Level 2")