Bollinger Band Trend Chaser

Penulis:ChaoZhang, Tarikh: 2023-11-22 16:51:27
Tag:

img

Ringkasan

Idea strategi ini adalah untuk menjadi strategi risiko rendah pada saham trend (atau mana-mana pasaran trend lain), yang bertujuan untuk mencapai pengeluaran minimum (contohnya pada masa penulisan AAPL hanya mempunyai ~ 1.36% drawdown, FB ~ 1.93% drawdown dan SPY adalah 0.80% drawdown dan semuanya kekal menguntungkan).

Prinsip

Strategi ini menggunakan purata bergerak 200 hari, Bollinger Band Custom, TSI dengan purata bergerak bertimbang 52 tempoh dan kekuatan ADX.

Isyarat beli diberikan apabila dagangan di atas purata bergerak 200 + 5 lilin telah ditutup di atas Bollinger kustom atas + TSI positif + ADX di atas 20.

Kelebihan

Kelebihan strategi ini adalah pengambilan yang rendah dan risiko minimum. Ia sesuai untuk kebanyakan saham trend dengan operasi berisiko rendah. Menurut data ujian, pulangan tinggi dan AAPL hanya mempunyai pengambilan maksimum 1.36% dan FB mempunyai pengambilan maksimum 1.93% semasa tempoh ujian.

Dengan menggabungkan beberapa penunjuk teknikal seperti Bollinger Bands, garis MA, penunjuk TSI, dan menggunakan ADX untuk menentukan kekuatan trend, ia membeli apabila trend meningkat, cuba menangkap potensi kenaikan jangka menengah hingga panjang saham trend.

Ia juga mengandungi strategi stop loss yang mengunci keuntungan dengan menghentikan kerugian dengan tepat pada masanya apabila penunjuk TSI mengubah arah, mengawal risiko dengan berkesan.

Analisis Risiko

Risiko utama yang dihadapi oleh strategi ini adalah dua:

  1. Risiko peristiwa angsa hitam: Beberapa peristiwa angsa hitam boleh menyebabkan saham merosot dengan mendadak dan tidak dapat dihentikan kerugian.

  2. Apabila stok bergerak dari trend ke pengukuhan, mungkin terdapat penarikan yang lebih besar.

Untuk risiko 1, mekanisme stop loss yang lebih ketat boleh ditetapkan, atau berhenti campur tangan manual boleh digunakan. Untuk risiko 2, lebih banyak faktor penilaian boleh digabungkan untuk mengesan akhir trend, seperti meningkatkan penunjuk jumlah dagangan.

Arahan pengoptimuman

Strategi ini juga boleh dioptimumkan dalam aspek berikut:

  1. Tambah strategi stop loss untuk menetapkan titik stop loss yang lebih tepat untuk mengawal risiko dengan lebih baik.

  2. Mengoptimumkan parameter purata bergerak untuk menguji kestabilan kombinasi parameter yang berbeza.

  3. Meningkatkan penunjuk momentum untuk menentukan permulaan dan akhir trend dengan lebih tepat.

  4. Uji parameter kitaran masa yang lebih lama untuk sesuai dengan operasi jangka panjang.

Kesimpulan

Strategi ini menentukan peluang pembelian dengan menggunakan ADX untuk menentukan kekuatan trend, penunjuk TSI untuk menentukan arah trend, Bollinger Bands untuk menentukan penembusan, dan purata bergerak untuk menentukan trend jangka panjang. Pengesahan pelbagai penunjuk dapat mengawal risiko dengan berkesan. Strategi ini sesuai untuk mengesan jangka panjang saham trend dengan penarikan rendah dan pulangan yang tinggi. Tetapi ia masih perlu dioptimumkan untuk risiko untuk menjadikan strategi lebih mantap.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gary_trades
//This script has been designed to be used on trending stocks as a low risk trade with minimal drawdown, utilising 200 Moving Average, Custom Bollinger Band, TSI with weighted moving average and ADX strength. 
//Backtest dates are set to 2010 - 2020 and all other filters (moving average, ADX, TSI , Bollinger Band) are not locked so they can be user amended if desired. 
//Buy signal is given when trading above the 200 moving average + 5 candles have closed above the upper custom Bollinger + the TSI is positive + ADX is above 20.
//As back testing proved that this traded better only in tends then some Sell/Short conditions have been removed and this focueses on  Long orders.
//Only requires 2 additional lines of code to add shorting orders.
//Close for either long or short trades is signaled once the TSI crosses in the opposite direction indicating change in trend strength or if stop loss is trggered.
//Further optimization could be achieved by adding a stop loss.
//NOTE: This only shows the lower indicators however for visualization you can use my script "CUSTOM BOLLINGER WITH SMA", which is the upper indicators in this stratergy.
//------------
//@version=4
strategy(shorttitle="Trend Chaser", title="ADX_TSI_Bol Band Trend Chaser", overlay=false, pyramiding=0,
 currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=10,
 initial_capital=10000, commission_value=0.1)
//------------
//Custom Bollinger Band
length = input(20, minval=1)
src = input(close, title="Source")
mult = input(0.382, minval=0.001, maxval=50, title="StdDev")
basis = sma(src, length)
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)
plot(basis, "Basis", color=color.gray, offset = offset, display=display.none)
p1 = plot(upper, "Upper", color=color.gray, offset = offset, display=display.none)
p2 = plot(lower, "Lower", color=color.gray, offset = offset, display=display.none)
fill(p1, p2, title = "Background", color=#787B86, transp=85)
//------------
//Moving Average
MAlen = input(200, minval=1, title="Length")
MAout = sma(src, MAlen)
plot(MAout, color=color.black, title="MA", offset=offset, linewidth=2, display=display.none)
//------------
//True Strength WMA
TSlong = input(title="Long Length", type=input.integer, defval=25)
TSshort = input(title="Short Length", type=input.integer, defval=13)
TSsignal = input(title="Signal Length", type=input.integer, defval=52)
double_smooth(src, TSlong, TSshort) =>
    fist_smooth = wma(src, TSlong)
    wma(fist_smooth, TSshort)
price = close     
pc = change(price)
double_smoothed_pc = double_smooth(pc, TSlong, TSshort)
double_smoothed_abs_pc = double_smooth(abs(pc), TSlong, TSshort)
tsi_value = 100 * (double_smoothed_pc / double_smoothed_abs_pc)
tsi2 = wma(tsi_value, TSsignal)
plot(tsi_value, color=color.blue)
plot(wma(tsi_value, TSsignal), color=color.red)
hline(0, title="Zero")
//------------
//ADX
adxlen = input(13, title="ADX Smoothing")
dilen = input(13, title="DI Length")
keyLevel = input(20, title="Keylevel for ADX")
dirmov(len) =>
	up = change(high)
	down = -change(low)
	plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
    minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
	truerange = rma(tr, len)
	plus = fixnan(100 * rma(plusDM, len) / truerange)
	minus = fixnan(100 * rma(minusDM, len) / truerange)
	[plus, minus]

adx(dilen, adxlen) =>
	[plus, minus] = dirmov(dilen)
	sum = plus + minus
	adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)

sig = adx(dilen, adxlen)

plot(sig, color=color.black, title="ADX", style=plot.style_histogram, transp=40)
plot(20, color=color.green, title="ADX Keyline", linewidth=1)
//------------
//Identify Triggers

//Back Test Range
start = timestamp("America/New_York", 2010, 1, 1, 9,30)
end = timestamp("America/New_York", 2030, 7, 1, 0, 0)

//Custom Bollinger Band
Long1 = close > upper[5] and close[5] > upper [6]
Short1 = close < lower[5] and close[5] < lower [6]

//Moving Average
Long2 = close >= MAout[1]
Short2 = close <= MAout[1]

//True Strength WMA
Long3 = tsi_value > tsi2  
Short3 = tsi_value < tsi2

//ADX
ADXkey = adx(dilen, adxlen) > 20 and adx(dilen, adxlen) < 100

//Buy
Buy = Long1 and Long2 and Long3 and ADXkey
CloseLong = crossunder(tsi_value,tsi2)

//Short
Sell = Short1 and Short2 and Short3 and ADXkey
CloseShort = crossover(tsi_value,tsi2)
//------------
//Entry and Exit
if time >= start and time <= end
    strategy.entry("Long", true, when = Buy)

strategy.close("Long", when = CloseLong)


Lebih lanjut