Bollinger Band Trend Chaser

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

img

Gambaran umum

Ide dari strategi ini adalah menjadi strategi berisiko rendah pada saham tren (atau pasar tren lainnya), yang bertujuan untuk mencapai penarikan minimal (misalnya pada saat penulisan AAPL hanya memiliki ~ 1,36% penarikan, FB ~ 1,93% penarikan dan SPY adalah 0,80% penarikan dan semuanya tetap menguntungkan).

Prinsip

Strategi ini menggunakan 200 hari Moving Average, Custom Bollinger Band, TSI dengan 52 periode weighted moving average dan kekuatan ADX.

Sinyal beli diberikan ketika perdagangan di atas rata-rata bergerak 200 + 5 lilin telah ditutup di atas atas Bollinger kustom atas + TSI positif + ADX di atas 20.

Keuntungan

Keuntungan dari strategi ini adalah penarikan rendah dan risiko minimum. Ini cocok untuk sebagian besar saham tren dengan operasi berisiko rendah. Menurut data uji, pengembalian tinggi dan AAPL hanya memiliki penarikan maksimum 1,36% dan FB memiliki penarikan maksimum 1,93% selama periode uji.

Dengan menggabungkan beberapa indikator teknis seperti Bollinger Bands, garis MA, indikator TSI, dan menggunakan ADX untuk menentukan kekuatan tren, ia membeli ketika tren naik, mencoba untuk menangkap potensi kenaikan jangka menengah hingga panjang dari saham tren.

Ini juga berisi strategi stop loss yang mengunci keuntungan dengan menghentikan kerugian secara tepat waktu ketika indikator TSI mengubah arah, secara efektif mengendalikan risiko.

Analisis Risiko

Risiko utama yang dihadapi oleh strategi ini adalah dua:

  1. Beberapa peristiwa black swan dapat menyebabkan saham jatuh tajam dan tidak dapat dihentikan kerugian.

  2. Ketika saham bergerak dari tren ke konsolidasi, mungkin ada penarikan yang lebih besar.

Untuk risiko 1, mekanisme stop loss yang lebih ketat dapat ditetapkan, atau stop intervensi manual dapat digunakan. Untuk risiko 2, lebih banyak faktor penilaian dapat dikombinasikan untuk mendeteksi akhir tren, seperti meningkatkan indikator volume perdagangan.

Arahan Optimasi

Strategi ini juga dapat dioptimalkan dalam aspek berikut:

  1. Tambahkan strategi stop loss untuk menetapkan titik stop loss yang lebih tepat untuk mengontrol risiko dengan lebih baik.

  2. Mengoptimalkan parameter rata-rata bergerak untuk menguji stabilitas kombinasi parameter yang berbeda.

  3. Tingkatkan indikator momentum untuk lebih akurat menentukan awal dan akhir tren.

  4. Uji parameter siklus waktu yang lebih lama agar sesuai dengan operasi jangka panjang.

Kesimpulan

Strategi ini menentukan peluang pembelian dengan menggunakan ADX untuk menentukan kekuatan tren, indikator TSI untuk menentukan arah tren, Bollinger Bands untuk menentukan breakout, dan moving average untuk menentukan tren jangka panjang. Verifikasi beberapa indikator dapat secara efektif mengendalikan risiko. Strategi ini cocok untuk pelacakan jangka panjang saham tren dengan drawdown rendah dan pengembalian tinggi.


/*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 banyak