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.
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.
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
Tidak cocok untuk pasar dengan volatilitas tinggi dan pembalikan yang sering
Solusi: Tambahkan kondisi penyaringan untuk menghindari perdagangan di pasar osilasi
Ada beberapa risiko sinyal palsu
Solusi: Tambahkan indikator penyaringan lain untuk kombinasi untuk meningkatkan keandalan sinyal
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)