Xu hướng theo chiến lược dựa trên sự hồi quy Nadaraya-Watson và kênh ATR

Tác giả:ChaoZhang, Ngày: 2024-02-22
Tags:

img

Tổng quan

Chiến lược này là một chiến lược theo xu hướng kết hợp hồi quy Nadaraya-Watson và kênh ATR để xác định hướng xu hướng và các điểm nhập cảnh. Nó đi dài khi giá vượt qua đường ray dưới và đóng vị trí khi giá vượt qua đường ray trên.

Chiến lược logic

Đầu tiên, chiến lược này sử dụng hồi quy hạt nhân Nadaraya-Watson để tính toán hai đường cong hồi quy với độ trễ khác nhau, và so sánh sự chéo chéo của hai đường cong để xác định hướng xu hướng. Cụ thể, nó tính toán các đường cong hồi quy của h-period và h-lag-period tương ứng. Khi đường cong h-lag-period vượt qua đường cong h-period, nó chỉ ra một tín hiệu dài. Khi đường cong h-lag-period vượt qua dưới đường cong h-period, nó chỉ ra một tín hiệu ngắn.

Thứ hai, chiến lược này sử dụng kênh ATR để xác định các điểm đầu vào. Đường ray trên là đường cong hồi quy cộng với nhân ATR n giai đoạn và đường ray dưới là đường cong hồi quy trừ số nhân ATR n giai đoạn. Nó đi dài khi giá vượt qua đường ray dưới và đi ngắn khi giá vượt qua đường ray trên.

Cuối cùng, một cơ chế dừng lỗ được thiết lập. Nếu giá ở dưới giá nhập cảnh cho các thanh stopLossBars liên tiếp, vị trí sẽ được đóng bằng cách dừng lỗ.

Phân tích lợi thế

Chiến lược này kết hợp phân tích hồi quy và đột phá kênh, có thể nắm bắt hướng xu hướng và động lực tương đối chính xác.

Ngoài ra, kênh ATR thiết lập các điểm nhập hợp lý, tránh các mục nhập sai xung quanh các điểm đảo ngược xu hướng.

Do đó, chiến lược này có những ưu điểm như khả năng xác định xu hướng mạnh mẽ, các mục nhập và mục tiêu tương đối chính xác, rủi ro dừng lỗ duy nhất có thể kiểm soát được, v.v.

Phân tích rủi ro

Rủi ro lớn nhất của chiến lược này là khi giá vượt qua kênh ATR, nó có thể chỉ làm cho một sự đảo ngược hoặc hợp nhất, dẫn đến việc nhập vào không đúng hoặc dừng lỗ nhanh sau khi nhập vào.

Ngoài ra, cả đường cong hồi quy và các kênh ATR đều cần một số tối ưu hóa tham số. Cài đặt tham số không chính xác có thể dẫn đến kết quả phân tích hồi quy kém hoặc phạm vi ATR quá rộng hoặc quá hẹp, sẽ ảnh hưởng đến hiệu suất của chiến lược.

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

Chúng ta có thể xem xét kết hợp các chỉ số khác để đánh giá các tín hiệu xu hướng và đảo ngược, chẳng hạn như VOLUME, MACD vv để cải thiện tính ổn định và chính xác của chiến lược.

Chức năng hạt nhân trong phân tích hồi quy cũng có thể được điều chỉnh, chẳng hạn như thử hạt nhân Epanechnikov, để xem liệu có thể đạt được hiệu ứng phù hợp hơn hay không.

Thời gian ATR và nhân của kênh ATR cũng cần thử nghiệm và tối ưu hóa lặp đi lặp lại để tìm ra sự kết hợp thông số tốt nhất.

Tóm lại

Chiến lược này kết hợp việc sử dụng phân tích hồi quy và đột phá kênh để xác định hướng và sức mạnh của xu hướng, vào các điểm hợp lý và thiết lập dừng lỗ, do đó nhận ra một xu hướng ổn định sau chiến lược.


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

//@version=5
strategy("Custom Strategy with Stop Loss and EMA", overlay=true)

src = input(close, title='Source')
h = input(10, title='Lookback Window', tooltip='The number of bars used for the estimation.')
r = input(10, title='Relative Weighting', tooltip='Relative weighting of time frames.')
x_0 = input(50, title='Start Regression at Bar',  tooltip='Bar index on which to start regression.')
lag = input(2, title='Lag', tooltip='Lag for crossover detection.')
stopLossBars = input(3, title='Stop Loss Bars', tooltip='Number of bars to check for stop loss condition.')
emaPeriod = input(46, title='EMA Period',  tooltip='Period for Exponential Moving Averages.')

lenjeje = input(32, title='ATR Period', tooltip='Period to calculate upper and lower band')
coef = input(2.7, title='Multiplier', tooltip='Multiplier to calculate upper and lower band')

// Function for Nadaraya-Watson Kernel Regression
kernel_regression1(_src, _size, _h) =>
    _currentWeight = 0.0
    _cumulativeWeight = 0.0
    for i = 0 to _size + x_0
        y = _src[i] 
        w = math.pow(1 + (math.pow(i, 2) / ((math.pow(_h, 2) * 2 * r))), -r)
        _currentWeight += y * w
        _cumulativeWeight += w
    [_currentWeight, _cumulativeWeight]

// Calculate Nadaraya-Watson Regression
[currentWeight1, cumulativeWeight1] = kernel_regression1(src, h, h)
yhat1 = currentWeight1 / cumulativeWeight1
[currentWeight2, cumulativeWeight2] = kernel_regression1(src, h-lag, h-lag)
yhat2 = currentWeight2 / cumulativeWeight2

// Calculate Upper and Lower Bands
upperjeje = yhat1 + coef * ta.atr(lenjeje)
lowerjeje = yhat1 - coef * ta.atr(lenjeje)

// Plot Upper and Lower Bands
plot(upperjeje, color=color.rgb(0, 247, 8), title="Upper Band", linewidth=2)
plot(lowerjeje, color=color.rgb(255, 0, 0), title="Lower Band", linewidth=2)

// Calculate EMAs
emaLow = ta.ema(low, emaPeriod)
emaHigh = ta.ema(high, emaPeriod)

// Plot EMAs
plot(emaLow, color=color.rgb(33, 149, 243, 47), title="EMA (Low)", linewidth=2)
plot(emaHigh, color=color.rgb(255, 153, 0, 45), title="EMA (High)", linewidth=2)

// Long Entry Condition
longCondition = low < lowerjeje
strategy.entry("Long", strategy.long, when=longCondition)

// Stop Loss Condition
stopLossCondition = close[1] < strategy.position_avg_price and close[2] < strategy.position_avg_price and close[3] < strategy.position_avg_price
strategy.close("Long", when=stopLossCondition)

// Close and Reverse (Short) Condition
shortCondition = high > upperjeje
strategy.close("Long", when=shortCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

Thêm nữa