
Dies ist eine Reversal-Shock-Trend-Strategie, die auf dem Brin-Band-Kanal basiert. Sie nutzt den Brin-Band-Ober-Kanal als Trendbeurteilung und sucht nach Umkehrmöglichkeiten, wenn der Preis sich an die Kanalgrenze nähert.
Die Strategie verwendet den Brin-Band als Haupttechnikindikator. Der Brin-Band besteht aus einem n-Tage-Moving-Average und seinen oberen und unteren Schwankungsbereichen, wobei der Brin-Band auf der Bahn = n-Tage-Moving-Average + m × n-Tage-Standarddifferenz und der Brin-Band unter der Bahn = n-Tage-Moving-Average - m × n-Tage-Standarddifferenz ist, wobei n und m die Parameter sind.
Wenn der Preis nahe an der Oberbahn ist, bedeutet dies, dass er sich im Aufwärtstrend befindet, aber möglicherweise eine Umkehrung erreicht. Wenn der Preis nahe an der Unterbahn ist, bedeutet dies, dass er sich im Abwärtstrend befindet, aber möglicherweise eine Umkehrung erreicht. Wenn er die Bollinger Band effektiv durchbricht, kann er eine Umkehrung beginnen.
Die spezifischen Handelsregeln für diese Strategie lauten wie folgt:
Wenn der Schlusskurs größer ist als der Brin-Band-Rail, wird ein Plus eingegeben. Wenn der Schlusskurs kleiner ist als der Brin-Band-Rail, wird ein Brin-Band-Rail eingegeben.
Der Stop-Loss wird mit dem n-Tage-Moving-Average signalisiert. Der Stop-Loss wird ausgeschaltet, wenn der Mehrfach-Schlusskurs die n-Tage-Mittellinie unterbricht. Der Stop-Loss wird ausgeschaltet, wenn der Leer-Schlusskurs die n-Tage-Mittellinie überbricht.
Es handelt sich dabei um ein festes Transaktionsvolumen mit einer festen Anzahl von Transaktionen.
Ein Fixed-Ratio-Fondsmanagement, das eine feste Gewinn- und Verlustquote und eine Anpassung der Auftragsbreite vorsieht. Erhöhen Sie Ihre Positionen mit einer festen Marge, wenn Sie mit einer festen Gewinn- und Verlustquote profitieren, und verringern Sie Ihre Positionen, wenn Sie Verluste verursachen.
Diese Strategie hat folgende Vorteile:
Benutzen Sie die Brin-Band-Kanäle, um die Richtung des Trends zu bestimmen, eine Strategie zum Gegenhandel zu verwenden, zu Zeiten einzutreten, in denen sich der Preis umkehren kann, um die meisten Schwankungen zu vermeiden und die Gewinnquote zu erhöhen.
Der Moving Average ist ein zuverlässiges Stop-Loss-Signal, das einen Großteil der Gewinne abschließt.
Die Strategie des festen Volumens ist einfach und ohne komplizierte Berechnungen.
Die Strategie der Fixed-Ratio-Finanzverwaltung ermöglicht die Erweiterung der Erträge durch Positionsanpassung und gleichzeitig die Kontrolle des Risikos.
Die Strategie birgt einige Risiken:
Die Wahrscheinlichkeit, dass ein Brin-Band-Urteil ein falsches Signal erzeugt, ist vorhanden, und es ist möglich, dass ein Einzelschaden im Trend umgekehrt wird.
Der Rückstand des Moving Averages kann dazu führen, dass die Stopps nicht ausreichend sind.
Das Problem ist, dass die Positionen zu groß und zu klein sind, da der feste Handelsvolumen die Position nicht an die Marktbedingungen anpassen kann.
Die Fixed-Rate-Fundmanagement-Methode erweitert die Positionsbreite erheblich und kann zu einer Verlustvergrößerung führen.
Gegenmaßnahmen: Optimierung der Brin-Band-Parameter zur Verbesserung der Signalgenauigkeit; Trendbeurteilung in Verbindung mit anderen Indikatoren; angemessene Verkleinerung der Größe der festen Positionen; Verringerung der Positionsanpassungsbreite für die Verwaltung von FPV-Fonds.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Optimierung von Brin-Band-Parametern, z. B. Anpassung von n- und m-Werten, um die Genauigkeit der Brin-Band-Gang-Beschlüsse zu verbessern.
Hinzufügen anderer Indikatoren wie MACD, KD usw., um zu vermeiden, dass Brin falsche Signale bringt.
Die Anpassung des festen Handelsvolumens an das dynamische Handelsvolumen und die flexible Anpassung der Positionen an die Marktbedingungen.
Verringerung der Positionsanpassungsbreite bei der Festverzinsung und Optimierung der Kapitalkurve.
Um das Risiko weiter zu kontrollieren, sollten Sie Stop-Loss-Strategien hinzufügen, wie z. B. Moving Stop, Interval Break Stop.
Optimierung der Parameter, automatische Optimierung der Parameterkombinationen, Suche nach den besten Parametern zur Optimierung der Strategie.
Die Strategie insgesamt ist eine eher typische Brin-Band-Umkehrstrategie. Sie nutzt die Brin-Band, um Trendwendepunkte zu ermitteln, und kombiniert mit einem Moving Average-Satz, Stop-Loss-System, festen Handelsvolumen und festen Rate-Finanzmanagement-Risikokontrollen. Im Vergleich zu der herkömmlichen Brin-Band-Strategie kann die Strategie als Umkehrstrategie theoretisch partielle Erschütterungen vermeiden und die Gewinnwahrscheinlichkeit verbessern.
/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
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/
// © gsanson66
//This strategy uses the well-known Bollinger Bands Indicator
//@version=5
strategy("BOLLINGER BANDS BACKTESTING", shorttitle="BB BACKTESTING", overlay=true, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=950, commission_type=strategy.commission.percent, commission_value=0.18)
//----------------------------------------FUNCTIONS---------------------------------------//
//@function Displays text passed to `txt` when called.
debugLabel(txt, color) =>
label.new(bar_index, high, text = txt, color=color, style = label.style_label_lower_right, textcolor = color.black, size = size.small)
//@function which looks if the close date of the current bar falls inside the date range
inBacktestPeriod(start, end) => (time >= start) and (time <= end)
//---------------------------------------USER INPUTS--------------------------------------//
//Technical parameters
bbLength = input.int(defval=20, minval=1, title="BB Length", group="Technical Parameters")
mult = input.float(defval=2, minval=0.1, title="Standard Deviation Multipler", group="Technical Parameters")
smaLength = input.int(defval=20, minval=1, title="SMA Exit Signal Length", group="Technical Parameters")
//Money Management
fixedRatio = input.int(defval=400, minval=1, title="Fixed Ratio Value ($)", group="Money Management")
increasingOrderAmount = input.int(defval=200, minval=1, title="Increasing Order Amount ($)", group="Money Management")
//Backtesting period
startDate = input(title="Start Date", defval=timestamp("1 Jan 2020 00:00:00"), group="Backtesting Period")
endDate = input(title="End Date", defval=timestamp("1 July 2024 00:00:00"), group="Backtesting Period")
//----------------------------------VARIABLES INITIALISATION-----------------------------//
strategy.initial_capital = 50000
//Exit SMA
smaExit = ta.sma(close, smaLength)
//BB Calculation
basis = ta.sma(close, bbLength)
dev = mult * ta.stdev(close, bbLength)
upperBB = basis + dev
lowerBB = basis - dev
//Money management
equity = strategy.equity - strategy.openprofit
var float capital_ref = strategy.initial_capital
var float cashOrder = strategy.initial_capital * 0.95
//Backtesting period
bool inRange = na
//------------------------------CHECKING SOME CONDITIONS ON EACH SCRIPT EXECUTION-------------------------------//
//Checking if the date belong to the range
inRange := true
//Checking performances of the strategy
if equity > capital_ref + fixedRatio
spread = (equity - capital_ref)/fixedRatio
nb_level = int(spread)
increasingOrder = nb_level * increasingOrderAmount
cashOrder := cashOrder + increasingOrder
capital_ref := capital_ref + nb_level*fixedRatio
if equity < capital_ref - fixedRatio
spread = (capital_ref - equity)/fixedRatio
nb_level = int(spread)
decreasingOrder = nb_level * increasingOrderAmount
cashOrder := cashOrder - decreasingOrder
capital_ref := capital_ref - nb_level*fixedRatio
//Checking if we close all trades in case where we exit the backtesting period
if strategy.position_size!=0 and not inRange
strategy.close_all()
debugLabel("END OF BACKTESTING PERIOD : we close the trade", color=color.rgb(116, 116, 116))
//-----------------------------------EXIT SIGNAL------------------------------//
if strategy.position_size > 0 and close < smaExit
strategy.close("Long")
if strategy.position_size < 0 and close > smaExit
strategy.close("Short")
//----------------------------------LONG/SHORT CONDITION---------------------------//
//Long Condition
if close > upperBB and inRange
qty = cashOrder/close
strategy.entry("Long", strategy.long, qty)
//Short Condition
if close < lowerBB and inRange
qty = cashOrder/close
strategy.entry("Short", strategy.short, qty)
//---------------------------------PLOTTING ELEMENT----------------------------------//
plot(smaExit, color=color.orange)
upperBBPlot = plot(upperBB, color=color.blue)
lowerBBPlot = plot(lowerBB, color=color.blue)
fill(upperBBPlot, lowerBBPlot, title = "Background", color=strategy.position_size>0 ? color.rgb(0, 255, 0, 90) : strategy.position_size<0 ? color.rgb(255, 0, 0, 90) : color.rgb(33, 150, 243, 95))