
Strategi ini melakukan perdagangan pelacakan tren dengan menentukan arah tren harga dengan menghitung moving averages dari dua set parameter yang berbeda dan membandingkannya secara silang, sehingga memungkinkan perdagangan pelacakan tren. Ketika moving averages yang cepat menembus moving averages yang lambat dari bawah, ini dianggap sebagai sinyal bullish. Ketika moving averages yang cepat menembus moving averages yang lambat dari atas, ini dianggap sebagai sinyal bullish.
Strategi ini membandingkan moving averages dengan dua set parameter yang berbeda, yang pertama adalah yang ditetapkan oleh len1 dan type1, dan yang kedua adalah yang ditetapkan oleh len2 dan type2. Len1 dan len2 mewakili panjang siklus dari dua moving average, dan type1 dan type2 mewakili jenis algoritma dari moving average.
Ketika rata-rata bergerak cepat dari bawah menembus rata-rata bergerak lambat membentuk garpu emas, dinilai sebagai sinyal bullish; Ketika rata-rata bergerak cepat dari atas menembus rata-rata bergerak lambat membentuk garpu mati, dinilai sebagai sinyal bearish.
Bila sinyal bullish dipicu, jika parameter needlong adalah true, maka lakukan plus sesuai dengan jumlah atau persentase posisi default_qty_value_of_equity; bila sinyal bearish dipicu, jika parameter needshort adalah true, maka lakukan nol sesuai dengan jumlah atau persentase posisi default_qty_value_of_equity.
Rata-rata bergerak memiliki keterlambatan dan mungkin kehilangan titik balik harga Solusi: Mengurangi siklus rata-rata bergerak secara tepat, atau digunakan dalam kombinasi dengan indikator lain
Tidak berlaku untuk pasar dengan volatilitas tinggi dan sering berbalik Solusinya: Tambahkan kondisi penyaringan, hindari perdagangan di tengah gejolak
Ada beberapa risiko sinyal palsu Solusi: Menambahkan indikator penyaringan lainnya dalam kombinasi untuk meningkatkan keandalan sinyal
Strategi ini menilai tren harga dengan membandingkan persilangan dua rata-rata bergerak, dan melakukan operasi bullish-bullish yang sesuai, sehingga dapat menangkap dan melacak tren. Keuntungan dari strategi ini adalah bahwa aturan sinyal sederhana dan jelas, parameter dapat disesuaikan, aplikasi yang kuat, dapat disesuaikan secara optimal untuk berbagai lingkungan pasar. Perlu diperhatikan untuk mencegah risiko keterlambatan rata-rata bergerak dan situasi yang bergolak, dapat disaring untuk meningkatkan kualitas sinyal dengan menambahkan indikator lain.
/*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)