Strategi Pengesanan Trend Purata Bergerak Berganda

Penulis:ChaoZhang, Tarikh: 2024-01-24 11:28:57
Tag:

img

Ringkasan

Strategi Pengesanan Trend Purata Bergerak Berganda adalah strategi yang menggunakan gabungan purata bergerak pantas dan perlahan untuk menentukan trend pasaran, dan menghasilkan isyarat perdagangan apabila arah trend berubah.

Logika Strategi

Strategi Pengesanan Trend Purata Bergerak Berganda menggunakan dua purata bergerak - purata bergerak pantas (5 tempoh) dan purata bergerak perlahan (21 tempoh). MA pantas digunakan untuk menjana isyarat perdagangan manakala MA perlahan digunakan untuk menentukan arah trend pasaran. Apabila MA pantas melintasi di atas MA perlahan, isyarat beli dihasilkan. Apabila MA pantas melintasi di bawah MA perlahan, isyarat jual dihasilkan.

Strategi ini juga menggunakan penunjuk saluran harga untuk membantu menentukan trend. Saluran harga ditentukan oleh purata bergerak harga tertinggi dan terendah. Apabila harga menembusi saluran, ia menunjukkan pembalikan trend. Strategi ini menggunakan dua saluran harga dengan tempoh masing-masing 21 dan 5, yang sepadan dengan tempoh MA.

Apabila menentukan isyarat beli dan jual, strategi memerlukan lilin merah / hijau berturut-turut muncul (boleh disesuaikan pengguna) sebagai keadaan penapis tambahan.

Ringkasnya, logik untuk menentukan trend dalam strategi ini adalah:

  1. Gunakan saluran harga untuk menentukan arah trend jangka masa yang lebih tinggi
  2. Menggunakan MA pantas untuk menentukan trend jangka pendek dan menjana isyarat perdagangan
  3. Gabungkan penapis lilin tambahan untuk mengelakkan isyarat yang salah semasa penyatuan

Dengan menghakimi trend merentasi jangka masa, bunyi bising pasaran dapat ditapis dengan berkesan dan arah trend disahkan.

Analisis Kelebihan

Strategi Pengesanan Trend Purata Bergerak Berganda mempunyai kelebihan berikut:

  1. Sistem MA berganda dapat mengenal pasti trend secara berkesan dan menentukan arah trend utama
  2. MA pantas menjana isyarat perdagangan untuk menangkap pembalikan trend tepat pada masanya
  3. Saluran harga menentukan trend jangka masa yang lebih tinggi untuk mengelakkan ditipu oleh bunyi pasaran jangka pendek
  4. Penapis lilin merah/hijau mengurangkan kebarangkalian isyarat yang salah semasa penyatuan
  5. Parameter yang boleh diselaraskan membolehkan pengoptimuman untuk pasaran yang berbeza untuk meningkatkan ketahanan
  6. Strategi stop loss boleh ditambah untuk mengawal risiko setiap perdagangan dengan berkesan

Kesimpulannya, strategi ini mempunyai kestabilan keseluruhan yang agak baik dan berprestasi baik di pasaran dengan trend yang kuat.

Analisis Risiko

Strategi Pengesanan Trend Purata Bergerak Berganda juga mempunyai beberapa risiko, terutamanya:

  1. Semasa pengukuhan yang berpanjangan, ia cenderung untuk menghasilkan isyarat yang salah dan kerugian kecil berturut-turut
  2. Tetapan parameter yang tidak betul boleh menjangkiti isyarat perdagangan dan kehilangan peluang masuk terbaik
  3. Tanpa stop loss yang berkesan, risiko setiap perdagangan sukar dikawal

Langkah-langkah yang sepadan untuk mengurangkan risiko termasuk:

  1. Sesuaikan tetapan penapis lilin merah/hijau untuk mengurangkan kekerapan perdagangan di pasaran konsolidasi
  2. Mengoptimumkan parameter MA pantas untuk memastikan penjanaan isyarat dagangan yang tepat pada masanya
  3. Tambah pergerakan atau peratusan stop loss kepada kawalan ketat setiap kerugian perdagangan

Arahan pengoptimuman

Terdapat ruang untuk pengoptimuman lagi strategi, terutamanya dalam arah seperti:

  1. Menggabungkan penunjuk turun naik seperti ATR untuk menyesuaikan stop loss secara automatik
  2. Menggunakan pembelajaran mesin untuk mengoptimumkan parameter secara automatik
  3. Tambah modul rangkaian saraf untuk menentukan arah trend
  4. Membina sistem ensemble yang menggabungkan pelbagai penunjuk dan penapis

Arahan pengoptimuman ini dapat meningkatkan kestabilan, kebolehsesuaian dan tahap kecerdasan strategi.

Kesimpulan

Kesimpulannya, strategi Pengesanan Trend Purata Bergerak Berganda adalah strategi trend yang agak kukuh. Ia menggabungkan purata bergerak dan saluran harga untuk menentukan arah trend dan kekuatan, menjana isyarat perdagangan dengan MA yang cepat. Penapis lilin tambahan juga membantu mengelakkan isyarat yang salah. Parameter yang boleh disesuaikan membolehkan penyesuaian dengan persekitaran pasaran yang berbeza. Terdapat juga ruang yang cukup untuk pengoptimuman lanjut untuk membina strategi perdagangan automatik yang boleh dipercayai dan pintar.


/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.8", shorttitle = "Trend MAs str 1.8", 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, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
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?")
needarr = input(false, defval = false, title = "Need entry arrows?")

src = useohlc4 == true ? ohlc4 : close
fastsma = ema(src, 5)

//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
//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]

trend1 = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend1[1]
trend2 = low > center2 and low[1] > center2[1] ? 1 : high < center2 and high[1] < center2[1] ? -1 : trend1[1]
trend = trend1 == 1 and trend2 == 1 ? 1 : trend2 == -1 and trend2 == -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
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0

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

//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 lanjut