Strategi harga rata-rata bergerak silang

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

img

Gambaran umum

Strategi ini pada dasarnya adalah strategi silang rata-rata bergerak. Dengan menghitung rata-rata bergerak harga dan menetapkan rata-rata bergerak jangka pendek dan jangka panjang tertentu, pergi panjang ketika rata-rata bergerak jangka pendek melintasi di atas rata-rata bergerak jangka panjang dari bawah; pergi pendek ketika rata-rata bergerak jangka pendek melintasi di bawah rata-rata bergerak jangka panjang dari atas.

Prinsip-prinsip

Ide inti dari strategi lintas rata-rata bergerak harga adalah: rata-rata bergerak harga dapat secara efektif mencerminkan tren perubahan harga. Strategi menilai perubahan tren pasar dengan menetapkan dua rata-rata bergerak dari siklus yang berbeda dan logika perdagangan tertentu untuk menghasilkan sinyal perdagangan.

Strategi ini menghitung rata-rata bergerak jangka panjang dan jangka pendek. Garis panjang terutama menilai tren utama, dan garis pendek digunakan untuk menangkap fluktuasi jangka menengah selama tren utama. Sinyal perdagangan strategi terutama berasal dari persimpangan garis pendek di atas garis panjang: sinyal panjang ketika garis pendek melintasi garis panjang, dan sinyal pendek ketika garis pendek melintasi di bawah. Selain itu, strategi memfilter sinyal untuk menghindari sinyal palsu.

Secara khusus, strategi ini menggunakan 7 jenis rata-rata bergerak yang berbeda, termasuk SMA, EMA, VWMA, dll. Pengguna dapat memilih jenis rata-rata bergerak. Panjang rata-rata bergerak juga dapat diatur secara fleksibel. Selain itu, strategi ini juga menyediakan pembatasan pada periode waktu perdagangan tertentu dan mekanisme manajemen posisi. Melalui pengaturan ini, pengguna dapat secara fleksibel menyesuaikan parameter strategi untuk beradaptasi dengan berbagai varietas dan lingkungan pasar.

Analisis Keuntungan

Keuntungan utama dari strategi lintas rata-rata bergerak harga adalah sebagai berikut:

  1. Logika strategi jelas dan sederhana, mudah dimengerti dan diterapkan, cocok untuk pemula untuk belajar.

  2. Prinsip strategi yang kuat, didasarkan pada aturan perdagangan rata-rata bergerak yang sepenuhnya diverifikasi, dan telah diuji secara praktis di pasar.

  3. Parameter strategi ini fleksibel dan dapat disesuaikan. Pengguna dapat memilih parameter yang tepat sesuai dengan penilaian dan preferensi mereka sendiri di pasar.

  4. Strategi ini memiliki mekanisme pengendalian risiko tertentu untuk mengurangi waktu penahan pesanan yang kehilangan dan mencegah posisi reverse yang tidak perlu.

  5. Strategi ini berisi beberapa jenis rata-rata bergerak. Pengguna dapat memilih jenis rata-rata bergerak yang paling cocok untuk varietas perdagangan mereka.

  6. Strategi ini mendukung memungkinkan logika perdagangan selama periode waktu perdagangan tertentu untuk menghindari fluktuasi abnormal di pasar liburan utama.

Analisis Risiko

Meskipun strategi lintas rata-rata bergerak harga memiliki banyak keuntungan, masih ada beberapa risiko dalam perdagangan yang sebenarnya, yang terutama tercermin dalam dua aspek berikut:

  1. Karena keterlambatan sebagian besar rata-rata bergerak, sinyal silang dapat muncul pada tahap selanjutnya setelah pembalikan harga selesai, yang mudah terjebak.

  2. Dalam kasus pengaturan parameter yang tidak tepat, sinyal silang mungkin terlalu sering, menghasilkan aktivitas perdagangan yang terlalu tinggi dan biaya perdagangan yang lebih tinggi.

Menanggapi risiko di atas, kontrol dan metode penanganan dilakukan dengan cara berikut:

  1. Mengontrol risiko kerugian tunggal dengan menetapkan rentang stop loss yang tepat.

  2. Mengurangi frekuensi perdagangan dan mencegah over-trading dengan menambahkan kondisi filter.

  3. Mengoptimalkan parameter rata-rata bergerak untuk memilih kombinasi parameter yang paling cocok untuk varietas dan siklus perdagangan Anda sendiri. Uji stabilitas strategi di bawah kondisi pasar yang berbeda.

Optimalisasi

Masih ada ruang untuk optimalisasi lebih lanjut dari strategi crossover rata-rata bergerak harga ini.

  1. Meningkatkan mekanisme perlindungan dalam kondisi pasar yang ekstrim. misalnya, menghentikan perdagangan sementara selama fluktuasi harga yang keras untuk menghindari kondisi pasar yang tidak normal.

  2. Meningkatkan kondisi filter dan sinyal perdagangan gabungan untuk meningkatkan kualitas dan stabilitas sinyal.

  3. Mengadopsi sistem parameter dinamis. Menurut kondisi pasar dan karakteristik varietas, secara otomatis menyesuaikan parameter kunci seperti panjang rata-rata bergerak, switch perdagangan, dll.

  4. Terapkan sinyal crossover rata-rata bergerak ini dalam strategi canggih seperti arbitrage varietas komposit.

Saran-saran di atas dapat memperluas lingkungan yang berlaku dan efektivitas strategi ini dan mencapai tradeoff risiko-manfaat yang lebih baik.

Kesimpulan

Artikel ini membuat analisis dan interpretasi kode terperinci dari strategi crossover rata-rata bergerak sederhana - Noros CrossMA. Kami menganalisis ide strategi, struktur prinsip, keuntungan utama dan arah perbaikan yang mungkin. Secara keseluruhan, strategi ini memiliki logika yang jelas dan sederhana dan praktis. Penyesuaian parameter yang fleksibel dapat beradaptasi dengan banyak lingkungan perdagangan. Kami juga membedah masalah dan risiko yang ada dalam strategi dan memberikan saran yang ditargetkan. Diyakini bahwa melalui analisis dan diskusi yang komprehensif ini, pedagang dapat lebih memahami jenis strategi tersebut dan membantu mereka terus mengoptimalkan sistem perdagangan nyata.


/*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 banyak