Tài nguyên đang được tải lên... tải...

WaveTrend Oscillator Divergence Strategy Chiến lược

Tác giả:ChaoZhang, Ngày: 2024-05-28 17:43:54
Tags:WTVWAP

img

Tổng quan

Chiến lược này kết hợp WaveTrend Oscillator (WT) và Volume Weighted Average Price (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 sự khác biệt giữa giá và chỉ số. Chiến lược sử dụng Average True Range (ATR) để xác định mức dừng lỗ và điều chỉnh động kích thước vị trí dựa trên tỷ lệ phần trăm rủi ro tài khoản.

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

  1. Tính toán WaveTrend Oscillator (WT): Tạo ra một bộ dao động động bằng cách so sánh giá hiện tại với kênh và trung bình của nó.
  2. Tính toán giá trung bình cân nhắc khối lượng (VWAP): Tính toán giá trung bình động cân nhắc theo khối lượng.
  3. Xác định sự khác biệt giữa giá và chỉ số WT: Một sự đảo ngược xu hướng tiềm năng được chỉ ra khi giá đạt mức cao/ thấp mới trong khi chỉ số không làm như vậy.
  4. Điều kiện tham gia: Mở một vị trí dài khi xác định sự khác biệt tăng; đóng vị trí khi xác định sự khác biệt giảm.
  5. Stop-loss: Đặt các mức stop-loss động dựa trên Average True Range (ATR).
  6. Số lượng vị trí: Điều chỉnh động kích thước vị trí cho mỗi giao dịch dựa trên tỷ lệ phần trăm rủi ro tài khoản và khoảng cách dừng lỗ.
  7. Màu nền: Thay đổi màu nền dựa trên mức mua quá mức / bán quá mức của chỉ số, cung cấp các tín hiệu trực quan bổ sung.

Phân tích lợi thế

  1. Theo dõi xu hướng: Bằng cách xác định sự khác biệt giữa giá và chỉ số, chiến lược có thể nắm bắt các cơ hội đảo ngược xu hướng tiềm năng.
  2. Quản lý rủi ro: Việc sử dụng các lệnh dừng lỗ động dựa trên ATR và kích thước vị trí dựa trên tỷ lệ phần trăm rủi ro giúp kiểm soát các lỗ tiềm năng.
  3. Các tín hiệu trực quan: Màu nền thay đổi dựa trên trạng thái mua quá mức / bán quá mức của chỉ báo, cung cấp các tín hiệu trực quan bổ sung cho các nhà giao dịch.
  4. Tính linh hoạt: Các thông số của chiến lược (ví dụ: chiều dài kênh, chiều dài trung bình, mức mua quá mức / bán quá mức) có thể được điều chỉnh để phù hợp với 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 hỗn loạn: Trong điều kiện thị trường thiếu xu hướng rõ ràng, chiến lược có thể chịu tổn thất liên tiếp.
  2. Tối ưu hóa tham số: Hiệu suất của chiến lược phần lớn phụ thuộc vào sự lựa chọn các tham số, và cài đặt tham số kém tối ưu có thể dẫn đến kết quả kém.
  3. Việc giao dịch quá mức: Các tín hiệu vào và ra thường xuyên có thể dẫn đến chi phí giao dịch cao, ảnh hưởng đến hiệu suất tổng thể của chiến lược.

Hướng dẫn tối ưu hóa

  1. Bộ lọc xu hướng: giới thiệu các chỉ số xác nhận xu hướng bổ sung (ví dụ, đường trung bình động) khi xảy ra sự khác biệt để lọc các tín hiệu sai tiềm năng.
  2. Các thông số động: Điều chỉnh các thông số chỉ số dựa trên biến động thị trường, sử dụng kênh ngắn hơn và chiều dài trung bình trong biến động thấp và các thông số dài hơn trong biến động cao.
  3. Lợi nhuận: Đưa ra mức lợi nhuận năng động dựa trên tỷ lệ rủi ro-lợi nhuận hoặc giá mục tiêu để quản lý tốt hơn các vị trí có lợi nhuận.
  4. Bộ lọc dài / ngắn: Bộ lọc tín hiệu giao dịch dựa trên hướng xu hướng thị trường tổng thể (ví dụ, trung bình động dài hạn) để chỉ giao dịch theo hướng xu hướng.

Tóm lại

Chiến lược biến động dao động WaveTrend kết hợp chỉ số WaveTrend và Giá trung bình cân đối khối lượng để xác định các cơ hội đảo ngược xu hướng tiềm năng. Sức mạnh của chiến lược nằm trong khả năng theo xu hướng và các biện pháp quản lý rủi ro, nhưng nó có thể đối mặt với rủi ro trong các thị trường hỗn loạn. Chiến lược có thể được tối ưu hóa hơn nữa bằng cách giới thiệu các bộ lọc bổ sung, điều chỉnh tham số động và cải thiện các quy tắc vào và ra. Kiểm tra kỹ lưỡng và phân tích nhìn về tương lai là rất quan trọng trước khi thực hiệ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")


Có liên quan

Thêm nữa