Tren Mengikuti Strategi Berdasarkan Rata-rata Bergerak Crossover

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

img

Gambaran umum

Strategi ini menentukan arah tren harga dengan menghitung dua rata-rata bergerak dengan pengaturan parameter yang berbeda dan membandingkan situasi silang mereka, sehingga dapat menerapkan tren setelah perdagangan. Ketika rata-rata bergerak cepat menerobos rata-rata bergerak lambat dari bawah, itu dinilai sebagai sinyal bullish. Ketika rata-rata bergerak cepat menerobos rata-rata bergerak lambat dari atas, itu dinilai sebagai sinyal bearish. Strategi ini dapat mencapai penilaian tren siklus yang berbeda dengan menyesuaikan parameter.

Prinsip Strategi

Strategi ini menggunakan dua set rata-rata bergerak dengan pengaturan parameter yang berbeda untuk perbandingan. Parameter rata-rata bergerak pertama ditetapkan oleh len1 dan type1, dan parameter rata-rata bergerak kedua ditetapkan oleh len2 dan type2.

Ketika rata-rata bergerak cepat melintasi di atas rata-rata bergerak lambat untuk membentuk salib emas, itu dinilai sebagai sinyal bullish. Ketika rata-rata bergerak cepat melintasi di bawah rata-rata bergerak lambat untuk membentuk salib mati, itu dinilai sebagai sinyal bearish.

Menurut arah sinyal crossover, posisi panjang atau pendek akan dieksekusi. Ketika sinyal bullish dipicu, jika parameter needlong benar, posisi panjang akan dibuka dengan kuantitas default_qty_value atau persentase_of_equity. Ketika sinyal bearish dipicu, jika parameter needshort benar, posisi pendek akan dibuka dengan kuantitas default_qty_value atau persentase_of_equity.

Keuntungan

  1. Mendukung kombinasi 7 jenis rata-rata bergerak yang berbeda untuk beradaptasi secara fleksibel dengan kondisi pasar
  2. Sesuaikan parameter dari dua rata-rata bergerak untuk menilai tren jangka panjang dan jangka menengah pendek
  3. Aturan penilaian sinyal yang sederhana dan jelas, mudah dimengerti dan diterapkan
  4. Mendukung posisi panjang dan pendek, dapat melakukan transaksi pelacakan tren

Risiko dan Solusi

  1. Rata-rata bergerak memiliki sifat tertinggal dan mungkin melewatkan titik pembalikan harga
    Solusi: Singkatkan siklus rata-rata bergerak dengan tepat, atau gunakan dalam kombinasi dengan indikator lain

  2. Tidak cocok untuk pasar dengan volatilitas tinggi dan pembalikan yang sering
    Solusi: Tambahkan kondisi penyaringan untuk menghindari perdagangan di pasar osilasi

  3. Ada beberapa risiko sinyal palsu
    Solusi: Tambahkan indikator penyaringan lain untuk kombinasi untuk meningkatkan keandalan sinyal

Arahan Optimasi

  1. Mengoptimalkan kombinasi siklus rata-rata bergerak, dan menguji dampak parameter siklus panjang dan pendek pada strategi pengembalian
  2. Uji kinerja berbagai jenis rata-rata bergerak untuk menemukan algoritma rata-rata bergerak optimal
  3. Tambahkan variabel volume perdagangan atau Bollinger Bands untuk kombinasi untuk meningkatkan kualitas sinyal
  4. Mengoptimalkan strategi manajemen posisi untuk meningkatkan pendekatan persentase_of_equity posisi tetap

Ringkasan

Strategi ini menilai tren harga dengan membandingkan persilangan dua rata-rata bergerak, dan melakukan operasi panjang dan pendek yang sesuai untuk menangkap dan mendapatkan keuntungan dari tren. Keuntungannya adalah bahwa aturan sinyal sederhana dan jelas, parameternya dapat disesuaikan, penerapannya kuat, dan dapat dioptimalkan dan disesuaikan untuk berbagai lingkungan pasar. Perhatikan untuk mencegah risiko tertinggal dari rata-rata bergerak dan pasar bergolak, yang dapat dikurangi dengan menambahkan indikator lain untuk penyaringan untuk meningkatkan kualitas sinyal.


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