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

img

Gambaran umum

Strategi ini menggunakan beberapa indikator seperti Bollinger Bands, saluran KC, dan warna lilin untuk menentukan pemotongan dan pelepasan pasar, dan menggabungkan penilaian tren pendirian berdasarkan moving average untuk melakukan transaksi ketika pembalikan tren terjadi.

Prinsip Strategi

  1. Menghitung Bollinger Bands. rel tengah Bollinger Bands adalah rata-rata bergerak sederhana dari harga penutupan N-hari, rel atas adalah rel tengah + M kali volatilitas rentang nyata N-hari saluran KC, dan rel bawah adalah rel tengah - M kali volatilitas rentang nyata N-hari saluran KC.

  2. Ketika rel atas Bollinger Band berada di bawah rel atas saluran KC dan rel bawah Bollinger Band berada di atas rel bawah saluran KC, itu adalah sebuah penyekatan.

  3. Menghitung tren pendirian. Ambil rata-rata harga penutupan N hari dari harga tertinggi dan terendah dari N hari sebagai input, menghitung regresi linier N hari, dan nilainya lebih besar dari 0 menunjukkan tren pendirian naik, dan kurang dari 0 menunjukkan tren pendirian turun.

  4. Ketika pendirian naik, garis yang pendek dan pelepasan adalah sinyal panjang; ketika pendirian jatuh, garis yin pendek dan memeras adalah sinyal pendek.

Keuntungan Strategi

  1. Penghakiman tren pendirian, perdagangan sesuai dengan tren.

  2. Stop loss otomatis untuk mengendalikan risiko. Ketika harga menyentuh garis stop loss, secara otomatis menutup posisi untuk stop loss.

Risiko Strategi

  1. Pengaturan parameter yang tidak tepat untuk Bollinger Bands dan saluran KC dapat mengakibatkan penilaian yang salah tentang pemampatan dan pelepasan.

  2. Pertimbangan tren perusahaan tertinggal, yang mungkin melewatkan titik-titik pembalikan tren.

  3. Kejadian mendadak menyebabkan pergerakan besar yang tidak dapat dihentikan, dengan risiko kerugian yang cukup besar.

Arah Optimasi Strategi

  1. Menggabungkan lebih banyak indikator teknis untuk meningkatkan akurasi sinyal posisi pembukaan.

  2. Mengoptimalkan parameter siklus dari rata-rata bergerak untuk membuat lebih baik menangkap tren baru.

  3. Tambahkan indikator volume perdagangan untuk menghindari pecah palsu. seperti indikator gelombang energi, akumulasi / distribusi, dll.

  4. Parameter optimasi AI, pencarian menyeluruh dan kombinasi parameter optimal dicari.

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 banyak