Strategi Mengikuti Tren Rata-rata Pergerakan Ganda


Tanggal Pembuatan: 2023-09-18 21:57:00 Akhirnya memodifikasi: 2023-09-18 21:57:00
menyalin: 1 Jumlah klik: 646
1
fokus pada
1617
Pengikut

Ringkasan

Strategi ini menggunakan kombinasi dari rata-rata bergerak cepat dan rata-rata bergerak lambat untuk menentukan arah tren, menghasilkan sinyal perdagangan ketika garis cepat menembus garis lambat, yang merupakan sistem perdagangan rata-rata bergerak ganda.

Prinsip

Strategi ini menggunakan rata-rata bergerak cepat dengan durasi yang lebih pendek dan rata-rata bergerak lambat dengan durasi yang lebih panjang.

MA lambat digunakan untuk menentukan arah tren utama. Ketika harga berada di atas MA, dinilai sebagai tren naik; Ketika harga berada di bawah MA, dinilai sebagai tren turun.

Dalam tren naik, jika MA cepat di atas melewati MA lambat, menghasilkan sinyal beli; dalam tren turun, jika MA cepat di bawah melewati MA lambat, menghasilkan sinyal jual.

Setelah sinyal perdagangan muncul, Anda dapat memilih untuk mengatur stop loss untuk terus melacak stop loss.

Keunggulan

  1. Kombinasi MA cepat dan lambat dapat mengidentifikasi tren secara efektif.

  2. MA cepat dapat menghasilkan sinyal perdagangan yang lebih sensitif.

  3. MA perlahan-lahan menghapus kebisingan pasar untuk mencegah terobosan palsu.

  4. Ada banyak pilihan algoritma MA, seperti EMA, DEMA, dll.

  5. Strategi Stop Loss dapat diaktifkan untuk melacak Stop Loss.

Risiko dan Solusi

  1. MA memiliki masalah lag, yang dapat menyebabkan sinyal lag. Parameter yang lebih sensitif dapat diuji.

  2. Stop loss mungkin terlalu dekat, menyebabkan kerusakan akibat penembusan. Harus ada ruang untuk berfluktuasi.

  3. Tidak mempertimbangkan volume transaksi, ada risiko manipulasi harga. Anda dapat menambahkan konfirmasi volume transaksi.

  4. Hanya berdasarkan indikator yang mudah menghasilkan sinyal palsu. Dapat menambahkan faktor lain untuk dikonfirmasi.

  5. Kesulitan optimasi parameter. Anda dapat menggunakan optimasi langkah demi langkah atau algoritma genetik untuk mencari parameter optimal.

Optimalkan Pikiran

  1. Uji parameter algoritma MA yang berbeda untuk mencari parameter optimal.

  2. Adaptasi rata-rata bergerak untuk meningkatkan sensitivitas telah dipelajari.

  3. Menambahkan indikator atau faktor lain untuk mengoptimalkan filter sinyal.

  4. Menciptakan mekanisme stop loss yang dinamis, sehingga stop loss lebih fleksibel.

  5. Strategi pengelolaan dana yang dioptimalkan, seperti penyesuaian posisi berdasarkan dinamika ATR.

Meringkaskan

Strategi ini menggunakan dua MA cross-judgment trend untuk menghasilkan sinyal perdagangan, dapat mengatur stop loss limiting risk. Logika perdagangan yang sederhana dan jelas, tetapi ada kesulitan dalam memilih parameter. Dapat diperbaiki dengan pengoptimalan parameter, penyaringan indikator, dan strategi stop loss, sehingga strategi lebih stabil dan dapat diandalkan.

Kode Sumber Strategi
/*backtest
start: 2023-08-18 00:00:00
end: 2023-09-17 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.7", shorttitle = "Trend MAs str 1.7", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
type = input(7, defval = 7, minval = 1, maxval = 7, title = "Type of Slow MA")
src = input(close, defval = close, title = "Source of Slow MA")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")

fastsma = ema(src, fastlen)

//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 = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Trend
ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Signals
min = min(open, close)
max = max(open, close)
up = trend == 1 and (low < fastsma or usefastsma == false) and redbars == 1 ? 1 : 0
dn = trend == -1 and (high > fastsma or usefastsma == false) and greenbars == 1 ? 1 : 0

//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(ma, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)