Tren Rata-rata Bergerak Ganda Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-09-18 21:57:00
Tag:

Gambaran umum

Strategi ini menggunakan rata-rata bergerak cepat dan lambat untuk mengidentifikasi arah tren dan menghasilkan sinyal ketika MA cepat melintasi MA lambat, menciptakan sistem MA ganda.

Prinsip-prinsip

Strategi ini menggunakan MA cepat yang lebih pendek dan MA lambat yang lebih lama.

Harga di atas MA adalah tren naik, harga di bawahnya adalah tren turun.

Dalam tren naik, sinyal panjang dihasilkan ketika MA cepat melintasi di atas MA lambat. Dalam tren turun, sinyal pendek ketika MA cepat melintasi di bawah MA lambat.

Setelah sinyal, trailing stop dapat diaktifkan secara opsional.

Keuntungan

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

  2. MA cepat menghasilkan sinyal perdagangan yang sensitif.

  3. MA lambat menyaring kebisingan mencegah kebocoran palsu.

  4. Berbagai jenis MA seperti EMA, DEMA dapat digunakan.

  5. Trailing stop loss dapat diaktifkan.

Risiko dan Pengurangan

  1. MA lag dapat menunda sinyal. parameter yang lebih sensitif dapat diuji.

  2. Stop loss mungkin terlalu ketat menyebabkan keluar prematur.

  3. Volume diabaikan, risiko manipulasi harga ada.

  4. Hanya indikator yang rentan terhadap sinyal palsu.

  5. Optimasi parameter sulit. Optimasi bertahap atau GA dapat menemukan parameter optimal.

Peluang Peningkatan

  1. Uji berbagai jenis MA dan parameter untuk hasil terbaik.

  2. Penelitian rata-rata bergerak adaptif untuk sensitivitas yang lebih baik.

  3. Tambahkan indikator atau faktor lain untuk penyaringan sinyal.

  4. Membangun berhenti dinamis untuk berhenti fleksibel.

  5. Mengoptimalkan manajemen uang seperti ukuran posisi dinamis dengan ATR.

Ringkasan

Strategi ini memperdagangkan crossover MA ganda untuk mengidentifikasi tren, dengan berhenti membatasi risiko. Logika sederhana dan jelas tetapi pemilihan parameter dan masalah lain ada. Peningkatan melalui optimasi, penyaringan, berhenti dapat meningkatkan ketahanan. Ini berfungsi sebagai sistem tren berikut garis dasar yang masuk akal.


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

Lebih banyak