Tren Mengikuti Strategi Berdasarkan Regresi Nadaraya-Watson dan Saluran ATR

Penulis:ChaoZhang, Tanggal: 2024-02-22 15:03
Tag:

img

Gambaran umum

Strategi ini adalah strategi trend following yang menggabungkan regresi Nadaraya-Watson dan saluran ATR untuk mengidentifikasi arah tren dan titik masuk.

Logika Strategi

Pertama, strategi ini menggunakan regresi kernel Nadaraya-Watson untuk menghitung dua kurva regresi dengan lag yang berbeda, dan membandingkan persilangan kedua kurva untuk menentukan arah tren. Secara khusus, strategi ini menghitung kurva regresi periode h dan periode h-lag masing-masing. Ketika kurva periode h-lag melintasi kurva periode h, itu menunjukkan sinyal panjang. Ketika kurva periode h-lag melintasi di bawah kurva periode h, itu menunjukkan sinyal pendek.

Kedua, strategi ini menggunakan saluran ATR untuk menentukan titik masuk. rel atas adalah kurva regresi ditambah pengganda ATR n-periode dan rel bawah adalah kurva regresi dikurangi pengganda ATR n-periode.

Akhirnya, mekanisme stop loss ditetapkan. Jika harga tetap di bawah harga masuk untuk stopLossBars bar berturut-turut, posisi akan ditutup dengan stop loss.

Analisis Keuntungan

Strategi ini menggabungkan analisis regresi dan terobosan saluran, yang dapat menangkap arah tren dan momentum dengan relatif akurat. Dibandingkan dengan menggunakan indikator tunggal seperti moving average untuk mengidentifikasi tren, metode ini mengurangi sinyal palsu dan dengan demikian meningkatkan stabilitas strategi.

Selain itu, saluran ATR menetapkan titik masuk yang wajar, menghindari entri yang salah di sekitar titik pembalikan tren.

Oleh karena itu, strategi ini memiliki keuntungan seperti kemampuan yang kuat untuk mengidentifikasi tren, entri dan keluar yang relatif akurat, risiko stop loss tunggal yang dapat dikendalikan, dll.

Analisis Risiko

Risiko terbesar dari strategi ini adalah bahwa ketika harga menembus saluran ATR, mungkin hanya melakukan pembalikan atau konsolidasi, yang mengarah pada masuk yang tidak tepat atau stop loss cepat setelah masuk.

Selain itu, baik kurva regresi dan saluran ATR membutuhkan beberapa optimasi parameter. pengaturan parameter yang tidak benar dapat menyebabkan hasil analisis regresi yang buruk atau rentang ATR yang terlalu luas atau terlalu sempit, yang akan mempengaruhi kinerja strategi.

Arahan Optimasi

Kita dapat mempertimbangkan untuk menggabungkan indikator lain untuk menilai sinyal tren dan pembalikan, seperti VOLUME, MACD dll untuk meningkatkan stabilitas dan akurasi strategi.

Fungsi kernel dalam analisis regresi juga dapat disesuaikan, seperti mencoba kernel Epanechnikov, untuk melihat apakah efek penyesuaian yang lebih baik dapat diperoleh.

Periode ATR dan pengganda saluran ATR juga membutuhkan pengujian dan optimalisasi berulang untuk menemukan kombinasi parameter terbaik.

Ringkasan

Strategi ini menggabungkan penggunaan analisis regresi dan terobosan saluran untuk mengidentifikasi arah tren dan kekuatan, masuk pada titik yang wajar, dan menetapkan stop loss, sehingga mewujudkan tren yang stabil mengikuti strategi.


/*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)

Lebih banyak