Trend Mengikut Strategi Berdasarkan Moving Average Crossover

Penulis:ChaoZhang, Tarikh: 2024-02-23 12:21:40
Tag:

img

Ringkasan

Strategi ini menentukan arah trend harga dengan mengira dua purata bergerak dengan tetapan parameter yang berbeza dan membandingkan situasi persilangan mereka, untuk melaksanakan trend selepas perdagangan. Apabila purata bergerak pantas menembusi purata bergerak perlahan dari bawah, ia dinilai sebagai isyarat kenaikan. Apabila purata bergerak pantas menembusi purata bergerak perlahan dari atas, ia dinilai sebagai isyarat penurunan. Strategi ini dapat mencapai penilaian terhadap trend kitaran yang berbeza dengan menyesuaikan parameter.

Prinsip Strategi

Strategi ini menggunakan dua set purata bergerak dengan tetapan parameter yang berbeza untuk perbandingan. Parameter purata bergerak pertama ditetapkan oleh len1 dan type1, dan parameter purata bergerak kedua ditetapkan oleh len2 dan type2. Di mana len1 dan len2 mewakili panjang kitaran dua purata bergerak masing-masing, dan type1 dan type2 mewakili jenis algoritma purata bergerak.

Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan untuk membentuk salib emas, ia dinilai sebagai isyarat menaik. Apabila purata bergerak pantas melintasi di bawah purata bergerak perlahan untuk membentuk salib mati, ia dinilai sebagai isyarat menurun.

Mengikut arah isyarat crossover, kedudukan panjang atau pendek akan dilaksanakan. Apabila isyarat bullish dicetuskan, jika parameter needlong benar, kedudukan panjang akan dibuka dengan kuantiti default_qty_value atau peratusan_of_equity. Apabila isyarat bearish dicetuskan, jika parameter needshort benar, kedudukan pendek akan dibuka dengan kuantiti default_qty_value atau peratusan_of_equity.

Kelebihan

  1. Menyokong gabungan 7 jenis purata bergerak yang berbeza untuk menyesuaikan diri dengan fleksibel dengan keadaan pasaran
  2. Sesuaikan parameter dua purata bergerak untuk menilai trend jangka panjang dan jangka sederhana
  3. Peraturan penilaian isyarat yang mudah dan jelas, mudah difahami dan dilaksanakan
  4. Sokongan kedudukan panjang dan pendek, boleh menjalankan urus niaga trend tracking

Risiko dan Penyelesaian

  1. Purata bergerak mempunyai sifat yang tertinggal dan mungkin terlepas titik pembalikan harga
    Penyelesaian: Pendekkan kitaran purata bergerak dengan sewajarnya, atau gunakan dalam kombinasi dengan penunjuk lain

  2. Tidak sesuai untuk pasaran dengan turun naik yang tinggi dan pembalikan yang kerap
    Penyelesaian: Tambah syarat penapisan untuk mengelakkan perdagangan di pasaran berayun

  3. Ada risiko isyarat palsu.
    Penyelesaian: Tambah penapis lain untuk kombinasi untuk meningkatkan kebolehpercayaan isyarat

Arahan pengoptimuman

  1. Mengoptimumkan gabungan kitaran purata bergerak, dan menguji kesan parameter kitaran panjang dan pendek pada pulangan strategi
  2. Uji prestasi pelbagai jenis purata bergerak untuk mencari algoritma purata bergerak optimum
  3. Tambah pembolehubah jumlah dagangan atau Bollinger Bands untuk kombinasi untuk meningkatkan kualiti isyarat
  4. Mengoptimumkan strategi pengurusan kedudukan untuk meningkatkan pendekatan kedudukan tetap peratusan_of_equity

Ringkasan

Strategi ini menilai trend harga dengan membandingkan persilangan dua purata bergerak, dan membuat operasi panjang dan pendek yang sepadan untuk menangkap dan mendapat keuntungan daripada trend. Kelebihannya adalah bahawa peraturan isyarat mudah dan jelas, parameternya boleh disesuaikan, penerapannya kuat, dan ia boleh dioptimumkan dan diselaraskan untuk pelbagai persekitaran pasaran. Perhatikan untuk mengelakkan risiko ketinggalan purata bergerak dan pasaran bergelombang, yang dapat dikurangkan dengan menambah penapis lain untuk meningkatkan kualiti isyarat.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's MAs Cross Tests v1.0", shorttitle = "MAs Cross tests 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0)

needlong = input(true, "long")
needshort = input(true, "short")

len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length")
type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type")
src2 = input(close, defval = close, title = "Fast MA Source")

len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length")
type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type")
src1 = input(close, defval = close, title = "Slow MA Source")

col = input(false, defval = false, title = "Color of bar")

o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel") 

//DEMA 1
dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1)

//TEMA 1
xEMA1 = ema(src1, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA 1
xvnoise = abs(src1 - src1[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src1 - src1[len1])
nnoise = sum(xvnoise, len1)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama1 = nz(kama1[1]) + nsmooth * (src1 - nz(kama1[1]))

//PriceChannel 1
lasthigh1 = highest(src1, len1)
lastlow1 = lowest(src1, len1)
center1 = (lasthigh1 + lastlow1) / 2

//DEMA 2
dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2)

//TEMA 2
xEMA12 = ema(src2, len2)
xEMA22 = ema(xEMA12, len2)
xEMA32 = ema(xEMA22, len2)
tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32

//KAMA 2
xvnoise2 = abs(src2 - src2[1])
nfastend2 = 0.20
nslowend2 = 0.05
nsignal2 = abs(src2 - src2[len2])
nnoise2 = sum(xvnoise2, len2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1]))

//PriceChannel 2
lasthigh2 = highest(src2, len2)
lastlow2 = lowest(src2, len2)
center2 = (lasthigh2 + lastlow2) / 2

//MAs
ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0
ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0
plot(ma1, color = blue, linewidth = 3, transp = 0)
plot(ma2, color = red, linewidth = 3, transp = 0)

//Signals
trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1]
up = trend == 1 and ((close < open and close[1] < open[1]) or col == false)
dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false)

if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

Lebih lanjut