Strategi Mengikuti Tren Crossover Rata-rata Pergerakan Indikator Momentum


Tanggal Pembuatan: 2023-10-24 12:31:44 Akhirnya memodifikasi: 2023-10-24 12:31:44
menyalin: 0 Jumlah klik: 686
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Crossover Rata-rata Pergerakan Indikator Momentum

Ringkasan

Strategi ini menggabungkan crossover moving average dan momentum indicator, yang memungkinkan pelacakan tren yang efektif dan reversal yang tepat waktu. Strategi ini pertama-tama menggunakan moving average cepat dan moving average lambat untuk membentuk forks plus dan forks minus sinyal. Kemudian digabungkan dengan indikator momentum dengan parameter tertentu, jika indikator momentum pada moving average cepat naik lagi, maka dianggap sebagai trend terus, terus melakukan plus; ketika indikator momentum turun, maka dianggap sebagai reversal tren, posisi datar.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada sinyal tren yang terbentuk dari persimpangan rata-rata bergerak, dan indikator momentum menentukan pembalikan tren. Logika kode untuk bagian-bagian penting adalah sebagai berikut:

  1. Hitunglah rata-rata bergerak cepat price1 dan rata-rata bergerak lambat price2 ◦ dimana price1 adalah HMA 5 periode, price2 adalah HMA 7 periode ◦

  2. Ketika harga1 di atas melewati harga2 maka akan tercipta sinyal multiply, dan bila harga1 di bawah melewati harga2 maka akan tercipta sinyal putaran kosong. Ini adalah penggunaan yang biasa dilakukan pada moving averages.

  3. Setelah sinyal multitasking dipicu, jika indikator momentum rc1 dari rata-rata bergerak cepat price1 naik lagi, maka dianggap sebagai trend berlanjut, dan tetap multitasking.

  4. Ketika indikator momentum roc1 turun, maka dianggap bahwa tren berbalik dan melakukan posisi kosong. Logika pengolahan sinyal penarikan sama.

  5. Pendahuluan ADX threshold, digunakan untuk memfilter sinyal palsu dalam kondisi non-trend, hanya akan menghasilkan sinyal overbought yang sebenarnya ketika ADX lebih tinggi dari threshold.

Analisis Keunggulan

Keuntungan terbesar dari strategi ini dibandingkan dengan strategi rata-rata bergerak sederhana adalah bahwa dengan memperkenalkan indikator momentum yang menentukan pembalikan tren, Anda dapat lebih tepat waktu dan akurat melacak tren dan pembalikan. Keuntungan spesifiknya adalah sebagai berikut:

  1. Moving average sendiri terlambat merespon perubahan harga, sementara indikator momentum dapat lebih cepat menangkap sinyal reversal, yang menguntungkan untuk menghentikan kerugian atau membalikkan posisi tepat waktu.

  2. Sinyal reversal berdasarkan indikator momentum lebih dapat diandalkan dan mengurangi pembatasan posisi yang tidak perlu dalam perdagangan tren.

  3. Penggunaan indikator ADX menghindari kesalahan sinyal di pasar non-trending, memungkinkan strategi untuk lebih fokus pada fase tren, sehingga meningkatkan probabilitas keuntungan.

  4. Strategi logis yang jelas dan sederhana, mudah dipahami dan dilacak, cocok untuk pemula belajar algoritma perdagangan.

  5. Ada banyak ruang untuk mengoptimalkan parameter indikator, yang dapat dioptimalkan untuk pasar yang berbeda dengan menyesuaikan siklus rata-rata bergerak, parameter momentum, dll.

Analisis risiko

Risiko utama dari strategi ini adalah:

  1. Rata-rata bergerak itu sendiri terlambat bereaksi terhadap perubahan harga, yang dapat menyebabkan sinyal terlambat dan melewatkan waktu masuk yang optimal.

  2. Penembusan palsu menyebabkan posisi terbuka atau kosong yang tidak perlu, yang memerlukan pengoptimalan parameter indikator lebih lanjut atau pengenalan kondisi penyaringan tambahan.

  3. Trend reversal didasarkan pada indikator momentum, yang dapat dikurangkan ketika pasar berubah secara dramatis.

  4. Indeks ADX tidak dapat menilai tren dan konsolidasi dengan sempurna, dan penetapan nilai ambang terlalu tinggi atau terlalu rendah dapat menyebabkan masalah.

  5. Strategi ini tidak mempertimbangkan biaya transaksi, dan dalam praktiknya perlu berhati-hati untuk mengatur titik berhenti untuk mengendalikan risiko.

Arah optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam beberapa hal:

  1. Cobalah jenis lain dari moving averages, atau ubah parameter moving averages untuk mengoptimalkan efek yang lebih halus dari indikator.

  2. Optimalkan parameter panjang indikator dinamika agar lebih sensitif terhadap perubahan harga.

  3. Cobalah untuk mengatur filter harga saat indikator momentum berbalik, untuk menghindari tertipu oleh fluktuasi kecil jangka pendek.

  4. Peningkatan penggunaan ADX, seperti menggunakan parameter yang berbeda untuk setiap level ADX.

  5. Menggunakan indikator volume transaksi untuk meningkatkan kualitas sinyal, dan memfilter penembusan palsu

  6. Menambahkan mekanisme stop loss untuk mengendalikan kerugian tunggal. Mengevaluasi tingkat biaya proses di pasar nyata, dan menetapkan stop loss yang wajar.

Meringkaskan

Strategi ini mengintegrasikan keunggulan dari indikator moving average dan indikator momentum, dan memungkinkan pelacakan tren dan penangkapan reversal. Dibandingkan dengan pelacakan tren murni, strategi ini dapat menanggapi berbagai tahap pasar dengan lebih fleksibel, dan menghindari kerugian yang ditimbulkan oleh resonansi yang tinggi, sambil mempertahankan perdagangan tren.

Kode Sumber Strategi
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy with MA Turning Point Exits", overlay=true)
src = input(open, title="Source")

price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(5, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA"])

ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA"])

adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Length")
adxthreshold = input(20, title="ADX threshold")

dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
	minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]
adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
	
sig = adx(dilen, adxlen)

//study("Average Directional Index", shorttitle="ADX", format=format.price, precision=2, resolution="")

//plot(sig, color=color.red, title="ADX")

f_hma(_src, _length)=>
    _return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
    sma(price, ma1)
else
    if (type1 == "EMA")
        ema(price, ma1)
    else
        f_hma(price, ma1)
    
price2 = if (type2 == "SMA")
    sma(price, ma2)
else
    if (type2 == "EMA")
        ema(price, ma2)
    else
        f_hma(price, ma2)

//plot(series=price, style=line,  title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line,  title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)


//longCondition = price1> price2
longCondition = price1> price2 and sig > adxthreshold
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = price1 < price2 and sig > adxthreshold
if (shortCondition)
    strategy.entry("Short", strategy.short)

lookback1 = input(1, "Lookback 1")
roc1 = roc(price1, lookback1)

ma1up = false
ma1down = false
ma2up = false
ma2down = false

ma1up := nz(ma1up[1])
ma1down := nz(ma1down[1])
ma2up := nz(ma2up[1])
ma2down := nz(ma2down[1])

trendStrength1 = input(2, title="Minimum slope magnitude * 100", type=float) * 0.01

if crossover(roc1, trendStrength1)
    ma1up := true
    ma1down := false
    
if crossunder(roc1, -trendStrength1) 
    ma1up := false
    ma1down := true

shortexitCondition = ma1up and ma1down[1] and sig > adxthreshold
if (shortexitCondition)
    strategy.close("Short")

longexitCondition = ma1down and ma1up[1] and sig > adxthreshold
if (longexitCondition)
    strategy.close("Long")