Versi ekstrim dari Noro's Trend Moving Averages Strategy

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

img

Gambaran umum

Strategi ini menggunakan dua indikator rata-rata bergerak untuk mengidentifikasi arah tren dan peluang panjang/pendek. rata-rata bergerak yang lebih lambat (garis biru) digunakan untuk menentukan arah tren keseluruhan, sementara rata-rata bergerak yang lebih cepat (garis merah) dikombinasikan dengan saluran harga digunakan untuk menemukan peluang perdagangan.

Logika Strategi

  1. Hitung dua rata-rata bergerak - MA yang lebih lambat dengan periode 21 untuk menentukan tren keseluruhan, dan MA yang lebih cepat dengan periode 5 yang dikombinasikan dengan saluran harga untuk menemukan peluang perdagangan.

  2. Periksa apakah harga saat ini menembus saluran harga yang terbentuk pada periode sebelumnya.

  3. Hitung jumlah dan arah lilin baru-baru ini. Misalnya, beberapa lilin bearish berturut-turut dapat menandakan peluang panjang, sementara lilin bullish berturut-turut dapat menandakan peluang pendek. Jumlah lilin dapat dikonfigurasi melalui parameter Bars.

  4. Kombinasi semua faktor di atas untuk menghasilkan sinyal panjang / pendek. Sinyal dipicu ketika pergerakan harga sejajar dengan arah tren MA yang lebih lambat, MA cepat atau saluran harga menghasilkan sinyal, dan kondisi pergerakan lilin cocok.

Keuntungan

  1. Sistem rata-rata bergerak ganda secara efektif melacak arah tren.

  2. MA yang lebih cepat dan saluran harga yang dikombinasikan mendeteksi titik-titik awal untuk menangkap peluang perdagangan.

  3. Juga mempertimbangkan arah candlestick dan menghitung untuk menghindari terjebak oleh pembalikan pasar.

  4. Parameter MA yang dapat disesuaikan bekerja untuk produk dan kerangka waktu yang berbeda.

Risiko dan Pengurangan

  1. MAs ganda dapat menghasilkan sinyal palsu selama pasar sisi. dapat menambahkan osilator atau ATR untuk menghindari perdagangan pasar bergolak.

  2. Masih berisiko terjebak dalam pergerakan pasar yang luar biasa.

  3. Tidak mungkin untuk sepenuhnya menghindari pembalikan akan terus meningkatkan logika dan parameter untuk membuat strategi lebih kuat.

Peluang Peningkatan

  1. Tambahkan indikator pendukung seperti ADX, MACD untuk menghindari perdagangan yang salah di pasar yang bergolak.

  2. Perhitungan stop loss dinamis, misalnya berdasarkan ATR dan preferensi risiko.

  3. Optimasi parameter melalui pembelajaran mesin untuk kemampuan adaptif.

  4. Parameter penyesuaian yang tepat berdasarkan karakteristik instrumen, misalnya periode yang lebih pendek untuk kripto.

Kesimpulan

Secara keseluruhan strategi ini bekerja dengan sangat baik dalam melacak tren pasar, dengan peluang terobosan tambahan. Dengan peningkatan yang tepat dapat dibuat menjadi strategi kuantitas berkualitas tinggi yang layak secara komersial. Kami akan terus meningkatkannya untuk memperdagangkan lebih banyak pasar secara 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 banyak