Strategi Dwi Purata Pergerakan Dinamik


Tarikh penciptaan: 2023-12-13 16:37:05 Akhirnya diubah suai: 2023-12-13 16:37:05
Salin: 2 Bilangan klik: 669
1
fokus pada
1621
Pengikut

Strategi Dwi Purata Pergerakan Dinamik

Gambaran keseluruhan

Strategi ini menggunakan kemerosotan purata bergerak ((MA) dan kemerosotan penunjuk momentum untuk membuat keputusan perdagangan. Ia membandingkan kemerosotan MA dan kemerosotan momentum dengan had yang ditetapkan, menghasilkan isyarat perdagangan apabila kedua-dua kemerosotan melebihi had. Strategi ini juga mengandungi penapis turun naik rendah, menggunakan isyarat pengeluaran MA yang berbeza apabila turun naik pasaran rendah.

Prinsip Strategi

Strategi ini berpusat pada perbandingan antara dua kurva kecenderungan. Pertama, ia akan mengira kecenderungan MA dan indikator momentum. Kecenderungan mencerminkan kelajuan dan arah perubahan kurva. Kemudian menggunakan dua had, ia menghasilkan isyarat perdagangan apabila kedua-dua kurva kecenderungan melebihi had yang sesuai.

Sebagai contoh, apabila MA dan momentum melebihi kemerosotan, ia akan menghasilkan isyarat beli; apabila kedua-dua kurva jatuh ke bawah, ia akan menghasilkan isyarat jual. Ini boleh menyaring beberapa isyarat palsu.

Penapis turun naik rendah menggunakan MA jangka panjang untuk menilai turun naik pasaran. Apabila turun naiknya rendah, MA menggunakan parameter yang berbeza untuk menghasilkan isyarat perdagangan, sehingga menyesuaikan diri dengan keadaan pasaran yang berbeza.

Analisis kelebihan

Strategi ini mempunyai beberapa kelebihan:

  1. Dengan menggunakan penapis berganda untuk menetapkan isyarat perdagangan, ia boleh menapis sebahagian daripada bunyi bising dan meningkatkan kualiti isyarat.

  2. Penapis turun naik rendah membolehkan strategi menyesuaikan diri dengan keadaan pasaran yang berbeza dan mempunyai fleksibiliti.

  3. Membolehkan parameter yang berbeza untuk disesuaikan secara tinggi dan dapat dioptimumkan untuk pelbagai jenis.

  4. Mengandungi fungsi tanpa cat semula, yang dapat mengurangkan kesan penyesuaian kurva pada hasil.

Analisis risiko

Strategi ini juga mempunyai risiko:

  1. Penapisan berganda mungkin menapis sebahagian daripada isyarat sebenar, menyebabkan peluang yang terlewatkan. Ia boleh dioptimumkan dengan menyesuaikan parameter.

  2. Penapis gelombang rendah menentukan nilai tunas memerlukan ujian yang teliti. Jika parameter tidak sesuai, isyarat mungkin menyimpang.

  3. MA dan parameter penunjuk tenaga perlu dioptimumkan untuk varieti tertentu, parameter umum di seluruh pasaran sukar ditentukan.

  4. Fungsi tanpa cat semula tidak dapat sepenuhnya mengelakkan kesesuaian kurva pengesanan kembali, dan kesan cakera tetap masih perlu disahkan.

  5. Parameter khusus yang tinggi akan membuat ruang parameter menjadi rumit dan meningkatkan kesukaran pengoptimuman.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Uji lebih banyak jenis MA dan kombinasi penunjuk momentum untuk mencari penunjuk yang paling sesuai.

  2. Mengoptimumkan parameter panjang MA dan parameter momentum, keseimbangan kelewatan dan kebisingan.

  3. Mengoptimumkan parameter yang dikira untuk mencari kombinasi indikator yang lebih stabil.

  4. Uji indikator dan parameter yang berbeza untuk meningkatkan keanjalan.

  5. Uji pada pelbagai jenis dan kitaran untuk mencari kawasan yang paling sesuai.

  6. Membina mekanisme penyesuaian parameter untuk mengurangkan beban kerja pengoptimuman manual.

ringkaskan

Strategi ini secara keseluruhannya adalah strategi MA ganda yang sangat fleksibel dan boleh disesuaikan. Ia merujuk kepada maklumat harga dan momentum untuk membuat keputusan dan dapat menyaring isyarat palsu dengan berkesan. Penapis gelombang rendah juga menjadikan strategi lebih fleksibel dan dapat menyesuaikan diri dengan perubahan pasaran.

Dengan pengoptimuman parameter dan penambahbaikan dalam pilihan penunjuk, strategi ini boleh menjadi pilihan yang patut dipertimbangkan untuk digunakan di pasaran sebenar. Ia menyediakan templat rujukan untuk membuat keputusan perdagangan menggunakan MA dan penunjuk momentum.

Kod sumber strategi
/*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)