Strategi harga purata bergerak silang

Penulis:ChaoZhang, Tarikh: 2023-11-27 16:52:19
Tag:

img

Ringkasan

Strategi ini pada dasarnya adalah strategi silang purata bergerak. Dengan mengira purata bergerak harga dan menetapkan purata bergerak jangka pendek dan jangka panjang tertentu, pergi panjang apabila purata bergerak jangka pendek melintasi di atas purata bergerak jangka panjang dari bawah; pergi pendek apabila purata bergerak jangka pendek melintasi di bawah purata bergerak jangka panjang dari atas.

Prinsip-prinsip

Idea utama strategi silang purata bergerak adalah: purata bergerak harga dapat mencerminkan trend perubahan harga dengan berkesan. Strategi ini menilai perubahan trend pasaran dengan menetapkan dua purata bergerak kitaran yang berbeza dan logik perdagangan tertentu untuk menjana isyarat perdagangan.

Strategi ini mengira purata bergerak jangka panjang dan jangka pendek. Garis panjang terutamanya menilai trend utama, dan garis pendek digunakan untuk menangkap turun naik jangka menengah semasa trend utama. Isyarat perdagangan strategi ini terutamanya berasal dari persimpangan garis pendek di atas garis panjang: isyarat panjang apabila garis pendek melintasi di atas garis panjang, dan isyarat pendek apabila garis pendek melintasi di bawah. Di samping itu, strategi menapis isyarat untuk mengelakkan isyarat palsu.

Secara khusus, strategi ini menggunakan 7 jenis purata bergerak yang berbeza, termasuk SMA, EMA, VWMA, dll. Pengguna boleh memilih jenis purata bergerak. Panjang purata bergerak juga boleh ditetapkan dengan fleksibel. Di samping itu, strategi ini juga menyediakan sekatan pada tempoh masa perdagangan tertentu dan mekanisme pengurusan kedudukan. Melalui tetapan ini, pengguna dapat menyesuaikan parameter strategi dengan fleksibel untuk menyesuaikan diri dengan pelbagai jenis dan persekitaran pasaran.

Analisis Kelebihan

Kelebihan utama strategi silang purata bergerak adalah sebagai berikut:

  1. Logik strategi adalah jelas dan mudah, mudah difahami dan dilaksanakan, sesuai untuk pemula belajar.

  2. Prinsip strategi adalah kukuh, berdasarkan peraturan perdagangan purata bergerak yang telah disahkan sepenuhnya, dan telah diuji secara praktikal di pasaran.

  3. Parameter strategi adalah fleksibel dan boleh disesuaikan. Pengguna boleh memilih parameter yang sesuai mengikut penilaian dan pilihan mereka sendiri di pasaran.

  4. Strategi ini mempunyai mekanisme kawalan risiko tertentu untuk mengurangkan masa memegang pesanan yang kehilangan dan mengelakkan kedudukan terbalik yang tidak perlu.

  5. Strategi ini mengandungi pelbagai jenis purata bergerak. Pengguna boleh memilih jenis purata bergerak yang paling sesuai untuk pelbagai perdagangan mereka.

  6. Strategi ini menyokong membolehkan logik perdagangan semasa tempoh perdagangan tertentu untuk mengelakkan turun naik yang tidak normal di pasaran percutian utama.

Analisis Risiko

Walaupun strategi silang purata bergerak harga mempunyai banyak kelebihan, masih ada beberapa risiko dalam perdagangan sebenar, yang terutamanya tercermin dalam dua aspek berikut:

  1. Oleh kerana kelewatan kebanyakan purata bergerak, isyarat silang mungkin muncul pada peringkat kemudian selepas pembalikan harga selesai, yang mudah terperangkap.

  2. Sekiranya tetapan parameter tidak betul, isyarat silang mungkin terlalu kerap, mengakibatkan aktiviti perdagangan yang terlalu tinggi dan kos perdagangan yang lebih tinggi.

Sebagai tindak balas kepada risiko di atas, kawalan dan kaedah mengatasi dilakukan dengan cara berikut:

  1. Kawal risiko kerugian tunggal dengan menetapkan julat stop loss yang sesuai.

  2. Mengurangkan kekerapan perdagangan dan mengelakkan perdagangan berlebihan dengan menambah keadaan penapis.

  3. Mengoptimumkan parameter purata bergerak untuk memilih kombinasi parameter yang paling sesuai untuk pelbagai dagangan anda sendiri dan kitaran.

Pengoptimuman

Masih ada ruang untuk mengoptimumkan lagi strategi crossover purata bergerak harga ini.

  1. Meningkatkan mekanisme perlindungan di bawah keadaan pasaran yang melampau. Sebagai contoh, menangguhkan perdagangan sementara semasa turun naik harga yang ganas untuk mengelakkan keadaan pasaran yang tidak normal.

  2. Meningkatkan keadaan penapis dan isyarat perdagangan gabungan untuk meningkatkan kualiti isyarat dan kestabilan.

  3. Mengambil sistem parameter dinamik. Mengikut keadaan pasaran dan ciri-ciri jenis, secara automatik menyesuaikan parameter utama seperti panjang purata bergerak, suis dagangan, dll. Daripada menggunakan nilai tetap.

  4. Terapkan isyarat crossover purata bergerak ini dalam strategi lanjutan seperti arbitraj pelbagai komposit. Gabungkan dengan maklumat lain untuk pengoptimuman strategi yang mendalam.

Cadangan di atas boleh meluaskan persekitaran yang boleh digunakan dan keberkesanan strategi ini dan mencapai pertimbangan risiko-balasan yang lebih baik.

Kesimpulan

Artikel ini membuat analisis kod terperinci dan tafsiran strategi crossover purata bergerak mudah - Noros CrossMA. Kami menganalisis idea strategi, struktur prinsip, kelebihan utama dan arah penambahbaikan yang mungkin. Secara keseluruhan, strategi ini mempunyai logika yang jelas dan mudah dan praktikal. Penyesuaian parameter yang fleksibel dapat menyesuaikan diri dengan banyak persekitaran perdagangan. Kami juga membedah masalah dan risiko yang ada dalam strategi dan memberikan nasihat yang disasarkan. Diyakini bahawa melalui analisis dan perbincangan yang komprehensif ini, peniaga dapat lebih memahami jenis strategi tersebut dan membantu mereka terus mengoptimumkan sistem perdagangan sebenar.


/*backtest
start: 2022-11-20 00:00:00
end: 2023-11-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's CrossMA", shorttitle = "CrossMA", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0, commission_value = 0.1)

needlong = input(true, "long")
needshort = input(true, "short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
type = input(defval = "SMA", options = ["SMA", "EMA", "VWMA", "DEMA", "TEMA", "KAMA", "PCMA"], title = "MA type")
src = input(close, defval = close, title = "MA Source")
len = input(30, defval = 30, minval = 1, title = "MA length")
off = input(00, defval = 00, minval = 0, title = "MA offset")
anti = input(true, defval = true, title = "Anti-saw filter")
showma = input(true, defval = true, title = "Show MA")
showbg = input(false, defval = false, title = "Show background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2)
kama = 0.0
kama := nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

sma_1 = sma(src, len)
ema_1 = ema(src, len)
vwma_1 = vwma(src, len)
ma2 = type == "SMA" ? sma_1 : type == "EMA" ? ema_1 : type == "VWMA" ? vwma_1 : type == "DEMA" ? dema : type == "TEMA" ? tema : type == "KAMA" ? kama : type == "PCMA" ? center : 0
ma = ma2[off]

macol = showma ? color.blue : na
plot(ma, color = macol, linewidth = 3, transp = 0)

//Background
trend = 0
trend := anti == false and close > ma ? 1 : anti == false and close < ma ? -1 : low > ma ? 1 : high < ma ? -1 : trend[1]
bgcol = showbg ? trend == 1 ? color.lime : trend == -1 ? color.red : na : na
bgcolor(bgcol, transp = 70)

//Trading
size = strategy.position_size
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if trend == 1 and trend[1] == -1
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if trend == -1 and trend[1] == 1
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if size > 0 and needshort == false and trend == -1
    strategy.close_all()
if size < 0 and needlong == false and trend == 1
    strategy.close_all()
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Lebih lanjut