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

Nadaraya-Watson Envelope Multi-Confirmation Dynamic Stop-Loss Strategy

Tác giả:ChaoZhang, Ngày: 2024-05-24 17:58:47
Tags:ADXDIRSIMAE

img

Tổng quan

Chiến lược này sử dụng phong bì Nadaraya-Watson để làm mịn dữ liệu giá và tính toán dải trên và dưới dựa trên giá làm mịn. Sau đó nó sử dụng các chỉ số ADX và DI để xác định sức mạnh và hướng xu hướng, và chỉ số RSI để xác nhận đà tăng của xu hướng. Các đột phá tiềm năng được xác định khi giá vượt qua trên hoặc dưới dải phong bì. Cuối cùng, nó thực hiện giao dịch dựa trên các tín hiệu kết hợp của xu hướng, đột phá và đà tăng, trong khi sử dụng stop-loss năng động để quản lý rủi ro.

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

  1. Áp dụng phong bì Nadaraya-Watson để làm mịn các dữ liệu giá và tính các dải trên và dưới.
  2. Sử dụng các chỉ số ADX và DI để xác định sức mạnh và hướng xu hướng. Xu hướng tăng được chỉ ra khi ADX vượt quá ngưỡng và +DI lớn hơn -DI, và ngược lại đối với xu hướng giảm.
  3. Xác định khả năng phá vỡ khi giá vượt trên dải trên hoặc dưới dải dưới.
  4. Xác nhận động lực xu hướng bằng chỉ số RSI. RSI trên 70 chỉ ra động lực tăng, trong khi RSI dưới 30 chỉ ra động lực giảm.
  5. Thực hiện các giao dịch dựa trên các tín hiệu kết hợp của xu hướng, đột phá và đà:
    • Nhập vị trí dài khi có xu hướng tăng mạnh, đột phá lên, và động lực tăng.
    • Nhập vị trí ngắn khi có xu hướng giảm mạnh, đột phá giảm và động lực giảm.
  6. Thực hiện stop-loss động để quản lý rủi ro. Giá stop-loss được tính dựa trên giá cao nhất / thấp nhất và giá đóng cửa.
  7. Hiển thị các tín hiệu chiến lược bằng cách vẽ các đường xu hướng, điểm đột phá và tín hiệu động lực trên biểu đồ.

Ưu điểm chiến lược

  1. Các phong bì Nadaraya-Watson hiệu quả làm mịn dữ liệu giá, giảm nhiễu nhiễu.
  2. Cơ chế xác nhận đa nâng cao độ tin cậy tín hiệu.
  3. Quản lý dừng lỗ năng động thích nghi tốt hơn với biến động thị trường và giảm rủi ro. Giá dừng lỗ được tính dựa trên giá cao nhất / thấp nhất và giá đóng cửa, cho phép nó điều chỉnh theo thị trường.
  4. Việc vẽ trực quan các đường xu hướng, điểm đột phá và tín hiệu động lực trên biểu đồ giúp người dùng quan sát và giải thích các tín hiệu chiến lược.

Rủi ro chiến lược

  1. Trong các thị trường bất ổn hoặc trong thời gian đảo ngược xu hướng, các tín hiệu đột phá thường xuyên có thể dẫn đến giao dịch quá mức và thua lỗ.
  2. Động lực dừng lỗ có thể không thoát khỏi các vị trí kịp thời trong quá trình đảo ngược xu hướng, dẫn đến tăng rút tiền.
  3. Các thông số chiến lược, chẳng hạn như băng thông của phong bì Nadaraya-Watson và ngưỡng ADX, cần được tối ưu hóa cho các thị trường và công cụ khác nhau.

Hướng dẫn tối ưu hóa chiến lược

  1. Tích hợp các chỉ số xác định xu hướng hiệu quả bổ sung, chẳng hạn như MACD, hệ thống trung bình động, v.v., để cải thiện độ chính xác và ổn định của việc xác định xu hướng.
  2. Tối ưu hóa phương pháp tính toán dừng lỗ động bằng cách xem xét các chỉ số liên quan đến biến động như ATR và SAR để làm cho dừng lỗ linh hoạt và hiệu quả hơn.
  3. Phát triển các kết hợp tham số khác nhau cho các đặc điểm thị trường khác nhau, chẳng hạn như xu hướng hoặc thị trường giới hạn phạm vi, để tăng khả năng thích nghi của chiến lược.
  4. Đưa ra một mô-đun kích thước vị trí để điều chỉnh kích thước vị trí theo động dựa trên các yếu tố như xu hướng thị trường và biến động, do đó kiểm soát rủi ro.

Tóm lại

Chiến lược này kết hợp phong bì Nadaraya-Watson để làm mịn giá với các chỉ số xu hướng như ADX và DI, chỉ số động lực RSI và điểm đột phá giá để tạo ra một hệ thống giao dịch toàn diện. Quản lý dừng lỗ động giúp thích nghi với những thay đổi của thị trường và kiểm soát rủi ro ở một mức độ nhất định. Tuy nhiên, trong ứng dụng thực tế, nên chú ý đến việc tối ưu hóa xác định xu hướng, dừng lỗ động và cài đặt tham số để cải thiện độ bền và lợi nhuận của chiến lược.


/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-18 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nadaraya-Watson Envelope with Multi-Confirmation and Dynamic Stop-Loss", overlay=true)

// Input parameters
h = input.float(7.2, "Bandwidth", minval=0)
mult = input.float(2.1, minval=0)
src = input(close, "Source")

// ADX and DI Input Parameters
adxLength = input.int(14, "ADX Length")
adxThreshold = input.float(25, "ADX Threshold")
adxSmoothing = input.int(14, "ADX Smoothing")

// Calculate ADX and DI
[dmiPlus, dmiMinus, adx] = ta.dmi(adxLength, adxSmoothing)
strongTrendUp = dmiPlus > dmiMinus and adx > adxThreshold
strongTrendDown = dmiMinus > dmiPlus and adx > adxThreshold

// Nadaraya-Watson Envelope Calculation
gauss(x, h) =>
    math.exp(-(math.pow(x, 2) / (h * h * 2)))

coefs = array.new_float(0)
den = 0.0

for i = 0 to 100
    w = gauss(i, h)
    array.push(coefs, w)

den := array.sum(coefs)

out = 0.0
for i = 0 to 100
    out += src[i] * array.get(coefs, i)
out /= den
mae = ta.sma(math.abs(src - out), 100) * mult

upper = ta.sma(out + mae, 10)
lower = ta.sma(out - mae, 10)

// Confirmations
breakoutUp = ta.crossover(src, upper)
breakoutDown = ta.crossunder(src, lower)

// Original RSI period and thresholds
rsiPeriod = input.int(14, "RSI Period")
rsi = ta.rsi(src, rsiPeriod)
momentumUp = rsi > 70 and adx > adxThreshold
momentumDown = rsi < 30 and adx > adxThreshold

// // Plot ADX-based Trend Confirmation Lines
// if (strongTrendUp)
//     line.new(bar_index, low, bar_index + 1, low, color=color.new(color.blue, 50), width=2, style=line.style_dashed)

// if (strongTrendDown)
//     line.new(bar_index, high, bar_index + 1, high, color=color.new(color.red, 50), width=2, style=line.style_dashed)

// Plot Breakout Confirmation Dots
plotshape(series=breakoutUp, style=shape.circle, location=location.abovebar, color=color.blue, size=size.tiny, title="Breakout Up")
plotshape(series=breakoutDown, style=shape.circle, location=location.belowbar, color=color.orange, size=size.tiny, title="Breakout Down")

// Plot Momentum Confirmation Arrows
plotshape(series=momentumUp, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Momentum Up")
plotshape(series=momentumDown, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Momentum Down")

// Strategy Entry and Exit
var float stopLossLevel = na
var float highestPrice = na

potentialBuy = strongTrendUp and breakoutUp
potentialSell = strongTrendDown and breakoutDown
momentumConfirmUp = potentialBuy and momentumUp
momentumConfirmDown = potentialSell and momentumDown

if (momentumConfirmUp)
    strategy.entry("Buy", strategy.long)
    stopLossLevel := close * 0.90
    highestPrice := close

if (momentumConfirmDown)
    strategy.entry("Sell", strategy.short)
    stopLossLevel := close * 1.10
    highestPrice := close

if (strategy.position_size > 0)
    highestPrice := math.max(highestPrice, close)
    stopLossLevel := math.max(highestPrice * 0.85, close * 0.90)

if (strategy.position_size < 0)
    highestPrice := math.min(highestPrice, close)
    stopLossLevel := math.min(highestPrice * 1.15, close * 1.10)

// Close position if stop loss is hit
if (strategy.position_size > 0 and close < stopLossLevel)
    strategy.close("Buy")

if (strategy.position_size < 0 and close > stopLossLevel)
    strategy.close("Sell")


Có liên quan

Thêm nữa