Strategi perdagangan rata-rata bergerak

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

Gambaran umum

Strategi ini menggunakan kombinasi rata-rata bergerak cepat dan lambat untuk menentukan arah tren dan menangkap tren jangka menengah hingga panjang untuk perdagangan tren. Ini panjang ketika MA cepat melintasi di atas MA lambat, dan pendek ketika MA cepat melintasi di bawah MA lambat.

Logika Strategi

Strategi ini terutama mengandalkan salib emas dan salib kematian rata-rata bergerak untuk menentukan tren pasar. Secara khusus, ia menggunakan MA cepat 5 periode dan MA lambat 21 periode.

Ketika MA cepat melintasi di atas MA lambat, itu menandakan tren naik di pasar, dan strategi akan pergi panjang pada pembukaan bar berikutnya.

Selain itu, parameter bars diatur untuk menyaring keluar false breakout. Nilai default adalah 2, yang berarti MA cepat perlu menutup di atas MA lambat selama 2 bar berturut-turut sebelum memicu sinyal panjang. Ini menghindari false breakout secara efektif.

Untuk perdagangan kripto, strategi ini juga menggabungkan logika nilai ekstrim - hanya ketika MAs cepat dan lambat mencapai area ekstrim sinyal perdagangan akan dipicu.

Aturan keluar sederhana dan langsung - posisi dekat ketika stop loss dipukul.

Keuntungan

  • Sistem MA ganda dapat melacak tren secara efektif
  • MA cepat bereaksi cepat terhadap perubahan tren
  • MA lambat menentukan arah keseluruhan
  • Parameter bars menyaring beberapa false breakout
  • Penjaga nilai ekstrim menghindari sinyal palsu sporadis di sekitar titik kritis
  • Memindahkan stop loss mengelola risiko

Risiko

  • Sistem MA ganda cenderung kehilangan sekitar pembalikan tren
  • Stop loss bergerak mungkin berhenti terlalu dini
  • Filter bars mungkin melewatkan beberapa sinyal yang valid
  • Penjaga nilai ekstrim kadang-kadang melewatkan entri yang baik
  • Strategi ini bekerja lebih baik di pasar tren yang kuat

Risiko dapat dikurangi dengan:

  • Mengoptimalkan parameter bars
  • Menambahkan filter lain seperti MACD
  • Pengaturan tingkat stop loss untuk menghindari stop out prematur
  • Mempertimbangkan masuk kembali

Arahan Optimasi

Strategi dapat ditingkatkan dari aspek berikut:

  1. Pengaturan parameter MA

Uji lebih banyak kombinasi MA untuk menemukan parameter optimal untuk pasar saat ini, misalnya MA cepat 10 periode dan MA lambat 50 periode.

  1. Menambahkan indikator lain

Uji menambahkan MACD, KDJ dan indikator lainnya untuk menetapkan aturan masuk yang lebih ketat dan menghindari sinyal palsu.

  1. Mengoptimalkan entri

Pendaftaran MA ganda sederhana saat ini dapat ditingkatkan:

  • Masukkan panjang hanya jika MACDDIFF juga melintasi di atas 0 ketika MA cepat melintasi di atas MA lambat
  • Masukkan panjang hanya jika KDJ memberikan golden cross ketika MA cepat melintasi di atas MA lambat
  1. Mengoptimalkan pemberhentian

Uji mekanisme pemberhentian lainnya seperti pemberhentian trailing untuk menghindari pemberhentian prematur.

  1. Menambahkan entri ulang

Mengizinkan masuk kembali setelah berhenti, untuk menghindari kehilangan tren.

Ringkasan

Singkatnya, strategi trend-following dasar ini memiliki logika yang sederhana dan langsung - menggunakan dual MAs untuk arah tren dan bergerak berhenti untuk manajemen risiko. Pro mudah dipahami, dapat mendapatkan keuntungan dari tren, dan mengelola risiko. Tetapi keterbatasan juga ada, seperti sinyal buruk selama konsolidasi, stop out prematur, dll. Tuning langsung dan optimalisasi diperlukan, seperti menambahkan filter, menyesuaikan stop, untuk membuatnya dapat beradaptasi dengan lingkungan pasar yang berbeda. Sebagai strategi perdagangan tren pengantar, ini cocok untuk pemula untuk belajar dan menerapkan. Tetapi keterbatasannya harus dicatat, dan strategi yang lebih maju harus dieksplorasi. Hanya melalui perbaikan berkelanjutan seseorang dapat mencapai keuntungan berkelanjutan di pasar yang selalu 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 banyak