Strategi Dagangan Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-09-21 20:34:43
Tag:

Ringkasan

Strategi ini menggunakan gabungan purata bergerak pantas dan perlahan untuk menentukan arah trend dan menangkap trend jangka menengah hingga panjang untuk perdagangan trend. Ia pergi lama apabila MA pantas melintasi di atas MA perlahan, dan pergi pendek apabila MA pantas melintasi di bawah MA perlahan. Ini adalah strategi trend yang biasa.

Logika Strategi

Strategi ini terutamanya bergantung kepada salib emas dan salib kematian purata bergerak untuk menentukan trend pasaran. Khususnya, ia menggunakan MA cepat 5 tempoh dan MA perlahan 21 tempoh.

Apabila MA pantas melintasi di atas MA perlahan, ia menandakan trend menaik di pasaran, dan strategi akan pergi panjang pada pembukaan bar seterusnya.

Di samping itu, parameter bars ditetapkan untuk menapis pecah palsu. Nilai lalai adalah 2, yang bermaksud MA pantas perlu ditutup di atas MA perlahan selama 2 bar berturut-turut sebelum mencetuskan isyarat panjang. Ini mengelakkan pecah palsu dengan berkesan.

Untuk perdagangan kripto, strategi ini juga menggabungkan logik nilai melampau - hanya apabila kedua-dua MA cepat dan perlahan mencapai kawasan melampau isyarat perdagangan akan dicetuskan. Ini seterusnya mengelakkan isyarat palsu.

Peraturan keluar adalah mudah dan langsung - kedudukan dekat apabila stop loss dipukul.

Kelebihan

  • Sistem MA berganda dapat mengesan trend dengan berkesan
  • MA cepat bertindak balas dengan cepat kepada perubahan trend
  • MA perlahan menentukan arah keseluruhan
  • Parameter bars menapis beberapa pecah palsu
  • Penjaga nilai melampau mengelakkan isyarat palsu sporadik di sekitar titik kritikal
  • Memindahkan stop loss menguruskan risiko

Risiko

  • Sistem MA berganda cenderung kehilangan sekitar pembalikan trend
  • Stop loss bergerak boleh berhenti sebelum masa
  • Penapis bars mungkin terlepas beberapa isyarat yang sah
  • Penjaga nilai yang melampau kadang-kadang terlepas entri yang baik
  • Strategi ini berfungsi dengan lebih baik di pasaran tren yang kuat

Risiko boleh dikurangkan dengan:

  • Mengoptimumkan parameter bars
  • Menambah penapis lain seperti MACD
  • Penyesuaian paras stop loss untuk mengelakkan stop out awal
  • Mempertimbangkan kemasukan semula

Arahan pengoptimuman

Strategi ini boleh ditingkatkan dari aspek berikut:

  1. Penyesuaian parameter MA

Uji lebih banyak kombinasi MA untuk mencari parameter optimum untuk pasaran semasa, contohnya MA cepat 10 tempoh dan MA perlahan 50 tempoh.

  1. Menambah penunjuk lain

Uji tambah MACD, KDJ dan penunjuk lain untuk menetapkan peraturan kemasukan yang lebih ketat dan mengelakkan isyarat palsu.

  1. Mengoptimumkan entri

Pendaftaran MA berganda mudah semasa boleh dipertingkatkan:

  • Masukkan panjang hanya jika MACDDIFF juga melintasi di atas 0 apabila MA pantas melintasi di atas MA perlahan
  • Masukkan panjang hanya jika KDJ memberikan salib emas apabila MA pantas melintasi di atas MA perlahan
  1. Mengoptimumkan hentian

Uji mekanisme hentian lain seperti hentian belakang untuk mengelakkan hentian awal.

  1. Menambah entri semula

Membolehkan kemasukan semula selepas berhenti, untuk mengelakkan kehilangan trend.

Ringkasan

Ringkasnya, strategi trend berikut asas ini mempunyai logik yang mudah dan mudah - menggunakan dua MA untuk arah trend dan bergerak berhenti untuk pengurusan risiko. Pro mudah difahami, boleh mendapat keuntungan daripada trend, dan menguruskan risiko. Tetapi batasan juga ada, seperti isyarat buruk semasa penyatuan, berhenti awal, dan lain-lain. Penyesuaian langsung dan pengoptimuman diperlukan, seperti menambahkan penapis, menyesuaikan berhenti, untuk menjadikannya dapat disesuaikan dengan persekitaran pasaran yang berbeza. Sebagai strategi perdagangan trend pengenalan, ia sesuai untuk pemula untuk belajar dan menerapkan. Tetapi keterbatasannya harus diperhatikan, dan strategi yang lebih maju harus diterokai. Hanya melalui peningkatan berterusan seseorang dapat mencapai keuntungan yang mampan di pasaran yang sentiasa berubah.


/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.3", shorttitle = "Trend MAs str 2.3", 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, %")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, 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?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

src = close

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

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[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

//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)

//Signals
up1 = trend == 1 and (low < center2 or usefastsma == false) and redbars == 1
dn1 = trend == -1 and (high > center2 or usefastsma == false) and greenbars == 1
up2 = high < center and high < center2 and bar == -1 and needex
dn2 = low > center and low > center2 and bar == 1 and needex
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0

//Lines
plot(center2, color = red, linewidth = 3, transp = 0, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")

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

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

if up1 or up2 or up3
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.exit("Stop Long", "Long", stop = stoplong)

if dn1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.exit("Stop Short", "Short", stop = stopshort)
    
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    

Lebih lanjut