Strategi Mengikuti Trend Purata Pergerakan Dwi


Tarikh penciptaan: 2023-09-18 21:57:00 Akhirnya diubah suai: 2023-09-18 21:57:00
Salin: 1 Bilangan klik: 646
1
fokus pada
1617
Pengikut

Gambaran keseluruhan

Strategi ini menggunakan gabungan purata bergerak cepat dan purata bergerak perlahan untuk menentukan arah trend, menghasilkan isyarat perdagangan apabila garis cepat menembusi garis perlahan, dan merupakan sistem perdagangan purata bergerak ganda.

Prinsip

Strategi ini menggunakan purata bergerak cepat yang lebih pendek dan purata bergerak perlahan yang lebih panjang.

MA perlahan digunakan untuk menentukan arah trend utama. Apabila harga berada di atas MA, ia dianggap sebagai trend naik; apabila harga berada di bawah MA, ia dianggap sebagai trend menurun.

Dalam trend menaik, jika MA cepat di atas MMA perlahan, menghasilkan isyarat beli; dalam trend menurun, jika MA cepat di bawah MMA perlahan, menghasilkan isyarat jual.

Selepas isyarat perdagangan dihasilkan, anda boleh memilih untuk menetapkan titik henti untuk terus mengesan henti.

Kelebihan

  1. Kombinasi MA cepat dan perlahan boleh mengesan trend dengan berkesan.

  2. MA pantas boleh menghasilkan isyarat dagangan yang lebih sensitif.

  3. MA perlahan untuk menghapuskan kebisingan pasaran dan mencegah penembusan palsu.

  4. Pelbagai algoritma MA boleh dipilih, seperti EMA, DEMA dan lain-lain.

  5. Anda boleh mengaktifkan strategi henti rugi untuk menjejaki henti rugi.

Risiko dan Penyelesaian

  1. MA mempunyai masalah kelewatan, yang boleh menyebabkan kelewatan isyarat. Parameter yang lebih sensitif boleh diuji.

  2. Titik kemusnahan mungkin terlalu dekat, menyebabkan kerosakan akibat penembusan.

  3. Tanpa mengambil kira jumlah transaksi, terdapat risiko harga yang dimanipulasi. Anda boleh menambah pengesahan jumlah transaksi.

  4. Hanya berdasarkan petunjuk mudah menghasilkan isyarat palsu. Faktor lain boleh ditambah untuk mengesahkan.

  5. Kesukaran pengoptimuman parameter. Anda boleh menggunakan pengoptimuman langkah atau algoritma genetik untuk mencari parameter yang optimum.

Optimum idea

  1. Uji parameter algoritma MA yang berbeza untuk mencari parameter optimum.

  2. Kajian untuk menyesuaikan purata bergerak untuk meningkatkan kepekaan.

  3. Menambah petunjuk atau faktor lain untuk mengoptimumkan penapisan isyarat.

  4. Menubuhkan mekanisme hentian kerugian dinamik untuk menjadikan hentian kerugian lebih fleksibel.

  5. Mengoptimumkan strategi pengurusan wang, seperti menyesuaikan kedudukan mengikut dinamik ATR.

ringkaskan

Strategi ini menggunakan trend penghakiman silang MA ganda untuk menghasilkan isyarat perdagangan, dan anda boleh menetapkan risiko mengehadkan kerugian. Logik perdagangannya mudah dan jelas, tetapi terdapat masalah seperti sukar memilih parameter. Anda boleh memperbaiki strategi dengan mengoptimumkan parameter, penapis indikator, dan strategi berhenti, dan sebagainya, untuk menjadikan strategi lebih stabil dan boleh dipercayai.

Kod 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)