Die Kernidee dieser Strategie ist es, die Kombination von Bollinger Bands und Basis-Moving Averages zu ermöglichen, Trend-Tracking und Trend-Umkehr-Handel zu ermöglichen. Wenn der Preis mit dem Indikator übereinstimmt, wird der Trend-Tracking durchgeführt; wenn der Preis mit dem Indikator abweicht, wird der Umkehr-Handel durchgeführt.
Die Strategie basiert hauptsächlich auf drei maßgeschneiderten Indikatoren:
Der Trend: Berechnet die Beziehung zwischen dem Preis und den Überkauf-Überverkauf-Kanälen, beurteilt die Über- und die Leerlauftrends und gibt drei Zustände 1, 0, 1 zurück.
Überkauf-Überverkauf-Kanal ((Tsl): Referenz ATR berechnet Auf- und Ablauf, Preis-Überbruch als Überkauf und Abbruch als Überverkauf.
Basisbewegter Durchschnitt ((MA): Berechnung eines einfachen Bewegten Durchschnitts des Schlusskurses über 20 Perioden.
Die Strategie beurteilt den Preis auf Basis der Mehrblässigkeitsindikatorwerte in einem Mehrkopf-, Schwingungs- oder Leerstand. Wenn der Mehrblässigkeitsindikator 1 ist, steht er für einen Mehrblässigkeitszustand; wenn der Mehrblässigkeitsindikator -1 ist, steht er für einen Leerstand. Wenn der Preis mit der Richtung des Indikators übereinstimmt, wird eine Trendverfolgungstrategie angewandt, um an den Punkten, die mit der Richtung des Indikators übereinstimmen, mehr zu machen.
Außerdem dient ein Preisbruch des Moving Averages als Hilfssignal, um den Handel in die richtige Richtung zu lenken. Bei einem Preisbruch des Moving Averages wird der Preis nach oben und nach unten geholfen.
Die spezifischen Strategien für den Multi-Head-Handel lauten:
Bei einer Überschwemmung von > 0, bei einem Kursanstieg von > 0, bei einem Trendverfolgungsszenario, wird mehr getan.
Der Mehrraum-Indikator < 0, der Preisrückgang, der Ausbruch, gehört zu einer Trendwende, dem Kaufraum.
Der Schlusskurs > der Eröffnungskurs > der Zentralpunkt wird als Chance betrachtet, den Zentralpunkt zu durchbrechen, um mehr zu tun.
Der Schlusskurs hat einen Aufwärtstrend und der Schlusskurs ist > Moving Average.
Die Strategie für einen leeren Handel lautet wie folgt:
Der Index < 0, der Preisrückgang, der Ausbruch, gehört zum Trendverfolgungsszenario und ist leer.
Der Indikator für die Mehrheit der Luft ist > 0, der Preisanstieg ist aufgebrochen und gehört zu einer Trendwende.
Der Börsenöffnungspreis > der Börsenöffnungspreis < Zentralpunkt, als Breakout-Zentralpunkt-Defizit-Opportunität betrachtet, Defizit.
Der Schlusskurs ist ausgebrochen, und der Schlusskurs < der Moving Average, ist leer.
Die Placement-Strategie ist relativ einfach, indem der Preis den Überkauf-Überverkauf-Kanal durch einen erneuten Durchbruch beendet.
Diese Strategie hat folgende Vorteile:
Die Multi-Höhen-Indikatoren sind ein zentraler Indikator für die Strategie, um die Marktentwicklung zu beurteilen.
Die Überkauf-Überverkaufskanäle können mit den Indikatoren kombiniert werden, um potenzielle Umkehrmöglichkeiten zu erkennen.
Der Basis-Moving Average kann als Hilfsfiltersignal verwendet werden, um falsche Durchbrüche zu vermeiden.
Die Zentralpunkte bilden in Kombination mit den Polyblock-Indikatoren ein High-Probability Trading Point.
Es gibt mehr Möglichkeiten, um zu gewinnen, wenn man sowohl Trend-Tracking als auch Reverse-Trading-Fähigkeiten hat.
Die Überkauf- und Überverkauf-Kanäle sind klar und unkompliziert und fördern die Risikokontrolle.
Die Strategie birgt auch folgende Risiken:
Die Multifunktionsindikatoren können falsche Signale auslösen und müssen in Kombination mit anderen Indikatoren gefiltert werden.
Ein Durchbruch ist leicht zu erwischen und erfordert ein strenges Stop-Loss.
Der Moving Average ist falsch eingestellt und kann Trends verpassen oder falsche Signale erzeugen.
Zentrale Punkte erfordern Rückprüfungen zur Verifizierung der Wahrscheinlichkeitssicherheit.
Die Überkauf-Überverkauf-Kanäle müssen optimiert werden, um die Parameter an die verschiedenen Sorten anzupassen.
Die Parameter des Indikators stimmen nicht überein, was zu einer hohen Handelsfrequenz führen kann.
Die folgenden Maßnahmen können gegen diese Risiken eingesetzt werden:
In Kombination mit anderen Indikatoren wie K-Linien, Übertragungsmengen und Überprüfungszeichen.
Die Strategie der Überkauf-Überverkauf-Kanal-Stopp-Loss-Strategie ist streng eingehalten.
Verschiedene Moving Average-Periodenparameter werden getestet, um die optimalen Parameter zu finden.
Die Wahrscheinlichkeit einer Hubspot-Strategie wird vollständig überprüft.
Optimieren Sie die Parameter der Kanäle, um die optimale Kombination der Parameter für die verschiedenen Sorten zu finden.
Anpassung der Kennzahlenparameter, um das gesamte System zu stabilisieren.
Die Strategie kann auch in folgenden Bereichen optimiert werden:
Die Zugabe von maschinellen Lernalgorithmen zur Ausbildung von Mehrraumindikatoren mit Hilfe von Big Data kann die Genauigkeit der Indikatoren verbessern und Fehlsignale verringern.
Erhöhung der Anpassungskanäle, die die Parameter der Kanäle automatisch an die Marktschwankungen anpassen. Die Durchbruchgenauigkeit kann verbessert werden.
Mit Hilfe von Deep Learning werden weitere Kennzahlen für Veränderungen erfasst, um die Kennzahlen zu erstellen, die die Eintragungs- und Ausstiegsstrategien optimieren.
Die Einführung von Advanced Stop-Algorithmen, die Trendstop verfolgen können.
Parameteroptimierung und Kombinationstests zur Steigerung der Stabilität der Gesamtstrategie.
Das Modul zur Vermögensverwaltung wurde hinzugefügt, um die Risikokontrolle wissenschaftlicher zu gestalten.
Die Strategie, die die Marktstruktur anhand von mehreren Leerzeichen beurteilt und Handelssignale für Kanäle und Moving Averages erzeugt, ermöglicht eine organische Kombination von Trendverfolgung und Trendumkehr. Sie hat die Vorteile einer guten Indikatorwirkung, einer großen Anzahl von Handelsmöglichkeiten und eines klaren Stop-Losses. Gleichzeitig besteht ein gewisses Risiko, das zur Steigerung der Stabilität weiter optimiert werden muss.
/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-24 00:00:00
period: 2h
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/
// © amysojexson
//@version=3
strategy(title="Pivots strategy", overlay=true)
// Input settings
// Create a pull-down menu for the pivot type
pivotType = input(title="Pivot Type",
options=["Daily", "Intraday", "Weekly"], defval="Daily")
// Make toggles for pivot level options
plotPP = input(title="Plot PP", type=bool, defval=true)
plotS1R1 = input(title="Plot S1 and R1", type=bool, defval=true)
plotS2R2 = input(title="Plot S2 and R2", type=bool, defval=true)
plotS3R3 = input(title="Plot S3 and R3", type=bool, defval=true)
plotTCBC = input(title="Plot S3 and R3", type=bool, defval=true)
// Configure session options
sessRange = input(title="Trading Session", defval="0800-1600")
showSess = input(title="Highlight Session?", type=bool, defval=false)
// Enable or disable pivot labels
showLabels = input(title="Show Labels?", type=bool, defval=false)
// Step 2. Calculate indicator values
// Create a function to fetch daily and weekly data
GetData(res, data) =>
security(syminfo.tickerid, res, data[1],
lookahead=barmerge.lookahead_on)
// Fetch daily and weekly price data
dailyHigh = GetData("D", high)
dailyLow = GetData("D", low)
dailyClose = GetData("D", close)
weeklyHigh = GetData("W", high)
weeklyLow = GetData("W", low)
weeklyClose = GetData("W", close)
// Determine session pivot data
// First see how the price bar relates to
// the session time range
inSession = not na(time(timeframe.period, sessRange)[1])
sessStart = inSession and not inSession[1]
sessEnd = not inSession and inSession[1]
// Determine session price data
sessHigh = 0.0
sessLow = 0.0
sessClose = 0.0
sessHigh := sessStart ? high :
inSession ? max(high, sessHigh[1]) : na
sessLow := sessStart ? low :
inSession ? min(low, sessLow[1]) : na
sessClose := sessEnd ? close[1] : na
// Compute high, low, close from previous intra-day session
highPrevSess = 0.0
lowPrevSess = 0.0
closePrevSess = 0.0
highPrevSess := sessEnd ? fixnan(sessHigh) : highPrevSess[1]
lowPrevSess := sessEnd ? fixnan(sessLow) : lowPrevSess[1]
closePrevSess := sessEnd ? fixnan(sessClose) : closePrevSess[1]
// Now figure out which kind of price data
// to use for the pivot calculation
theHigh = if (pivotType == "Daily")
dailyHigh
else
if (pivotType == "Intraday")
highPrevSess
else
weeklyHigh
theLow = if (pivotType == "Daily")
dailyLow
else
if (pivotType == "Intraday")
lowPrevSess
else
weeklyLow
theClose = if (pivotType == "Daily")
dailyClose
else
if (pivotType == "Intraday")
closePrevSess
else
weeklyClose
// Finally calculate the pivot levels
pp = (theHigh + theLow + theClose) / 3
bc= (theHigh + theLow)/2
tc= (pp-bc)+pp
r1 = pp+(.382*(theHigh-theLow))
s1 = pp-(.382*(theHigh-theLow))
r2 = pp +(.618*(theHigh-theLow))
s2 = pp -(.618*(theHigh-theLow))
r3 = pp +(1*(theHigh-theLow))
s3 = pp -(1*(theHigh-theLow))
// Step 3. Output indicator data
// Plot the various pivot levels
plot(series=plotS3R3 ? r3 : na, title="R3",
style=circles, linewidth=1, color=#0023FF)
plot(series=plotS2R2 ? r2 : na, title="R2",
style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS1R1 ? r1 : na, title="R1",
style=circles, linewidth=1, color=#09E0F3)
plot(series=plotTCBC ? tc : na, title="TC",
style=circles, linewidth=.75, color=#FF00D1)
plot(series=plotPP ? pp : na, title="PP",
style=circles, linewidth=1, color=#000000)
plot(series=plotTCBC ? bc : na, title="BC",
style=circles, linewidth=.75, color=#FF00D1)
plot(series=plotS1R1 ? s1 : na, title="S1",
style=circles, linewidth=1, color=#09E0F3)
plot(series=plotS2R2 ? s2 : na, title="S2",
style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS3R3 ? s3 : na, title="S3",
style=circles, linewidth=1, color=#0023FF)
// Display the pivot names on the chart, if applicable
newPivots = (showLabels == false) ? false :
(pivotType == "Intraday") ? sessEnd :
(pivotType == "Daily") ? dayofmonth != dayofmonth[1] :
dayofweek == monday and dayofmonth != dayofmonth[1]
plotchar(series=newPivots and plotS3R3 ? r3 : na,
char='', text="R3", offset=1,
location=location.absolute,
color=#0023FF, title="R3 label")
plotchar(series=newPivots and plotS2R2 ? r2 : na,
char='', text="R2", offset=1,
location=location.absolute,
color=#1E90FF, title="R2 label")
plotchar(series=newPivots and plotS1R1 ? r1 : na,
char='', text="R1", offset=1,
location=location.absolute,
color=#09E0F3, title="R1 label")
plotchar(series=newPivots and plotTCBC ? r1 : na,
char='', text="TC", offset=1,
location=location.absolute,
color=#FF00D1, title="TC label")
plotchar(series=newPivots and plotTCBC ? r1 : na,
char='', text="BC", offset=1,
location=location.absolute,
color=#FF00D1, title="BC label")
plotchar(series=newPivots and plotS1R1 ? s1 : na,
char='', text="S1", offset=1,
location=location.absolute,
color=#09E0F3, title="S1 label")
plotchar(series=newPivots and plotS2R2 ? s2 : na,
char='', text="S2", offset=1,
location=location.absolute,
color=#1E90FF, title="S2 label")
plotchar(series=newPivots and plotS3R3 ? s3 : na,
char='', text="S3", offset=1,
location=location.absolute,
color=#0023FF, title="S3 label")
// Highlight the intra-day price data session on the chart
bgcolor(color=showSess and inSession and (pivotType == "Intraday") ?
orange : na, transp=95)
// Step 4. Create indicator alerts
alertcondition(condition=cross(close, s3),
title="Pivot S3 Cross",
message="Prices crossed Pivot S3 level")
alertcondition(condition=cross(close, s2),
title="Pivot S2 Cross",
message="Prices crossed Pivot S2 level")
alertcondition(condition=cross(close, s1),
title="Pivot S1 Cross",
message="Prices crossed Pivot S1 level")
alertcondition(condition=cross(close, tc),
title="Pivot TC Cross",
message="Prices crossed Pivot TC level")
alertcondition(condition=cross(close, pp),
title="Pivot PP Cross",
message="Prices crossed the main Pivot Point level")
alertcondition(condition=cross(close, bc),
title="Pivot BC Cross",
message="Prices crossed Pivot BC level")
alertcondition(condition=cross(close, r1),
title="Pivot R1 Cross",
message="Prices crossed Pivot R1 level")
alertcondition(condition=cross(close, r2),
title="Pivot R2 Cross",
message="Prices crossed Pivot R2 level")
alertcondition(condition=cross(close, r3),
title="Pivot R3 Cross",
message="Prices crossed Pivot R3 level")
MA = sma(close, 20)
plot(MA, color=red)
Factor = input(2, type=float)
Pd = input(10, minval=1,maxval = 100)
Up = hl2-(Factor*atr(Pd))
Dn = hl2+(Factor*atr(Pd))
TrendUp = 0.0
TrendUp := close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown = 0.0
TrendDown := close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend = 0.0
Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = Trend==1? TrendUp: TrendDown
plot(Tsl, color=blue)
if close>open
if open<pp
if close>pp
if close>MA
strategy.entry("long", true)
if close<open
if open>pp
if close<pp
if close<MA
strategy.entry("short", false)
strategy.close("long", when = open<Tsl)
strategy.close("short", when = open>Tsl)