Versi melampau Noro's Trend Moving Averages Strategi

Penulis:ChaoZhang, Tarikh: 2024-01-31 17:00:53
Tag:

img

Ringkasan

Strategi ini menggunakan dua penunjuk purata bergerak untuk mengenal pasti arah trend dan peluang panjang / pendek. purata bergerak yang lebih perlahan (garis biru) digunakan untuk menentukan arah trend keseluruhan, sementara purata bergerak yang lebih cepat (garis merah) digabungkan dengan saluran harga digunakan untuk menemui peluang perdagangan.

Logika Strategi

  1. Mengira dua purata bergerak - MA yang lebih perlahan dengan tempoh 21 untuk menentukan trend keseluruhan, dan MA yang lebih cepat dengan tempoh 5 yang digabungkan dengan saluran harga untuk mencari peluang perdagangan.

  2. Periksa sama ada harga semasa menembusi saluran harga yang terbentuk dalam tempoh sebelumnya.

  3. Mengira bilangan dan arah lilin baru-baru ini. Sebagai contoh, beberapa lilin bearish berturut-turut mungkin menandakan peluang yang panjang, sementara lilin bullish berturut-turut mungkin menandakan peluang yang pendek.

  4. Gabungkan semua faktor di atas untuk menjana isyarat panjang / pendek. Isyarat dicetuskan apabila pergerakan harga sejajar dengan arah trend MA yang lebih perlahan, MA atau saluran harga yang cepat menghasilkan isyarat, dan keadaan pergerakan lilin sepadan.

Kelebihan

  1. Sistem purata bergerak berganda secara berkesan mengesan arah trend.

  2. MA dan saluran harga yang lebih cepat digabungkan mengesan titik pecah awal untuk menangkap peluang perdagangan.

  3. Juga mempertimbangkan arah candlestick dan mengira untuk mengelakkan terperangkap oleh pembalikan pasaran.

  4. Parameter MA yang boleh disesuaikan berfungsi untuk produk dan jangka masa yang berbeza.

Risiko dan Pengurangan

  1. MAs berganda boleh menghasilkan isyarat palsu semasa pasaran sampingan. Boleh menambah osilator atau ATR untuk mengelakkan perdagangan pasaran bergolak.

  2. Masih ada risiko terperangkap dalam pergerakan pasaran yang luar biasa.

  3. Tidak mungkin untuk mengelakkan pembalikan sepenuhnya. akan terus meningkatkan logik dan parameter untuk menjadikan strategi lebih kukuh.

Peluang Peningkatan

  1. Tambah penunjuk sokongan seperti ADX, MACD untuk mengelakkan perdagangan yang salah di pasaran bergolak.

  2. Pengiraan stop loss dinamik, contohnya berdasarkan ATR dan keutamaan risiko.

  3. Pengoptimuman parameter melalui pembelajaran mesin untuk keupayaan penyesuaian.

  4. Parameter penyesuaian halus berdasarkan ciri instrumen, contohnya tempoh yang lebih pendek untuk crypto.

Kesimpulan

Secara keseluruhan strategi ini berfungsi dengan baik dalam mengesan pasaran trend, dengan peluang keluar tambahan. Dengan penambahbaikan yang betul, ia boleh menjadi strategi kuantiti berkualiti tinggi yang berdaya maju secara komersial. Kami akan terus memperbaikinya untuk berdagang lebih banyak pasaran dengan stabil.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.9 Extreme", shorttitle = "Trend MAs str 1.9 extreme", 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?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")

src = useohlc4 == true ? ohlc4 : 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

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

up2 = high < center and high < center2 and bar == -1 ? 1 : 0
dn2 = low > center and low > center2 and bar == 1 ? 0 : 0

//Lines
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 or (up2 == 1 and needex == true)
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