Trend Mengikut Strategi Berdasarkan Regresi Nadaraya-Watson dan Saluran ATR

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

img

Ringkasan

Strategi ini adalah strategi trend berikut yang menggabungkan regresi Nadaraya-Watson dan saluran ATR untuk mengenal pasti arah trend dan titik kemasukan.

Logika Strategi

Pertama, strategi ini menggunakan regresi kernel Nadaraya-Watson untuk mengira dua lengkung regresi dengan kelewatan yang berbeza, dan membandingkan persilangan kedua-dua lengkung untuk menentukan arah trend. Khususnya, ia mengira lengkung regresi h-periode dan h-lag-periode masing-masing. Apabila lengkung h-lag-periode melintasi lengkung h-periode, ia menunjukkan isyarat panjang. Apabila lengkung h-lag-periode melintasi di bawah lengkung h-periode, ia menunjukkan isyarat pendek.

Kedua, strategi ini menggunakan saluran ATR untuk menentukan titik kemasukan. Rel atas adalah kurva regresi ditambah pengganda ATR n-periode dan rel bawah adalah kurva regresi dikurangkan pengganda ATR n-periode. Ia pergi lama apabila harga menembusi rel bawah dan pergi pendek apabila harga menembusi rel atas.

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

Analisis Kelebihan

Strategi ini menggabungkan analisis regresi dan terobosan saluran, yang dapat menangkap arah trend dan momentum dengan agak tepat.

Di samping itu, saluran ATR menetapkan titik masuk yang munasabah, mengelakkan entri yang salah di sekitar titik pembalikan trend.

Oleh itu, strategi ini mempunyai kelebihan seperti keupayaan yang kuat untuk mengenal pasti trend, entri dan keluar yang agak tepat, risiko kehilangan berhenti tunggal yang boleh dikawal, dll.

Analisis Risiko

Risiko terbesar strategi ini ialah apabila harga menembusi saluran ATR, ia mungkin hanya membuat pembalikan atau penyatuan, yang membawa kepada kemasukan yang tidak betul atau hentian kerugian cepat selepas kemasukan.

Di samping itu, kedua-dua kurva regresi dan saluran ATR memerlukan beberapa pengoptimuman parameter. Tetapan parameter yang tidak betul boleh menyebabkan hasil analisis regresi yang buruk atau julat ATR yang terlalu luas atau terlalu sempit, yang akan mempengaruhi prestasi strategi.

Arahan pengoptimuman

Kita boleh mempertimbangkan menggabungkan penunjuk lain untuk menilai isyarat trend dan pembalikan, seperti VOLUME, MACD dan lain-lain untuk meningkatkan kestabilan dan ketepatan strategi.

Fungsi kernel dalam analisis regresi juga boleh diselaraskan, seperti mencuba kernel Epanechnikov, untuk melihat sama ada kesan yang lebih sesuai dapat diperoleh.

Tempoh ATR dan pengganda saluran ATR juga memerlukan ujian dan pengoptimuman berulang untuk mencari kombinasi parameter terbaik.

Ringkasan

Strategi ini menggabungkan penggunaan analisis regresi dan terobosan saluran untuk mengenal pasti arah trend dan kekuatan, memasuki pada titik yang munasabah, dan menetapkan stop loss, dengan itu merealisasikan trend 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 lanjut