Bollinger-Band-Trendverfolger

Schriftsteller:ChaoZhang, Datum: 2023-11-22 16:51:27
Tags:

img

Übersicht

Die Idee dieser Strategie besteht darin, eine risikoarme Strategie für Trendaktien (oder andere Trendmärkte) zu verfolgen, die darauf abzielt, eine minimale Auslastung zu erzielen (zum Beispiel hatte AAPL zum Zeitpunkt des Schreibens nur ~ 1,36% Auslastung, FB ~ 1,93% Auslastung und das SPY war 0,80% Auslastung und alle blieben profitabel).

Grundsätze

Die Strategie nutzt den 200-Tage-Beweglichen Durchschnitt, ein Custom Bollinger Band, einen TSI mit 52 zeitlich gewichteten Beweglichen Durchschnitt und eine ADX-Stärke.

Das Kaufsignal wird gegeben, wenn der Handel über dem gleitenden Durchschnitt von 200 + 5 Kerzen über dem oberen Bollinger-Custom-Grad geschlossen haben + der TSI ist positiv + der ADX ist über 20.

Vorteile

Die Vorteile dieser Strategie bestehen darin, dass sie eine geringe Auslastung und ein minimales Risiko aufweist. Sie eignet sich für die meisten Trendbestände mit einem geringen Risiko. Nach den Testdaten ist die Rendite hoch und AAPL erzielte im Testzeitraum nur eine maximale Auslastung von 1,36% und FB eine maximale Auslastung von 1,93%.

Durch die Kombination mehrerer technischer Indikatoren wie Bollinger-Bänder, MA-Linien, TSI-Indikatoren und die Verwendung von ADX zur Bestimmung der Stärke des Trends kauft sie, wenn der Trend nach oben geht, um das mittelfristige bis langfristige Aufwärtspotenzial der Trending-Aktien zu erfassen.

Sie enthält auch eine Stop-Loss-Strategie, die den Gewinn durch rechtzeitige Verlustrückgängigmachung bei Änderung der Richtung des TSI-Indikators sichert und somit die Risiken wirksam kontrolliert.

Risikoanalyse

Die Hauptrisiken dieser Strategie bestehen in zweierlei Hinsicht:

  1. Einige schwarze Schwanereignisse können dazu führen, dass die Aktien stark sinken und die Verluste nicht aufgehalten werden können.

  2. Wenn sich die Aktie vom Trend zur Konsolidierung bewegt, kann es zu größeren Abzügen kommen.

Für Risiko 1 können strengere Stop-Loss-Mechanismen festgelegt oder manuelle Interventionsstopps verwendet werden. Für Risiko 2 können mehr Urteilsfaktoren kombiniert werden, um das Ende des Trends zu erkennen, wie z. B. die Erhöhung des Handelsvolumenindikators.

Optimierungsrichtlinien

Die Strategie kann auch in folgenden Aspekten optimiert werden:

  1. Hinzufügen einer Stop-Loss-Strategie, um genauere Stop-Loss-Punkte festzulegen, um Risiken besser zu kontrollieren.

  2. Optimieren der gleitenden Durchschnittsparameter, um die Stabilität verschiedener Parameterkombinationen zu testen.

  3. Erhöhen Sie die Dynamikindikatoren, um den Beginn und das Ende der Trends genauer zu bestimmen.

  4. Test längerfristige Zyklusparameter für längerfristige Operationen.

Schlussfolgerung

Diese Strategie bestimmt Kaufmöglichkeiten, indem sie ADX zur Bestimmung der Trendstärke, TSI-Indikatoren zur Bestimmung der Trendrichtung, Bollinger-Bänder zur Bestimmung von Ausbrüchen und gleitenden Durchschnitten zur Bestimmung langfristiger Trends verwendet. Die Verifizierung mehrerer Indikatoren kann Risiken effektiv kontrollieren. Diese Strategie eignet sich für die langfristige Verfolgung von Trending-Aktien mit niedrigen Drawdowns und hohen Renditen.


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


Mehr