NoroBands Momentum Position Strategi

Penulis:ChaoZhang, Tarikh: 2024-01-18 10:58:48
Tag:

img

Ringkasan

Strategi ini menggabungkan teori pita Noro dengan teknik kuantitatif untuk membentuk strategi pecah momentum. Ia menghasilkan isyarat perdagangan dengan mengira purata bergerak, RSI, pita, bar warna dan penunjuk lain untuk melaksanakan perdagangan pecah pita.

Logika Strategi

  1. Hitung band atas dan bawah menggunakan julat sebenar purata. Harga yang menembusi band atas menunjukkan isyarat panjang manakala menembusi band bawah memberikan isyarat pendek.
  2. Gunakan penunjuk RSI untuk menentukan zon overbought dan oversold. RSI di bawah 30 menunjukkan panjang manakala di atas 70 menunjukkan pendek.
  3. Pecahkan harga maksimum dan minimum menunjukkan arah momentum harga.
  4. Bar warna menunjukkan pasaran bullish atau bearish. Hijau bermaksud pasaran bull untuk jangka panjang manakala merah bermaksud pasaran bear untuk jangka pendek.
  5. Gabungkan purata bergerak untuk mengenal pasti perbezaan untuk isyarat perdagangan.

Kelebihan

  1. Gabungan pelbagai penunjuk meningkatkan ketepatan.
  2. Menggabungkan teori pita dan teknik kuantitatif menjadikan strategi lebih berkesan.
  3. Menggabungkan momentum breakout dan perdagangan pembalikan rata-rata memperluaskan ruang keuntungan.
  4. Kebolehluasan yang tinggi untuk menyesuaikan parameter mengikut pasaran.

Risiko

  1. Parameter memerlukan pengoptimuman dan ujian berterusan.
  2. Tidak bertindak balas tepat pada masanya kepada suis pendek panjang, menyebabkan kerugian mungkin.
  3. Frekuensi perdagangan yang tinggi, mudah dipengaruhi oleh yuran dan slippage.
  4. Parameter harus diselaraskan tepat pada masanya untuk menyesuaikan kitaran yang berbeza.

Pengoptimuman

  1. Pengesahan jangka masa berbilang untuk mencari kombinasi parameter terbaik.
  2. Tambah stop loss untuk mengurangkan kerugian tunggal.
  3. Pengurusan kedudukan yang lebih besar untuk meningkatkan kecekapan keuntungan.
  4. Gabungkan pembelajaran mendalam untuk pengoptimuman parameter automatik.

Ringkasan

Strategi ini menggabungkan penunjuk kuantitatif biasa untuk mencapai keuntungan yang berkesan melalui petunjuk momentum dan pembalikan purata. Ia juga menggunakan teori julat sebenar purata untuk mencari titik masuk yang munasabah. Contoh yang baik untuk menggabungkan teori dan teknik. Dengan pengoptimuman parameter dan peningkatan kawalan risiko, ia akan menjadi strategi kuantitatif yang cekap dan stabil.


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


//@version=2
strategy("Noro's Bands Strategy v1.5", shorttitle = "NoroBands str 1.5", overlay=true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, defval = true, title = "Use ColorBar")
usecb = input(true, defval = true, title = "Use CryptoBottom")
usersi = input(true, defval = true, title = "Use RSI")
usemm = input(true, defval = true, title = "Use min/max")
usepyr = input(true, defval = true, title = "Use pyramiding")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
needlo = input(false, defval = false, title = "Show Locomotive")
needpy = input(false, defval = false, title = "Show Avg.price line")
src = close

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

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

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

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

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

//Signals
up = trend == 1 and ((close < open or color == false) or close < hd) and (min < min[1] or usemm == false) and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) and (max > max[1] or usemm == false) and (close > strategy.position_avg_price or usepyr == false or strategy.position_size >= 0) ? 1 : 0 
up2 = close < open and lencb > sma * 3 and min < min[1] and fastrsi < 10 and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0 //CryptoBottom
//dn2 = close > open and len > sma * 3 and max > max[1] and fastrsi > 90 ? 1 : 0 //CryptoBottom
up3 = fastrsi < 5 and usersi == true and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
//dn3 = fastrsi > 95 and usersi = true ? 1 : 0

//Avg Price
colpy = needpy == false ? na : black
plot(strategy.position_avg_price, color = colpy)

up4 = close < strategy.position_avg_price and usepyr == true and strategy.position_size >= 0 ? 1 : 0 
dn4 = close > strategy.position_avg_price and usepyr == true and strategy.position_size <= 0 ? 1 : 0 

//Locomotive
uploco = trend == 1 and close < open and min < min[1] and close < center ? 1 : 0
plotarrow(needlo == true and uploco == 1 ? 1 : 0, colorup = black, colordown = black, transp = 0)

longCondition = up == 1 or (up2 == 1 and usecb == true) or (up3 == 1 and usersi == true) or up4 == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1 or dn4 == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

Lebih lanjut