
Es handelt sich um eine Trend-Tracking-basierte Durchbruchstrategie. Sie kauft bei einem Durchbruch Aktien mit hoher Inputstärke und verkauft bei einem Durchbruch Aktien mit schwächer Inputstärke, um einen Trend-Tracking zu erreichen.
Die Strategie basiert hauptsächlich auf zwei Indikatoren, die Ein- und Ausstiegssignale beurteilen, der höchste Preis innerhalb eines bestimmten Zeitraums nach der Funktion “highest” und der niedrigste Preis innerhalb eines bestimmten Zeitraums nach der Funktion “lowest”.
Wenn der Schlusskurs höher ist als der Höchstwert des letzten bestimmten Zeitraums (HighPeriod), wird dies als ein Durchbruch des Aufwärtstrends angesehen und daher ein Mehrsignal ausgegeben. Wenn der Schlusskurs niedriger ist als der niedrigste Preis des letzten bestimmten Zeitraums (LowPeriod), wird dies als ein Durchbruch des Abwärtstrends angesehen und daher ein Fehlsignal ausgegeben.
Diese Strategie setzt sowohl einen mobilen als auch einen festen Stop-Loss. Der mobile Stop-Loss basiert auf dem ATR-Wert, der berechnet wird, indem der ATR-Wert in einem bestimmten Zeitraum berechnet und mit einem Faktor multipliziert wird. Der feste Stop-Loss wird ebenfalls auf dem ATR-Wert berechnet.
Nach der ersten K-Linie, die nach einem zusätzlichen Shorting erstellt wurde, tritt ein fester Stop-Loss in Kraft; danach wird der Stop-Loss zu einem beweglichen Stop-Loss umgewandelt. Diese Kombination ermöglicht es, einen Teil des Gewinns zu sperren und gleichzeitig den Trend zu verfolgen.
Die Strategie enthält auch Regeln für die Berechnung von Positionen. Positionen werden auf der Grundlage von Maximalverlustprozentsätzen, Kontointeressen usw. berechnet. Die Anzahl der Handelsarten wird berücksichtigt, um die Positionen für einzelne Arten angemessen zu senken.
Insgesamt handelt es sich um eine typische Trend-Folger-Strategie, bei der es darum geht, in den Markt einzutreten, wenn ein Durchbruch zu erwarten ist, die Gewinne durch einen Stop-Loss-Methode zu sperren und den Trend zu verfolgen und bei einer Trendwende aus dem Markt auszutreten.
Es ist eine bahnbrechende Strategie, deren Hauptvorteile darin bestehen, dass:
Trendbestimmung ist sehr präzise. Es wird mit dem Höchst- und Tiefstpreis beurteilt, ob sich der Trend umkehrt. Die Genauigkeit ist sehr hoch und es ist nicht leicht, falsche Signale zu senden.
Positions- und Stop-Loss-Wissenschaft ist vernünftig. Die Einstellung des maximalen Verlustanteils, die Verknüpfung der Kontorechte und -interessen machen die Positionen vernünftig und verhindern übermäßige oder unwirksame Geschäfte. Die Kombinationsstop-Methode sperrt die Gewinne und verfolgt den Trend.
Einfach und praktisch, leicht zu verstehen und zu bedienen. Nur die grundlegendsten Kennzahlen sind erforderlich, die Strategielogik ist einfach und klar und leicht zu erfassen.
Es ist sehr erweiterbar. Indikatorparameter, Positionsregeln usw. sind in den Eingabefeldern enthalten, die der Benutzer anpassen kann.
Insgesamt ist dies eine sehr praktische und zuverlässige Strategie. Die Strategie ist sicher und zuverlässig in der Beurteilung, wobei die Risikokontrolle und die Verfolgung berücksichtigt werden.
Die Hauptrisiken dieser Strategie sind:
Trendwechselrisiken. Ein Breakout-Strategie ist stark von Trendbeurteilungen abhängig und kann mit einem großen Verlust verbunden sein, wenn sie falsch beurteilt wird.
Die falsche Einstellung der Parameter zum Risiko. Die falsche Auswahl der Parameter für die Höchst- und Tiefpreis-Periode kann den Trend verpassen, und die falsche Einstellung der Positionsparameter kann zu große Verluste verursachen.
Das Risiko, dass der Stopp zu radikal ist. Wenn der mobile Stopp zu klein ist, kann der Marktgeräusch ihn aus dem Spiel werfen.
Die wichtigsten Lösungen sind:
Hinzufügen von Trendfiltern. Zum Beispiel, um andere Indikatoren zu beurteilen, um falsche Durchbrüche zu vermeiden.
Optimierung der Parameterwahl. Die Parameter werden getestet, um ihre Stabilität zu gewährleisten.
Die Stoppdistanz kann entsprechend gelockert werden. Die Stoppdistanz kann eine gewisse Rückschaltung aufnehmen.
Die Strategie kann vor allem in folgenden Bereichen optimiert werden:
Hinzufügen von mehr Indikatoren zur Trendbeurteilung. Zusätzlich zu den höchsten und niedrigsten Preisen können Beurteilungen wie beispielsweise Moving Averages hinzugefügt werden, um die Trendbeurteilung genauer zu machen.
Optimierung der Parameter Einstellungen. Testen Sie die Parameter für die höchsten und niedrigsten Preiszyklen, die Stop-Loss-Multiplier-Parameter usw. und wählen Sie die optimale Kombination von Parametern.
Die Position kann an die Marktvolatilität geknüpft werden, z. B. bei einem Anstieg der VIX kann die Position abgesenkt werden.
Die Erhöhung der Kapazitätsindikator-Filter. Nur in der Kapazitätserhöhung Durchbruch betreten, um falsche Durchbruch zu vermeiden.
Berücksichtigen Sie die Basisdifferenz und die Relevanz der bevorzugten Handelsvarianten. Die Auswahl einer Kombination von Sorten mit geringer Basisdifferenz und geringer Relevanz verringert das Risiko der Kombination.
Optimierung und Anpassung der Stop-Loss-Mechanismen. Die Kombination aus mobilen und festen Stop-Loss-Verhältnissen kann getestet werden, um das Risiko zu verringern, dass die Stop-Loss-Verhältnisse zu radikal sind.
Die Strategie ist eine Trend-Tracking-Breakthrough-Strategie, die in Bezug auf die Genauigkeit der Beurteilung, die Positions- und Risikokontrolle und die Einfachheit der Bedienung gut funktioniert. Sie fängt Trends frühzeitig ein und balanciert die Gewinne mit der Sperrung und dem Trend-Tracking durch die Bewegung von Stopps.
Als Durchbruchstrategie ist sie natürlich sehr stark auf Trendbeurteilungen angewiesen und wird leicht durch Lärm gestört. Darüber hinaus kann eine falsche Einstellung der Parameter die Strategie-Performance beeinträchtigen. Dies muss durch weitere Optimierung behoben werden.
Insgesamt ist dies eine sehr praktische Strategie, deren Grundstruktur bereits die wichtigsten Elemente enthält, die eine quantitative Strategie benötigt. Wenn sie ständig optimiert und verbessert werden kann, kann sie zu einer programmatischen Strategie werden, die stabil und profitabel ist.
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(shorttitle="Trend Surfers - Breakout", title="Trend Surfers - Premium Breakout",
overlay=true)
// Risk for position and pyramid
maxriskval = input(2, "Max % risk", type = input.float,
tooltip="Risk % over total equity / Position", group = "Risk Management")
pairnumber = input(title = "How many pairs",type = input.integer, defval= 1,
tooltip="How many pairs are you trading with the strategy?", group = "Risk Management")
// Emtry Exit
highPeriod = input(title="Highest High Period", type=input.integer, defval=168
, tooltip="Highest High of X bars - This will trigger a Long Entry when close is above. (Thin Green Line)"
, group = "Entry Condition")
lowPeriod = input(title="Lowest Low Period", type=input.integer, defval=168,
tooltip="Lowest low of X bars - This will trigger a Short Entry when close is under. (Thin Red Line)"
, group = "Entry Condition")
// Stoploss
trailingAtrPeriod = input(title="Trailing ATR Pediod", type=input.integer, defval=10,
tooltip="Average True Range for the Trailing Stop. (Thick Green Line) "
, group = "Exit Condition")
trailingAtrMultiplier = input(title="Trailing ATR Multiplier", type=input.float, defval=8
, group = "Exit Condition")
fixAtrPeriod = input(title="Fix ATR Pediod", type=input.integer, defval=10,
tooltip="Average True Range for the Fix Stoloss. (Thick Yellow Line)"
, group = "Exit Condition")
fixAtrMultiplier = input(title="Fix ATR Multiplier", type=input.float, defval=2
, group = "Exit Condition")
// Pair info
pair = syminfo.basecurrency + syminfo.currency
// High Low Variable
highestHigh = highest(high, highPeriod)[1]
lowestLow = lowest(low, lowPeriod)[1]
trailingAtr = atr(trailingAtrPeriod) * trailingAtrMultiplier
// Trade Condition
longCondition = crossover(close, highestHigh)
shortCondition = crossunder(close, lowestLow)
// Risk Variable
fixAtr = atr(fixAtrPeriod) * fixAtrMultiplier
stopvaluelong = close[1] - fixAtr[1]
stopvalueshort = close[1] + fixAtr[1]
// Position size Long
maxpossize = strategy.equity / close
positionsizelong = ( ( ( (maxriskval/100) * strategy.equity) / (close - stopvaluelong)))
stopperclong = ((close - stopvaluelong) / close) * 100
leveragelong = max(1, ceil(positionsizelong / maxpossize)) * 2
posperclong = (((positionsizelong * close) / strategy.equity) *100 / leveragelong) / pairnumber
realposlong = (((posperclong / 100) * strategy.equity) * leveragelong) / close
// Position size Short
positionsizeshort = ( ( ( (maxriskval/100) * strategy.equity) / (stopvalueshort - close)))
stoppercshort = ((close - stopvalueshort) / close) * 100
leverageshort = max(1, ceil(positionsizeshort / maxpossize)) * 2
pospercshort = (((positionsizeshort * close) / strategy.equity) *100 / leverageshort) / pairnumber
realposshort = (((pospercshort / 100) * strategy.equity) * leverageshort) / close
// Alert Message
entry_long_message = '\nGo Long for ' + pair + 'NOW!' +
'\nPosition Size % =' + tostring(posperclong) +
'\nLeverage' + tostring(leveragelong) +
'\nStoploss Price =' + tostring(stopvaluelong) +
'\nClose any Short position that are open for ' + pair + '!' +
'\n\nVisit TrendSurfersSignals.com' +
'\nFor automated premium signals (FREE)'
entry_short_message ='\nGo Short for ' + pair + 'NOW!' +
'\nPosition Size % =' + tostring(pospercshort) +
'\nLeverage' + tostring(leverageshort) +
'\nStoploss Price =' + tostring(stopvalueshort) +
'\nClose any Long position that are open for ' + pair + '!' +
'\n\nVisit TrendSurfersSignals.com' +
'\nFor automated premium signals (FREE)'
exit_short_message = '\nExit Short for ' + pair + 'NOW!' +
'\n\nVisit TrendSurfersSignals.com' +
'\nFor automated premium signals (FREE)'
exit_long_message = '\nExit Long for ' + pair + 'NOW!' +
'\n\nVisit TrendSurfersSignals.com' +
'\nFor automated premium signals (FREE)'
// Order
if longCondition
strategy.entry("Long", strategy.long, stop=highestHigh, comment="Long", qty=realposlong
, alert_message = entry_long_message)
if shortCondition
strategy.entry("Short", strategy.short, stop=lowestLow, comment="Short", qty=realposshort
, alert_message = entry_short_message)
// Stoploss Trailing
longTrailing = close - trailingAtr
shortTrailing = close + trailingAtr
var longTrailingStop = 0.0
var shortTrailingStop = 999999.9
trailingStopLine = 0.0
trailingStopLine := na
fixedStopLine = 0.0
fixedStopLine := na
var inTrade = 0
if longCondition or shortCondition
if 0 == inTrade
if longCondition
inTrade := 1
else
inTrade := -1
if 1 == inTrade and (shortCondition or low <= max(fixedStopLine[1], longTrailingStop))
inTrade := 0
if -1 == inTrade and (longCondition or high >= min(fixedStopLine[1], shortTrailingStop))
inTrade := 0
longTrailingStop := if (1 == inTrade)
stopValue = longTrailing
max(stopValue, longTrailingStop[1])
else
0
shortTrailingStop := if (-1 == inTrade)
stopValue = shortTrailing
min(stopValue, shortTrailingStop[1])
else
999999
// Fix Stoploss
firstPrice = 0.0
firstFixAtr = 0.0
firstPrice := na
firstFixAtr := na
if 0 != inTrade
firstPrice := valuewhen(inTrade != inTrade[1] and 0 != inTrade, close, 0)
firstFixAtr := valuewhen(inTrade != inTrade[1] and 0 != inTrade, fixAtr, 0)
if 1 == inTrade
fixedStopLine := firstPrice - firstFixAtr
trailingStopLine := longTrailingStop
else
fixedStopLine := firstPrice + firstFixAtr
trailingStopLine := shortTrailingStop
if (strategy.position_size > 0)
strategy.exit(id="L Stop", stop=max(fixedStopLine, longTrailingStop)
, alert_message = exit_long_message)
if (strategy.position_size < 0)
strategy.exit(id="S Stop", stop=min(fixedStopLine, shortTrailingStop)
, alert_message = exit_long_message)
// Plot
plot(highestHigh, color=color.green, linewidth=1, transp=0, title='Highest High')
plot(lowestLow, color=color.red, linewidth=1, transp=0, title='Lowest Low')
plot(trailingStopLine, color=color.lime, linewidth=2, transp=0, offset=1, title='Trailing Stop')
plot(fixedStopLine, color=color.orange, linewidth=2, transp=0, offset=1, title='Fixed Stop')