
Die Strategie nutzt drei technische Indikatoren, die die Richtung des aktuellen Trends bestimmen, die Brin-Band, die Kentner-Kanal und die Anpassung an relativ starke Indikatoren, in Kombination mit dem Parabol-SAR-Indikator. Die Strategie erzeugt ein Handelssignal, wenn die Ergebnisse der drei Indikatoren übereinstimmen. Die Strategie entscheidet hauptsächlich über die Richtung des Trends, tritt rechtzeitig ein, wenn sich der Trend ändert, und zielt auf einen Gewinn ab.
Die Strategie verwendet eine Kombination aus drei technischen Indikatoren, um aktuelle Trends zu beurteilen:
SQUEEZE MOMENTUM INDICATOR: Berechnung der Brin-Band- und Kentner-Gate, die bei Überlagerung eine Kompression erzeugen, um eine bevorstehende Trendänderung zu signalisieren. Der Indikator kehrt in den Kompressionszustand und die Schräglage der linearen Rückkehrkurve zurück.
RSI VOLUME WEIGHTED: Der RSI, der mit Volumen gewichtet ist, wird berechnet, wobei die mittlere Linie als Überkauf und Überverkauf gilt. Der Indikator betont die Veränderung des Volumens.
Parallax-Linien-Verlust ((SAR): Beurteilung der Beziehung zwischen dem aktuellen Preis und der Position des Parallax-Linien-SAR, wobei der SAR über dem Preis nach unten geht und der SAR unter dem Preis nach oben geht.
Die Strategie verwendet die Brin-Band, um die Richtung des Trends zu bestimmen, die Kentner Channel Refine, der RSI, um den Überkauf und den Überverkauf zu beurteilen, um eine Umkehrmöglichkeit zu finden, und die SAR, um die Eintrittszeit zu bestimmen. Die spezifische Logik ist wie folgt:
Berechnung der Brin-Band, Kenter-Gate, Squiz-Indikator. Die Squiz Komprimierung geht in die Vorbereitungsphase.
Der RSI wird mit einem gewogenen Volumen berechnet. Der RSI ist höher als die mittlere Linie und niedriger als die mittlere.
Berechnung der Parallellinie SAR. Der SAR ist unterhalb des Preises bullish und oberhalb des Preises bearish.
Zusammenfassung der drei oben genannten Indikatoren: Wenn der Squeeze komprimiert ist, erzeugt der RSI ein mehrköpfiges Signal, wenn der RSI über der Mittellinie liegt und der SAR unterhalb des Preises ist; wenn der Squeeze komprimiert ist, erzeugt der RSI unter der Mittellinie und der SAR oberhalb des Preises ein Hohes Signal.
Beurteilen Sie die Ergebnisse der drei Indikatoren der vorherigen K-Linie, wenn ein Signal erzeugt wird, und erzeugen Sie ein Einstiegssignal, wenn es im Gegensatz zum aktuellen Signal erzeugt wird.
Nach der Einfahrt setzt man eine Stop-Loss-Sperre ein und verfolgt den Stop-Loss.
Diese Strategie hat folgende Vorteile:
Der Multi-Indikator-Kombination-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs-Bewertungs
Die Logik des Indikators ist einfach, klar und verständlich.
Mit Hilfe von Multi-Meter-Bestätigung kann ein falscher Durchbruch gefiltert werden.
Ein Stop-Loss-Stopp-Mechanismus ist installiert, um Gewinne zu sichern und Risiken zu kontrollieren.
Die Rückmeldungen sind ausreichend und zuverlässig.
Die Strategie birgt auch einige Risiken:
Die Logik der Einfahrt ist ähnlich wie bei der Einfahrt mit mehreren oder leeren Köpfen, wobei möglicherweise gleichzeitig ein Rückwärtssignal ausgegeben wird, das eine Filterung erfordert.
Alle drei Kennzahlen sind parametrisch optimiert und könnten zu gut zusammenpassen.
Es kann zu häufig gehandelt werden, um die Anzahl der Positionen zu kontrollieren.
Die Stop-Loss-Einstellungen können zu nahe sein und leicht zu durchbrechen sein.
Die entsprechende Lösung:
Die Zunahme der Indikatoren führt zu einer kontinuierlichen Zyklusbestimmung und vermeidet Signalschwankungen.
Verwenden Sie die Walk-Forward-Analyse, um die Parameter anzupassen und eine Überpassung zu verhindern.
Pyramiden-Größe, um die Anzahl der Einzelländer zu steuern.
Verschiedene Stopp-Bereiche testen und Stopp-Positionen optimieren.
Die Strategie kann in folgenden Richtungen optimiert werden:
Optimierung der Parameter der Indikatoren zur Steigerung der Parameterstabilität.
Positionskontrolllogik, z. B. Größe, Größe, Durchschnitt usw. wird hinzugefügt.
Verschiedene Stop-Methoden, wie beispielsweise Schwankungsstop, Linearstop und Nullposition, werden getestet.
Erweiterung der Geldmanagement-Funktionen, wie z. B. Festplatzierungen, Festbetriebsraten usw.
Dynamische Ein- und Ausstiege in Kombination mit maschinellen Lernalgorithmen.
Erhöhung der Sicherungsmechanismen, mehr Depositionierung und Verringerung der systemischen Risiken in den relevanten Märkten.
Es wird überlegt, weitere Indikatoren hinzuzufügen, eine Abstimmungsmechanik zu schaffen und die Richtigkeit der Beurteilung zu verbessern.
Die Strategie hat eine klare Gesamtkonzeption, nutzt mehrere Indikatoren, um die Richtung des Trends zu bestimmen, spielt bei der Kompression des Brin-Kanals scharfsinnig mit und verhindert die Gefahr der Kontrolle des Stoppmechanismus. Es ist eine eher stabile Trendverfolgungsstrategie. Durch die Optimierung der Parameter und die Verbesserung der Risikokontrollmechanismen können bessere Rückmessungen und Solid-Disk-Effekte erzielt werden.
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 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/
// © XaviZ
//#####©ÉÉÉɶN###############################################
//####*..´´´´´´,,,»ëN########################################
//###ë..´´´´´´,,,,,,''%©#####################################
//###'´´´´´´,,,,,,,'''''?¶###################################
//##o´´´´´´,,,,,,,''''''''*©#################################
//##'´´´´´,,,,,,,'''''''^^^~±################################
//#±´´´´´,,,,,,,''''''''^í/;~*©####æ%;í»~~~~;==I±N###########
//#»´´´´,,,,,,'''''''''^;////;»¶X/í~~/~~~;=~~~~~~~~*¶########
//#'´´´,,,,,,''''''''^^;////;%I^~/~~/~~~=~~~;=?;~~~~;?ë######
//©´´,,,,,,,''''''''^^~/////X~/~~/~~/~~»í~~=~~~~~~~~~~^;É####
//¶´,,,,,,,''''''''^^^;///;%;~/~~;í~~»~í?~?~~~?I/~~~~?*=íÑ###
//N,,,,,,,'''''''^^^^^///;;o/~~;;~~;£=»í»;IX/=~~~~~~^^^^'*æ##
//#í,,,,,''''''''^^^^^;;;;;o~»~~~~íX//~/»~;í?IíI»~~^/*?'''=N#
//#%,,,'''''''''^^^^^^í;;;;£;~~~//»I»/£X/X/»í*&~~~^^^^'^*~'É#
//#©,,''''''''^^^^^^^^~;;;;&/~/////*X;í;o*í»~=*?*===^'''''*£#
//##&''''''''^^^^^^^^^^~;;;;X=í~~~»;;;/~;í»~»±;^^^^^';=''''É#
//##N^''''''^^^^^^^^^^~~~;;;;/£;~~/»~~»~~///o~~^^^^''''?^',æ#
//###Ñ''''^^^^^^^^^^^~~~~~;;;;;í*X*í»;~~IX?~~^^^^/?'''''=,=##
//####X'''^^^^^^^^^^~~~~~~~~;;íííííí~~í*=~~~~Ií^'''=''''^»©##
//#####£^^^^^^^^^^^~~~~~~~~~~~íííííí~~~~~*~^^^;/''''='',,N###
//######æ~^^^^^^^^~~~~~~~~~~~~~~íííí~~~~~^*^^^'=''''?',,§####
//########&^^^^^^~~~~~~~~~~~~~~~~~~~~~~~^^=^^''=''''?,íN#####
//#########N?^^~~~~~~~~~~~~~~~~~~~~~~~~^^^=^''^?''';í@#######
//###########N*~~~~~~~~~~~~~~~~~~~~~~~^^^*'''^='''/É#########
//##############@;~~~~~~~~~~~~~~~~~~~^^~='''~?'';É###########
//#################É=~~~~~~~~~~~~~~^^^*~'''*~?§##############
//#####################N§£I/~~~~~~»*?~»o§æN##################
//@version=4
strategy(title="M-SQUEEZE", overlay = true)
//study(title="M-SQUEEZE", overlay = true)
src = input(close, "SOURCE", type = input.source)
// ███▓▒░░ VARIABLES ░░▒▓███
var bool longCond = na, var bool shortCond = na
var int CondIni_long0 = 0, var int CondIni_short0 = 0
var int CondIni_long = 0, var int CondIni_short = 0
var float last_open_longCondition = na, var float last_open_shortCondition = na
var int last_longCondition0 = na, var int last_shortCondition0 = na
var int last_longCondition = na, var int last_shortCondition = na
var bool long_tp = na, var bool short_tp = na
var int last_long_tp = na, var int last_short_tp = na
var bool Final_Long_tp = na, var bool Final_Short_tp = na
var bool SMI_longCond = na, var bool SMI_shortCond = na
var bool RSI_longCond = na, var bool RSI_shortCond = na
var bool ADX_longCond = na, var bool ADX_shortCond = na
var bool SAR_longCond = na, var bool SAR_shortCond = na
var bool Final_longCondition0 = na, var bool Final_shortCondition0 = na
var bool Final_longCondition = na, var bool Final_shortCondition = na
// ███▓▒░░ SQUEEZE MOMENTUM INDICATOR ░░▒▓███
Act_SMI = input(true, "SQUEEZE MOMENTUM INDICATOR")
BB_length = input(85, title="BOLLINGER BANDS LENGTH", minval = 1)
BB_mult = input(2.1, title="BOLLINGER BANDS MULTI-FACTOR", minval = 0.1, step = 0.1)
KC_length = input(38, title="KELTNER CHANNEL LENGTH", minval = 1)
KC_mult = input(2.0, title="KELTNER CHANNEL MULTI-FACTOR", minval = 0.1, step = 0.1)
SQUEEZE_M(_src,_BB_length,_BB_mult,_KC_length,_KC_mult)=>
// Calculate BB
basis = sma(_src, _BB_length)
dev = _BB_mult * stdev(_src, _BB_length)
upperBB = basis + dev
lowerBB = basis - dev
// Calculate KC
ma = sma(src, _KC_length)
rangema = sma(tr, _KC_length)
upperKC = ma + rangema * _KC_mult
lowerKC = ma - rangema * _KC_mult
// Squeeze
sqzOn = lowerBB > lowerKC and upperBB < upperKC
sqzOff = lowerBB < lowerKC and upperBB > upperKC
nosqz = sqzOn == false and sqzOff == false
// Linear Regression curve
val = linreg(_src - avg(avg(highest(high, _KC_length), lowest(low, _KC_length)), sma(close, _KC_length)), _KC_length, 0)
[nosqz,val]
[NOSQZ,VAL] = SQUEEZE_M(src,BB_length,BB_mult,KC_length,KC_mult)
barcolor(iff(VAL > 0, iff(VAL > nz(VAL[1]), color.lime, color.green), iff(VAL < nz(VAL[1]), color.red, color.maroon)))
// ███▓▒░░ SAR ░░▒▓███
Act_SAR = input(true, "PARABOLIC SAR")
Sst = input (0.73, "SAR STAR", step=0.01, minval = 0.01)
Sinc = input (0.5, "SAR INC", step=0.01, minval = 0.01)
Smax = input (0.06, "SAR MAX", step=0.01, minval = 0.01)
SAR = sar(Sst, Sinc, Smax)
plot(SAR, style = plot.style_cross, title = "SAR")
// ███▓▒░░ RSI VOLUME WEIGHTED ░░▒▓███
Act_RSI = input(true, "RSI VOLUME WEIGHTED")
RSI_len = input(22, "RSI LENGHT", minval = 1)
RSI_obos = input(45,title="RSI CENTER LINE", type=input.integer, minval = 1)
WiMA(_src, _length)=>
var float MA_s=0.0
MA_s:=(_src + nz(MA_s[1] * (_length-1)))/_length
MA_s
RSI_Volume(fv, length)=>
up=iff(fv>fv[1],abs(fv-fv[1])*volume,0)
dn=iff(fv<fv[1],abs(fv-fv[1])*volume,0)
upt=WiMA(up,length)
dnt=WiMA(dn,length)
100*(upt/(upt+dnt))
RSI_V = RSI_Volume(src, RSI_len)
// ███▓▒░░ STRATEGY ░░▒▓███
SMI_longCond := (Act_SMI ? (VAL > 0 and (VAL > nz(VAL[1])) and not NOSQZ) : RSI_longCond)
RSI_longCond := (Act_RSI ? (RSI_V > RSI_obos) : SAR_longCond)
SAR_longCond := (Act_SAR ? (SAR < close) : SMI_longCond)
SMI_shortCond := (Act_SMI ? (VAL < 0 and (VAL < nz(VAL[1])) and not NOSQZ) : RSI_shortCond)
RSI_shortCond := (Act_RSI ? (RSI_V < RSI_obos) : SAR_shortCond)
SAR_shortCond := (Act_SAR ? (SAR > close) : SMI_shortCond)
longCond := SMI_longCond and RSI_longCond and SAR_longCond
shortCond := SMI_shortCond and RSI_shortCond and SAR_shortCond
CondIni_long0 := longCond ? 1 : shortCond ? -1 : CondIni_long0[1]
CondIni_short0 := longCond ? 1 : shortCond ? -1 : CondIni_short0[1]
longCondition0 = (longCond and CondIni_long0[1] == -1)
shortCondition0 = (shortCond and CondIni_short0[1] == 1)
CondIni_long := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_long[1]
CondIni_short := longCond[1] ? 1 : shortCond[1] ? -1 : CondIni_short[1]
longCondition = (longCond[1] and CondIni_long[1] == -1)
shortCondition = (shortCond[1] and CondIni_short[1] == 1)
// ███▓▒░░ ALERTS & SIGNALS ░░▒▓███
plotshape(longCondition, title = "Long Signal", style = shape.triangleup, location = location.belowbar, color = color.blue, transp = 0, size = size.tiny)
plotshape(shortCondition, title = "Short Signal", style = shape.triangledown, location = location.abovebar, color = #FF0000, transp = 0, size = size.tiny)
//alertcondition(longCondition, title="Long Alert", message = "LONG")
//alertcondition(shortCondition, title="Short Alert", message = "SHORT")
// ███▓▒░░ BACKTESTING ░░▒▓███
testStartYear = input(2018, "BACKTEST START YEAR", minval = 1980, maxval = 2222)
testStartMonth = input(01, "BACKTEST START MONTH", minval = 1, maxval = 12)
testStartDay = input(01, "BACKTEST START DAY", minval = 1, maxval = 31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2222, "BACKTEST STOP YEAR", minval=1980, maxval = 2222)
testStopMonth = input(12, "BACKTEST STOP MONTH", minval=1, maxval=12)
testStopDay = input(31, "BACKTEST STOP DAY", minval=1, maxval=31)
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)
testPeriod = time >= testPeriodStart and time <= testPeriodStop ? true : false
strategy.entry("Long", strategy.long, when = longCondition0 and testPeriod)
strategy.entry("Short", strategy.short, when = shortCondition0 and testPeriod)