Strategi Mengikuti Tren Berdasarkan Persilangan Rata-rata Pergerakan


Tanggal Pembuatan: 2024-02-23 12:21:40 Akhirnya memodifikasi: 2024-02-23 12:21:40
menyalin: 4 Jumlah klik: 619
1
fokus pada
1617
Pengikut

Strategi Mengikuti Tren Berdasarkan Persilangan Rata-rata Pergerakan

Ringkasan

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.

Prinsip Strategi

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.

Keunggulan Strategis

  1. Mendukung kombinasi dari 7 jenis moving average yang berbeda, memberikan fleksibilitas untuk menyesuaikan dengan kondisi pasar
  2. Parameter dari dua rata-rata bergerak yang dapat disesuaikan untuk menilai tren jangka panjang dan jangka pendek
  3. Aturan penilaian sinyal strategi sederhana, jelas, dan mudah dimengerti
  4. Mendukung perdagangan over and under, memungkinkan untuk melakukan trend tracking trading

Risiko dan Solusi

  1. 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

  2. Tidak berlaku untuk pasar dengan volatilitas tinggi dan sering berbalik Solusinya: Tambahkan kondisi penyaringan, hindari perdagangan di tengah gejolak

  3. Ada beberapa risiko sinyal palsu Solusi: Menambahkan indikator penyaringan lainnya dalam kombinasi untuk meningkatkan keandalan sinyal

Arah optimasi

  1. Mengoptimalkan kombinasi siklus rata-rata bergerak, masing-masing menguji pengaruh parameter siklus panjang dan pendek pada tingkat keuntungan strategi
  2. Pengujian kinerja dari berbagai jenis moving average untuk menemukan algoritma moving average terbaik
  3. Menambahkan indikator seperti volume VARIABLE atau Brinks untuk kombinasi, meningkatkan kualitas sinyal
  4. Mengoptimalkan strategi manajemen posisi, memperbaiki cara untuk menetapkan posisi persentase_of_equity

Meringkaskan

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.

Kode Sumber Strategi
/*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)