
Strategi ini pada dasarnya adalah strategi persilangan rata-rata. Dengan menghitung harga rata-rata bergerak, dan menetapkan rata-rata bergerak jangka pendek tertentu, Anda melakukan lebih banyak ketika rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang dari bawah; Anda melakukan nol ketika rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang dari atas ke bawah.
Gagasan inti dari strategi crossover harga rata-rata adalah bahwa harga rata-rata bergerak dapat secara efektif mencerminkan tren perubahan harga. Strategi ini menghasilkan sinyal perdagangan dengan menetapkan dua rata-rata bergerak dari dua periode yang berbeda, dan logika perdagangan tertentu, untuk menilai perubahan tren pasar.
Strategi ini menghitung satu rata-rata jangka panjang dan satu rata-rata jangka pendek. Garis panjang digunakan untuk menilai tren besar, dan garis pendek digunakan untuk menangkap fluktuasi jangka pendek dalam proses tren besar. Sinyal perdagangan strategi ini terutama berasal dari persilangan garis pendek dengan garis panjang: melewati garis panjang di garis pendek untuk sinyal ganda, melewati garis panjang di bawah garis pendek untuk sinyal kosong. Selain itu, strategi ini juga melakukan penyaringan lebih lanjut pada sinyal untuk menghindari munculnya sinyal palsu.
Secara khusus, strategi ini menggunakan 7 jenis moving average yang berbeda, termasuk SMA, EMA, VWMA, dan lain-lain. Pengguna dapat memilih jenis moving average. Panjang moving average juga dapat diatur secara fleksibel.
Keuntungan utama dari strategi crossover harga rata-rata adalah sebagai berikut:
Strategi logis yang jelas dan sederhana, mudah dipahami dan diterapkan, cocok untuk pemula.
Prinsip-prinsip strategi yang kuat, berdasarkan aturan perdagangan linier yang telah diverifikasi, telah diuji oleh praktik pasar.
Parameter strategi dapat disesuaikan secara fleksibel, sehingga pengguna dapat memilih parameter yang sesuai sesuai dengan penilaian dan preferensi mereka terhadap pasar.
Strategi ini memiliki mekanisme pengendalian risiko yang dapat mengurangi waktu kepemilikan surat kerugian dan mencegah terjadinya reversal yang tidak perlu.
Strategi ini berisi berbagai jenis rata-rata bergerak, dan pengguna dapat memilih jenis rata-rata bergerak yang paling sesuai dengan varietas perdagangan mereka.
Strategi ini mendukung logika trading pada periode waktu tertentu untuk menghindari fluktuasi yang tidak biasa di pasar liburan utama.
Meskipun ada banyak keuntungan dari strategi crossover harga rata-rata, ada juga risiko tertentu dalam perdagangan yang sebenarnya, terutama dalam dua aspek berikut:
Karena sebagian besar rata-rata bergerak bersifat lag, sinyal silang dapat muncul di akhir periode setelah pembalikan harga selesai, dan mudah tersandung.
Jika parameter tidak diatur dengan benar, sinyal silang mungkin terlalu sering, sehingga aktivitas perdagangan terlalu tinggi dan menghasilkan lebih banyak biaya perdagangan.
Risiko-risiko tersebut dapat dikendalikan dan ditangani dengan cara berikut:
Mengontrol risiko kerugian tunggal dengan menetapkan stop loss yang moderat.
Meningkatkan kondisi penyaringan, mengurangi frekuensi transaksi, dan mencegah overtrading. Misalnya, mengatur saluran harga atau kondisi amplitudo fluktuasi harga.
Mengoptimalkan parameter moving average, memilih kombinasi parameter yang paling sesuai dengan varietas dan siklus perdagangan Anda. Uji stabilitas strategi dalam kondisi pasar yang berbeda.
Ada ruang untuk optimalisasi lebih lanjut dari strategi crossover harga rata-rata, terutama dari beberapa aspek:
Meningkatkan mekanisme perlindungan dalam situasi yang terlalu ekstrim. Misalnya, menghentikan perdagangan saat harga berfluktuasi tajam, menghindari periode pasar yang tidak normal.
Menambahkan lebih banyak kondisi penyaringan dan kombinasi sinyal perdagangan untuk meningkatkan kualitas dan stabilitas sinyal. Misalnya, kombinasi dengan indikator teknis lainnya untuk mengidentifikasi tren yang kuat.
Sistem parameter yang digunakan secara dinamis. Parameter kunci seperti panjang rata-rata bergerak dan tombol perdagangan disesuaikan secara otomatis sesuai dengan kondisi pasar dan karakteristik varietas, bukan menggunakan nilai tetap.
Aplikasi sinyal crossover rata-rata ini dalam strategi tingkat lanjut seperti arbitrage multi-varietas komposit. Dikombinasikan dengan informasi lainnya, untuk pengoptimalan strategi kedalaman.
Saran-saran ini dapat membuat strategi ini lebih luas, lebih efektif dalam perdagangan, dan lebih baik dalam mengintegrasikan risiko-pengembalian.
Artikel ini melakukan analisis dan pembahasan kode terperinci tentang strategi crossover linear sederhana Noro’s CrossMA. Kami menganalisis ide strategi, struktur prinsip, keunggulan utama, dan arah perbaikan yang mungkin. Strategi secara keseluruhan logis jelas, sederhana, praktis, parameter disesuaikan fleksibel, dapat disesuaikan dengan berbagai lingkungan perdagangan.
/*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")