Strategi Mengikuti Trend Persilangan Purata Pergerakan Penunjuk Momentum


Tarikh penciptaan: 2023-10-24 12:31:44 Akhirnya diubah suai: 2023-10-24 12:31:44
Salin: 0 Bilangan klik: 686
1
fokus pada
1617
Pengikut

Strategi Mengikuti Trend Persilangan Purata Pergerakan Penunjuk Momentum

Gambaran keseluruhan

Strategi ini menggabungkan penyambung rata-rata bergerak dan penunjuk momentum, yang membolehkan trend dijejaki dengan berkesan dan berbalik pada masa yang tepat. Strategi ini pertama-tama menggunakan rata-rata bergerak cepat dan rata-rata bergerak perlahan untuk membentuk tanda Forex yang lebih tinggi dan tanda Forex yang lebih rendah. Kemudian, digabungkan dengan penunjuk momentum dengan parameter tertentu, jika penunjuk momentum pada rata-rata bergerak cepat naik lagi, ia dianggap sebagai trend terus, dan terus meningkat; apabila penunjuk momentum turun, ia dianggap sebagai pembalikan trend, kedudukan rata.

Prinsip Strategi

Logik teras strategi ini adalah berdasarkan isyarat trend yang dibentuk oleh persilangan purata bergerak, dan indikator momentum menentukan pembalikan trend. Logik kod bahagian penting adalah sebagai berikut:

  1. Hitung harga purata bergerak cepat price1 dan purata bergerak perlahan price2 ◄ di mana harga1 adalah HMA 5 kitaran, harga2 adalah HMA 7 kitaran ◄

  2. Apabila harga1 di atas menembusi harga2 menghasilkan isyarat berganda, dan apabila harga1 di bawah menembusi harga2 menghasilkan isyarat kosong. Ini adalah penggunaan biasa berdasarkan purata bergerak.

  3. Selepas mencetuskan isyarat berbilang, jika penunjuk momentum rc1 pada harga purata bergerak cepat 1 naik lagi, ia dianggap sebagai trend berterusan dan kekal dalam keadaan berbilang.

  4. Apabila penunjuk momentum roc1 turun, ia dianggap sebagai pembalikan trend dan melakukan kedudukan kosong. Logik pemprosesan isyarat kosong adalah sama.

  5. Pengenalan ADX Threshold, digunakan untuk menyaring isyarat salah dalam keadaan bukan trend, hanya apabila ADX lebih tinggi daripada threshold akan menghasilkan isyarat melakukan lebih banyak shorting.

Analisis kelebihan

Kelebihan utama strategi ini berbanding dengan strategi purata bergerak yang mudah ialah pengenalan penunjuk dinamik yang menentukan pembalikan trend, yang dapat mengesan trend dan pembalikan lebih tepat pada masanya. Kelebihan spesifiknya adalah sebagai berikut:

  1. Rata-rata bergerak sendiri bertindak balas terhadap perubahan harga dengan lambat, manakala penunjuk momentum dapat menangkap isyarat pembalikan lebih cepat, yang membantu menghentikan kerugian atau membalikkan kedudukan tepat pada masanya.

  2. Isyarat pembalikan berdasarkan indikator momentum lebih dipercayai, yang dapat mengurangkan pembukaan posisi yang tidak perlu dalam perdagangan trend.

  3. Penggunaan indikator ADX mengelakkan isyarat salah dalam pasaran bukan trend, membolehkan strategi lebih fokus pada fasa trend, dan dengan itu meningkatkan kebarangkalian keuntungan.

  4. Strategi logiknya jelas dan mudah difahami dan diikuti, sesuai untuk pemula dalam perdagangan algoritma.

  5. Ruang untuk mengoptimumkan parameter penunjuk besar, boleh dicapai dengan menyesuaikan kitaran purata bergerak, parameter momentum dan lain-lain untuk mengoptimumkan pasaran yang berbeza.

Analisis risiko

Risiko utama dalam strategi ini adalah:

  1. Rata-rata bergerak itu sendiri bertindak balas terhadap perubahan harga yang terlewat, yang boleh menyebabkan isyarat terlewat dan terlepas masa masuk yang terbaik.

  2. Penembusan palsu menyebabkan kedudukan terbuka atau kosong yang tidak perlu, yang memerlukan pengoptimuman parameter penunjuk lebih lanjut atau pengenalan syarat penapisan tambahan.

  3. Keputusan pembalikan trend bergantung kepada indikator dinamik, dan apabila pasaran berubah secara mendadak, kesan indikator dinamik mungkin akan dikurangkan.

  4. Indeks ADX tidak dapat menilai trend dan penyusunan dengan sempurna, dan penetapan had terlalu tinggi atau terlalu rendah boleh menyebabkan masalah.

  5. Strategi ini tidak mempertimbangkan kos urus niaga, perlu berhati-hati untuk menetapkan titik berhenti untuk mengawal risiko apabila digunakan secara praktikal.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Cuba jenis purata bergerak yang lain, atau sesuaikan parameter purata bergerak, untuk mengoptimumkan kesan halus indikator.

  2. Optimumkan parameter panjang indikator dinamika supaya ia lebih sensitif terhadap perubahan harga.

  3. Cuba untuk menetapkan penapis harga apabila indikator momentum berbalik, untuk mengelakkan tertipu oleh turun naik kecil jangka pendek.

  4. Peningkatan penggunaan ADX, seperti menggunakan parameter yang berbeza untuk tahap ADX yang berbeza.

  5. Memperkenalkan syarat tambahan seperti penunjuk jumlah transaksi, meningkatkan kualiti isyarat, penapis penembusan palsu.

  6. Menambah mekanisme penangguhan kerugian untuk mengawal kerugian tunggal. Menilai tahap bayaran bayaran di pasaran sebenar dan menetapkan penangguhan kerugian yang munasabah.

ringkaskan

Strategi ini mengintegrasikan kelebihan penunjuk purata bergerak dan penunjuk momentum, mewujudkan trend yang dijejaki dan menangkap pembalikan. Berbanding dengan trend yang semata-mata, strategi ini dapat bertindak lebih fleksibel terhadap tahap pasaran yang berbeza, dan mengelakkan kerugian yang disebabkan oleh kejatuhan yang tinggi, sambil mengekalkan perdagangan trend.

Kod 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")