
Die Strategie basiert auf dem Brin-Channel-Indikator, kombiniert mit einer adaptiven Moving Average, um eine präzise Beurteilung und Verfolgung von Trends zu ermöglichen. Durch die dynamische Anpassung der Parameter ermöglicht die Strategie die Anpassung an verschiedene Sorten und Marktumgebungen, mit einer höheren Stabilität und Anpassungsfähigkeit.
Die Strategie besteht hauptsächlich aus folgenden Teilen:
Berechnen Sie einen adaptiven Moving Average. Hier wird die lineare Regression-Indikator verwendet, um die lineare Regressionskurve innerhalb einer bestimmten Periode als Moving Average zu berechnen.
Berechnen Sie die Auf- und Abfahrt des Brin-Kanals. Hier werden die Brin-Kanal-Auf- und Abfahrten mit Hilfe des automatisch angepassten ATR-Indikators berechnet.
Beurteilen Sie den Zeitpunkt des Kaufs und Verkaufs. Beurteilen Sie die Richtung des Trends und den Zeitpunkt des Kaufs und Verkaufs anhand der Frage, ob der Preis den Brin-Kanal auf und ab durchbrochen hat. Wenn der Preis von unten nach oben durchbrochen hat, gilt dies als Kaufsignal.
Setzen Sie einen Stop-Loss-Stopp. Setzen Sie einen Stop-Loss-Stopp mit einer festen Punktzahl, um das Risiko zu kontrollieren, und setzen Sie einen Stop-Stopp mit einem Stop-Loss-Stopp, der nach einer festen Punktzahl verfolgt wird, um die Trends zu maximieren, während Sie Ihre Gewinne garantieren.
In Kombination mit der Rücktestsphase wurde die Start-End-Zeit der Rücktests eingestellt, um die Strategie für die Testoptimierung zu optimieren.
Die Anpassung der Parameter ist so konzipiert, dass die Strategie an die Veränderungen des Marktes angepasst werden kann.
Breakout-Erkenntnisse sind klar. Die Brin-Kanal-Auf-und-Abbruch-Erkenntnisse werden verwendet, um Trendwendepunkte zu ermitteln, wobei die Biosignal-Erkenntnisse klar sind.
Die Stop-Loss-Stopp-Einstellung ist vernünftig. Die Verwendung von festen Stop-Loss-Kontrollrisiken und die Verfolgung von Stopps ermöglicht die Maximierung der Trendgewinne.
Validierung der Effektivität der Retrospektive. Setzen Sie eine Retrospektivezeit, um die Strategie zu überprüfen und sicherzustellen, dass sie auch in der historischen Praxis wirksam ist.
Einfach zu verstehen und zu implementieren. Die Strategie ist klar und verständlich, der Code ist prägnant, leicht zu verstehen und in der Praxis zu bedienen.
Der Brinkanal benötigt Parameteroptimierung. Die Brinkanal-Kanalbandbreite und -Rücklaufzyklus müssen für verschiedene Sorten und Marktumstände optimiert werden. Wenn die Optimierung nicht korrekt ist, treten mehrere Fehlsignale oder häufige False Triggers auf.
Die Rückmeldungszeit ist möglicherweise nicht ausreichend. Die Rückmeldung setzt nur den Bereich der jüngsten Rückmeldung fest und kann keine längeren historischen Ereignisse abdecken, um die Strategie-Stabilität umfassend zu überprüfen.
Es besteht die Gefahr einer Überanpassung. Die aktuellen Rückmessparameter sind möglicherweise nur für die jüngste Zeit optimiert, was die Gefahr einer historischen Überanpassung darstellt.
Die Stop-Loss-Zahl muss beurteilt werden. Die aktuelle Stop-Loss-Zahl ist zu klein und kann zu empfindlich sein, um von kleinen Erschütterungen gestoppt zu werden. Die richtige Stop-Loss-Zahl muss beurteilt werden.
Fehlen von quantitativen Validierungsindikatoren. Derzeit werden Handelssignale nur anhand von Graphik-Breakthroughs beurteilt. Es wurden keine quantitativen Indikatoren eingeführt, um die Effektivität von Signalen zu überprüfen.
Einführung von mehr Adaptionsindikatoren. Verschiedene Kombinationen von Adaptionsmittellinien und Adaptionskanalindikatoren können getestet werden, um robustere Trendverfolgungsstrategien zu entwickeln.
Optimierung der Parameter-Einstellungen. Die optimale Kombination aus Brin-Kanal- und Gleichenparameter kann durch systematischere Methoden wie genetische Algorithmen gefunden werden.
Erweiterung der Rückmesszeiten. Erweiterung der Rückmesszeiten, Stabilität der Parameteroptimierung. Einführung von Gleitpunkten, Gebühren und anderen Transaktionskosten für eine realere Rückmessung.
Einführung von Quantifizierungs-Filterregeln. Es werden Quantifizierungsregeln wie Transaktionsvolumen-Breakthroughs und MACD-Pillar-Gefälle eingestellt, um falsche Signal-Breakthroughs im Brinch-Kanal zu vermeiden.
Optimierung der Stop-Loss-Mechanismen. Beurteilung der verschiedenen Fix-Stop-Punkt-Einstellungen und der verschiedenen Stop-Loss-Tracking-Methoden, um die optimale Stop-Loss-Methode zu finden.
Praxis-Verifizierung. Die Strategie nach der Optimierung in der Praxis ausführen, die Ertragsrücknahme aufzeichnen und die stabile Zuverlässigkeit der Strategie weiter verbessern.
Die Strategie hat eine klare Gesamtkonzeption, die die Richtung des Trends durch die Verwendung von Brin-Kanälen und die Erfassung von Durchbruchsignalen ermittelt und die Gesamtrichtung des Trends durch eine bewegliche Gleichung bestimmt. Mit einer gewissen Optimierung kann sie zu einer stabileren und zuverlässigeren Trendverfolgungsstrategie werden.
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Linear Regression (Backtest / Trailing Stop)",overlay=true)
close_price = close[0]
len = input(40)
linear_reg = linreg(close_price, len, 0)
calculationToPlotAverageMeanLine=linear_reg
useUpperDeviation = input(true, "Upper Deviation", bool)
useLowerDeviation = input(true, "Lower Deviation", bool)
ratio2=input(defval=2,title=" Ratio 2")
avg=atr(len)
r2=avg*ratio2
top=linear_reg+r2
bott=linear_reg-r2
calculationToPlotUpperLine=top
calculationToPlotLowerLine=bott
plotUpperDeviationLine = plot(not useUpperDeviation ? na : calculationToPlotUpperLine, color=color(blue,0))
plotAverageMeanLine = plot(calculationToPlotAverageMeanLine, color=color(olive,0))
plotLowererDeviationLine = plot(not useLowerDeviation ? na : calculationToPlotLowerLine, color=color(red,0))
fill(plotUpperDeviationLine, plotAverageMeanLine, color=color(blue,85))
fill(plotLowererDeviationLine, plotAverageMeanLine, color=color(red,85))
//
length = input(title="linear Length", defval=40, minval=1)
multiplier = input(title="linear Deviation", type=float, defval=2, minval=1)
overbought = input(title="Overbought", defval=1, minval=1)
oversold = input(title="Oversold", defval=0, minval=1)
custom_timeframe = input(title="Use another Timeframe?", type=bool, defval=false)
highTimeFrame = input(title="Select The Timeframe", defval="60")
res1 = custom_timeframe ? highTimeFrame : timeframe.period
fixedSL = input(title="SL Activation", defval=70)
trailSL = input(title="SL Trigger", defval=10)
fixedTP = input(title="TP Activation", defval=50)
trailTP = input(title="TP Trigger", defval=10)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2019, title = "From Year", minval = 2015)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2015)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
smabasis = linreg(close_price, length, 0)
stdev = stdev(close, length)
cierre = request.security(syminfo.tickerid, res1, close, false)
alta = request.security(syminfo.tickerid, res1, high, false)
baja = request.security(syminfo.tickerid, res1, low, false)
basis1 = request.security(syminfo.tickerid, res1, smabasis, false)
stdevb = request.security(syminfo.tickerid, res1, stdev, false)
dev = multiplier * stdevb // stdev(cierre, length)
upper = basis1 + dev
lower = basis1 - dev
bbr = (cierre - lower)/(upper - lower)
// plot(bbr)
// // MARCA LAS RESISTENCIAS
pintarojo = 0.0
pintarojo := nz(pintarojo[1])
pintarojo := bbr[1] > overbought and bbr < overbought ? alta[1] : nz(pintarojo[1])
p = plot(pintarojo, color = red, style=circles, linewidth=2)
// // MARCA LOS SOPORTES
pintaverde = 0.0
pintaverde := nz(pintaverde[1])
pintaverde := bbr[1] < oversold and bbr > oversold ? baja[1] : nz(pintaverde[1])
g = plot(pintaverde, color = black, style=circles, linewidth=2)
zz= crossover(pintaverde,pintaverde[1]) or crossunder(pintaverde,pintaverde[1])
kp= crossover(pintarojo,pintarojo[1]) or crossunder(pintarojo,pintarojo[1])
plotshape(zz, title="buy", style=shape.triangleup,location=location.belowbar, color=green, transp=0, size=size.small)
plotshape(kp, title="sell", style=shape.triangledown,location=location.abovebar, color=red, transp=0, size=size.small)
strategy.entry("BUY", strategy.long, qty=10, oca_name="BUY", when=zz and window())
strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.entry("SELL", strategy.short, qty=10, oca_name="SELL", when=kp and window())
strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=trailSL, trail_points=fixedTP)