Penulis:ChaoZhang, Tarikh: 2024-01-25 12:34:59
Tag:

img

Ringkasan

Strategi ini menggunakan pelbagai penunjuk seperti Bollinger Bands, saluran KC, dan warna lilin untuk menentukan pemampatan dan pelepasan pasaran, dan menggabungkan penilaian trend penubuhan berdasarkan purata bergerak untuk membuat transaksi apabila pembalikan trend berlaku.

Prinsip Strategi

  1. Mengira Bollinger Bands. Rel tengah Bollinger Bands adalah purata bergerak mudah harga penutupan N-hari, rel atas adalah rel tengah + M kali turun naik julat sebenar N-hari saluran KC, dan rel bawah adalah rel tengah - M kali turun naik julat sebenar N-hari saluran KC.

  2. Isyarat perdagangan. Apabila penubuhan naik, garis yang pendek dan pelepasan adalah isyarat panjang; apabila penubuhan jatuh, garis yin pendek dan memerah adalah isyarat pendek.

Kelebihan Strategi

  1. Penghakiman trend penubuhan, perdagangan mengikut trend.

Risiko Strategi

  1. Penghakiman trend pertubuhan tertinggal, yang mungkin terlepas titik pembalikan trend.

  2. Kejadian tiba-tiba menyebabkan pergerakan besar yang tidak dapat dihentikan, dengan risiko kerugian yang besar.

Kaedah pengoptimuman: Sesuaikan parameter Bollinger Band dan saluran KC, gunakan ADX dan penunjuk lain untuk membantu menilai; Mengemas kini kitaran purata bergerak penubuhan dalam masa untuk mengurangkan kelewatan; Tambah zon penyangga apabila menetapkan garis stop loss.

Arahan Pengoptimuman Strategi

  1. Menggabungkan lebih banyak penunjuk teknikal untuk meningkatkan ketepatan isyarat kedudukan pembukaan.

  2. Mengoptimumkan parameter kitaran purata bergerak penubuhan untuk menjadikannya lebih baik menangkap trend baru.

  3. Tambah penunjuk jumlah dagangan untuk mengelakkan pecah palsu.

  4. Penghakiman pelbagai jangka masa membezakan antara isyarat jangka sederhana dan jangka panjang dan jangka pendek.

Ringkasan


/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2017

//@version=2
strategy(shorttitle = "Squeeze str 1.1", title="Noro's Squeeze Momentum Strategy v1.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
lev = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
length = input(20, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")
useTrueRange = true
mode2 = input(true, defval = true, title = "Mode 2")
usecolor = input(true, defval = true, title = "Use color of candle")
usebody = input(true, defval = true, title = "Use EMA Body")
needbg = input(false, defval = false, title = "Show trend background")
fromyear = input(2018, defval = 2018, 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")

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

bcolor = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray 

trend = val > 0 ? 1 : val < 0 ? -1 : 0

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

//Body
body = abs(close - open)
abody = sma(body, 10) / 3

//Indicator
bcol = iff( val > 0, iff( val > nz(val[1]), lime, green), iff( val < nz(val[1]), red, maroon))
scol = noSqz ? blue : sqzOn ? black : gray 
plot(val, color=bcol, style=histogram, linewidth=4)
plot(0, color=scol, style=cross, linewidth=2)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = trend == 1 and (bar == -1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false
dn1 = trend == -1 and (bar == 1 or usecolor == false) and (body > abody or usebody == false) and mode2 == false

up2 = trend == 1 and val < val[1] and mode2 
dn2 = trend == -1 and val > val[1] and mode2

exit = (strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price) and mode2

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * lev : lot[1]

if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if exit
    strategy.close_all()

Lebih lanjut