Momentum Moving Average Crossover Trend Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-10-24 12:31:44
Tag:

img

Gambaran umum

Strategi ini menggabungkan crossover rata-rata bergerak dan indikator momentum untuk secara efektif melacak dan membalikkan tren. Pertama-tama menggunakan rata-rata bergerak cepat dan lambat untuk menghasilkan sinyal panjang salib emas dan sinyal pendek salib kematian. Kemudian dengan indikator momentum dari parameter tertentu, jika momentum pada MA cepat muncul lagi setelah salib emas, tren dianggap berkelanjutan dan posisi panjang akan dipertahankan. Ketika momentum turun, itu dianggap sebagai pembalikan tren dan posisi yang ada akan ditutup. Logika yang sama berlaku untuk sinyal pendek salib kematian saat melacak pembalikan tren. Filter ADX juga digunakan untuk menghindari sinyal yang salah ketika tidak dalam keadaan tren.

Logika Strategi

Logika inti dari strategi ini didasarkan pada sinyal tren dari penyeberangan MA dan sinyal pembalikan tren dari indikator momentum.

  1. Menghitung harga MA cepat1 (HMA 5 periode) dan harga MA lambat2 (HMA 7 periode).

  2. Palang emas dengan harga1 melintasi harga2 menghasilkan sinyal panjang. Palang kematian dengan harga1 melintasi harga2 menghasilkan sinyal pendek. Ini adalah penggunaan umum MA.

  3. Setelah sinyal panjang, jika momentum harga roc1 muncul lagi, tren dianggap berlanjut dan posisi panjang akan dipertahankan.

  4. Ketika momentum roc1 turun, itu dianggap sebagai pembalikan tren dan posisi yang ada akan ditutup.

  5. Masukkan ambang ADX untuk menghindari sinyal yang salah ketika tidak dalam kondisi tren.

Analisis Keuntungan

Dibandingkan dengan strategi MA sederhana, keuntungan terbesar dari strategi ini adalah pengenalan indikator momentum untuk menentukan pembalikan tren lebih cepat dan akurat.

  1. MAs sendiri menunda perubahan harga, sementara indikator momentum dapat dengan cepat menangkap sinyal pembalikan untuk stop loss yang tepat waktu atau perdagangan terbalik.

  2. Sinyal pembalikan yang didasarkan pada momentum lebih dapat diandalkan, menghindari perintah buka/tutup yang tidak perlu selama perdagangan tren.

  3. ADX menghindari sinyal yang salah di pasar non-trending, menjaga strategi lebih terfokus pada tren dengan peluang menang yang lebih tinggi.

  4. Logikanya sederhana dan mudah dimengerti, cocok untuk pemula perdagangan algo.

  5. Ruang optimalisasi yang besar dengan menyesuaikan periode MA, parameter momentum dll untuk pasar yang berbeda.

Analisis Risiko

Risiko utama dari strategi ini berasal dari:

  1. Sifat keterlambatan MAs, yang dapat menyebabkan sinyal tertunda, kehilangan titik masuk terbaik.

  2. Penembusan palsu menyebabkan entri atau keluar yang tidak perlu. Membutuhkan optimasi lebih lanjut dari parameter atau filter tambahan.

  3. Deteksi pembalikan tren bergantung pada momentum, yang dapat goyah selama perubahan pasar yang besar.

  4. ADX tidak sempurna dalam mendeteksi tren dan konsolidasi. pengaturan ambang yang tidak tepat dapat menyebabkan masalah.

  5. Tidak mempertimbangkan biaya perdagangan. Stop loss yang tepat harus ditetapkan ketika diterapkan dalam perdagangan nyata.

Arahan Optimasi

Strategi ini dapat dioptimalkan lebih lanjut dalam aspek berikut:

  1. Cobalah jenis MA lain atau sesuaikan parameter MA untuk efek pelembab yang lebih baik.

  2. Mengoptimalkan panjang indikator momentum untuk sensitivitas yang lebih tinggi untuk menangkap pembalikan harga.

  3. Tetapkan filter harga saat momentum berbalik untuk menghindari tertipu oleh fluktuasi jangka pendek.

  4. Meningkatkan penggunaan ADX dengan menggunakan parameter yang berbeda pada tingkat ADX yang berbeda.

  5. Memperkenalkan indikator volume dll untuk meningkatkan kualitas sinyal dan menyaring kebocoran palsu.

  6. Tambahkan mekanisme stop loss untuk mengendalikan kerugian perdagangan tunggal.

Ringkasan

Strategi ini menggabungkan keuntungan dari indikator MA dan momentum untuk melacak tren dan menangkap pembalikan. Dibandingkan dengan strategi mengikuti tren murni, strategi ini dapat lebih fleksibel dalam menangani tahap pasar yang berbeda, menghindari kerugian dari klimaks tren sambil menjaga perdagangan tren. Perbaikan lebih lanjut dapat dilakukan melalui optimasi parameter dan pengenalan kondisi tambahan. Secara keseluruhan, strategi ini memiliki logika yang jelas dan sederhana, sangat cocok untuk pemula perdagangan algo untuk belajar dan menerapkan.


/*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")
    
    



Lebih banyak