Strategi ini adalah strategi trend berikut yang menggabungkan regresi Nadaraya-Watson dan saluran ATR untuk mengenal pasti arah trend dan titik kemasukan.
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.
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.
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.
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.
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)