
Strategi ini menggunakan kemiringan rata-rata bergerak (MA) dan kemiringan indikator momentum untuk membuat keputusan perdagangan. Ini membandingkan kemiringan MA dan kemiringan momentum dengan ambang batas yang ditetapkan, menghasilkan sinyal perdagangan ketika kedua kemiringan tersebut melebihi ambang batas. Strategi ini juga mencakup filter rendah fluktuasi, yang menggunakan sinyal MA yang berbeda ketika volatilitas pasar rendah.
Inti dari strategi ini adalah membandingkan dua kurva kemiringan. Pertama, ia akan menghitung kemiringan MA dan indikator momentum. Kemiringan mencerminkan kecepatan dan arah perubahan kurva.
Sebagai contoh, ketika MA dan momentum lebih tinggi dari kemiringan, menghasilkan sinyal beli; ketika kedua kurva jatuh ke bawah, menghasilkan sinyal jual. Ini dapat memfilter beberapa sinyal palsu.
Filter low volatility menggunakan MA jangka panjang untuk menilai volatilitas pasar. Ketika volatilitas rendah, MA menggunakan parameter yang berbeda untuk menghasilkan sinyal perdagangan, sehingga menyesuaikan dengan kondisi pasar yang berbeda.
Strategi ini memiliki beberapa keuntungan:
Dengan menggunakan filter ganda untuk mengatur sinyal perdagangan, dapat memfilter beberapa noise dan meningkatkan kualitas sinyal.
Filter berfluktuasi rendah memungkinkan strategi untuk beradaptasi dengan kondisi pasar yang berbeda dan memiliki fleksibilitas.
Hal ini memungkinkan parameter yang sangat berbeda untuk disesuaikan dan dapat dioptimalkan untuk varietas yang berbeda.
Dengan fitur tanpa cat ulang, dapat mengurangi dampak dari penyesuaian kurva pada hasil.
Strategi ini juga memiliki beberapa risiko:
Filter ganda dapat memfilter beberapa sinyal nyata, menyebabkan peluang yang terlewatkan.
Penyaring gelombang rendah menentukan nilai ambang membutuhkan pengujian yang cermat. Jika parameternya tidak tepat, sinyal dapat menyimpang.
Pengaturan parameter MA dan indikator massa perlu dioptimalkan untuk varietas tertentu, parameter umum di seluruh pasar sulit untuk ditentukan.
Fungsi tanpa cat ulang tidak dapat sepenuhnya menghindari masalah kesesuaian kurva pengembalian, dan efek disk tetap harus diverifikasi.
Parameter yang sangat disesuaikan akan membuat ruang parameter menjadi lebih rumit dan semakin sulit untuk dioptimalkan.
Strategi ini dapat dioptimalkan dari beberapa arah:
Uji lebih banyak jenis MA dan kombinasi indikator momentum untuk menemukan indikator yang paling cocok.
Optimalkan parameter panjang MA dan indikator momentum, keseimbangan latensi dan kebisingan.
Optimalkan parameter yang digunakan untuk menghitung slope, dan temukan kombinasi indikator yang lebih stabil.
Uji indikator dan parameter volatilitas rendah yang berbeda untuk meningkatkan fleksibilitas.
Uji coba pada varietas dan siklus yang berbeda untuk mencari ruang lingkup yang optimal.
Membangun mekanisme penyesuaian parameter untuk mengurangi beban optimasi manual.
Strategi ini secara keseluruhan adalah strategi MA ganda yang sangat fleksibel dan dapat disesuaikan. Ini merujuk pada informasi harga dan momentum untuk membuat keputusan sekaligus, yang dapat secara efektif menyaring sinyal palsu. Filter rendah fluktuasi juga membuat strategi lebih fleksibel dan dapat beradaptasi dengan perubahan pasar.
Dengan pengoptimalan parameter dan peningkatan pilihan indikator, strategi ini dapat menjadi pilihan yang layak untuk dipertimbangkan untuk diterapkan di pasar nyata. Ini memberikan template referensi untuk membuat keputusan perdagangan menggunakan MA dan indikator momentum.
/*backtest
start: 2023-11-12 00:00:00
end: 2023-12-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Allenlk
//@version=4
strategy("DRSI DMA Scalping Strategy", shorttitle="DRSIDMA", overlay=false, initial_capital=1000, pyramiding=2, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//Inputs
matype = input(7, minval=1, maxval=8, title="1=SMA, 2=EMA, 3=WMA, 4=HullMA, 5=VWMA, 6=RMA, 7=TEMA, 8=Tilson T3", group="Moving Average")
masrc = input(close, title="MA Source", group="Moving Average")
malen = input(5, title="Moving Average Length - LookBack Period", group="Moving Average")
factorT3 = input(defval=7, title="Tilson T3 Factor - *.10 - so 7 = .7 etc.", minval=0, group="Moving Average")
maderiv = input(3, title="MA Slope Lookback", minval=1, group="Moving Average")
masmooth = input(5, title="MA Slope Smoothing", minval=1, group="Moving Average")
momtype = input(3, minval=1, maxval=3, title="1=RSI, 2=CCI, 3=RSI/ROC", group="Momentum Moving Average")
momsrc = input(close, title="Momentum Source", group="Momentum Moving Average")
momlen = input(3, title="Momentum Length", minval=1, group="Momentum Moving Average")
momderiv = input(8, title="Momentum Slope Lookback", minval=1, group="Momentum Moving Average")
momsmooth = input(7, title="Momentum Slope Smoothing", minval=1, group="Momentum Moving Average")
higherTf = input("1", title="Higher timeframe?", type = input.resolution, group="Time Resolution")
higherTfmult = input(130, title="MA Slope multiplier for Alternate Resolutions (Make the waves of the blue line similar size as the orange line)", group="Time Resolution")
buffup = input(0.02, title="Buy when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
bufflow = input(-0.03, title="Sell when both slopes cross this line", step=0.01, group="Buy and Sell Threshold")
lowVolMALength = input(28, title="Big MA Length", minval=1, group="Low Volatility Function")
MAlength = input(10, title="Low Volatility Moving Average Length", minval=1, group="Low Volatility Function")
MAThresh = input(0.05, title="Low Volatility Buy and Sell Threshold", step=0.01, group="Low Volatility Function")
Volminimum = input(2.5, title="Minimum volatility to trade", minval=0, step=0.01, group="Low Volatility Function")
//Low Volatility Function
//When Volatility is low refer to the slope of a long moving average
low_vol_MA = sma(close, lowVolMALength)
low_vol_down = (low_vol_MA[3] - low_vol_MA[1]) > MAThresh
low_vol_up = (low_vol_MA[3] - low_vol_MA[1]) < MAThresh * -1
percent_volatility = (1 - (low / high)) * 100
chng_MA = sma(percent_volatility, MAlength)
bad_vol = chng_MA < Volminimum
//No repaint function
nrp_funct(_symbol, _res, _src) => security(_symbol, _res, _src[barstate.isrealtime ? 1 : 0])
//hull ma definition
hullma = wma(2*wma(masrc, malen/2)-wma(masrc, malen), round(sqrt(malen)))
//TEMA definition
ema1 = ema(masrc, malen)
ema2 = ema(ema1, malen)
ema3 = ema(ema2, malen)
tema = 3 * (ema1 - ema2) + ema3
//Tilson T3
factor = factorT3 *.10
gd(masrc, malen, factor) => ema(masrc, malen) * (1 + factor) - ema(ema(masrc, malen), malen) * factor
t3(masrc, malen, factor) => gd(gd(gd(masrc, malen, factor), malen, factor), malen, factor)
tilT3 = t3(masrc, malen, factor)
//MA Type
avg = matype == 1 ? sma(masrc,malen) : matype == 2 ? ema(masrc,malen) : matype == 3 ? wma(masrc,malen) : matype == 4 ? hullma : matype == 5 ? vwma(masrc, malen) : matype == 6 ? rma(masrc,malen) : matype == 7 ? 3 * (ema1 - ema2) + ema3 : tilT3
//MA Slope Percentage
DeltaAvg = (avg / avg[maderiv]) - 1
SmoothedAvg = sma(DeltaAvg, masmooth)
MAout = nrp_funct(syminfo.tickerid, higherTf, SmoothedAvg) * higherTfmult
//Momentum indicators
Momentum = momtype == 1 ? rsi(momsrc, momlen) : momtype == 2 ? cci(momsrc, momlen) : momtype == 3 ? rsi(roc(momsrc,momlen),momlen) : na
//Momentum Slope Percentage
Deltamom = (Momentum / Momentum[momderiv]) - 1
SmoothedMom = sma(Deltamom, momsmooth)
Momout = nrp_funct(syminfo.tickerid, higherTf, SmoothedMom)
//Plottings
plot(buffup, color=color.green, title="Buy line")
plot(bufflow, color=color.red, title="Sell line")
plot(MAout, color=color.blue, linewidth=2, title="MA Slope")
plot(Momout, color=color.orange, linewidth=2, title="Momentum Slope")
longCondition = bad_vol ? low_vol_up : MAout > buffup and Momout > buffup
if (longCondition)
strategy.entry("Buy", strategy.long)
shortCondition = bad_vol ? low_vol_down : MAout < bufflow and Momout < bufflow
if (shortCondition)
strategy.entry("Sell", strategy.short)