Intelligente Trailing-Stop-Loss-Strategie basierend auf gleitendem Durchschnitt und Intraday-Muster

SMA MA18 ATR
Erstellungsdatum: 2025-01-17 16:04:09 zuletzt geändert: 2025-01-17 16:04:09
Kopie: 4 Klicks: 361
1
konzentrieren Sie sich auf
1617
Anhänger

Intelligente Trailing-Stop-Loss-Strategie basierend auf gleitendem Durchschnitt und Intraday-Muster

Überblick

Dabei handelt es sich um eine Strategie, die auf dem 18-Tage-Gleitenden Durchschnitt (SMA18) basiert, kombiniert mit der Erkennung von Intraday-Handelsmustern und einem intelligenten Trailing-Stop-Mechanismus. Bei dieser Strategie wird hauptsächlich die Beziehung zwischen Preis und SMA18 beobachtet, die Intraday-Hoch- und Tiefpunkte kombiniert und zum richtigen Zeitpunkt eine Long-Position eingenommen. Die Strategie verwendet einen flexiblen Stop-Loss-Plan, der entweder einen festen Stop-Loss-Punkt oder den tiefsten Punkt der letzten zwei Tage als Trailing-Stop-Loss-Benchmark verwenden kann.

Strategieprinzip

Die Kernlogik der Strategie umfasst die folgenden Schlüsselelemente:

  1. Die Einstiegsbedingungen basieren auf der relativen Position des Preises zum gleitenden 18-Tage-Durchschnitt. Sie können in den Markt einsteigen, wenn er den gleitenden Durchschnitt durchbricht, oder über dem gleitenden Durchschnitt einsteigen.
  2. Durch die Analyse der Intraday-K-Linienmuster, insbesondere unter Berücksichtigung des internen K-Linienmusters (Inside Bar), wird die Genauigkeit des Eintrags verbessert
  3. Basierend auf den Performancemerkmalen verschiedener Handelstage der Woche können Sie gezielt an bestimmten Tagen handeln
  4. Der Einstiegspreis wird in einer Limit-Order festgelegt, mit einer kleinen Prämie über dem Tiefpunkt, um die Wahrscheinlichkeit einer Transaktion zu erhöhen.
  5. Der Stop-Loss-Mechanismus unterstützt zwei Modi: einen festen Stop-Loss basierend auf dem Einstiegspreis und einen Trailing-Stop-Loss basierend auf dem niedrigsten Punkt der letzten beiden Handelstage.

Strategische Vorteile

  1. Durch die Kombination technischer Indikatoren und Preismuster sind Einstiegssignale zuverlässiger
  2. Flexibler Mechanismus zur Auswahl der Handelszeit, der entsprechend unterschiedlicher Marktmerkmale optimiert werden kann
  3. Intelligente Stop-Loss-Lösung sichert Gewinne und gibt den Kursen gleichzeitig genügend Spielraum für Schwankungen
  4. Die Strategieparameter sind äußerst anpassungsfähig und können an unterschiedliche Marktumgebungen angepasst werden.
  5. Durch die Überprüfung interner K-Linien-Muster werden Fehlsignale effektiv reduziert

Strategisches Risiko

  1. In volatilen Märkten können feste Stopps zu vorzeitigen Ausstiegen führen
  2. Bei einer schnellen Trendwende kann ein Trailing-Stop-Loss zu einem geringeren Gewinn führen.
  3. Während der Seitwärtsphase können häufige interne Kerzendiagramme zu übermäßigem Handel führen. Gegenmaßnahmen:
  • Passen Sie den Stop-Loss-Abstand dynamisch entsprechend der Marktvolatilität an
  • Trendbestätigungsindikatoren hinzufügen
  • Legen Sie ein Mindestgewinnziel fest, um Trades von geringer Qualität herauszufiltern

Richtung der Strategieoptimierung

  1. Einführung von Volatilitätsindikatoren (wie ATR) zur dynamischen Anpassung der Stop-Loss-Distanz
  2. Erhöhen Sie die Dimension der Volumenanalyse und verbessern Sie die Signalzuverlässigkeit
  3. Entwickeln Sie intelligentere Algorithmen zur Datumsauswahl, um die Handelszeiten automatisch auf Grundlage der historischen Performance zu optimieren.
  4. Trendstärkefilter hinzugefügt, um den Handel mit schwachen Trends zu vermeiden
  5. Optimieren Sie den internen K-Line-Erkennungsalgorithmus, um die Genauigkeit der Mustererkennung zu verbessern

Zusammenfassen

Diese Strategie erstellt durch die Kombination von Analysemethoden aus mehreren Dimensionen ein relativ vollständiges Handelssystem. Der Hauptvorteil der Strategie liegt in ihren flexiblen Parametereinstellungen und dem intelligenten Stop-Loss-Mechanismus, der eine Anpassung an unterschiedliche Marktumgebungen ermöglicht. Durch kontinuierliche Optimierung und Verbesserung soll die Strategie unter verschiedenen Marktbedingungen eine stabile Leistung aufrechterhalten.

Strategiequellcode
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

//@version=5
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © zweiprozent

strategy('Buy Low over 18 SMA Strategy', overlay=true, default_qty_value=1)
xing = input(false, title='crossing 18 sma?')
sib = input(false, title='trade inside Bars?')
shortinside = input(false, title='trade inside range bars?')
offset = input(title='offset', defval=0.001)
belowlow = input(title='stop below low minus', defval=0.001)
alsobelow = input(false, title='Trade only above 18 sma?')
tradeabove = input(false, title='Trade with stop above order?')
trailingtwo = input(false, title='exit with two days low trailing?')


insideBar() =>  //and high <= high[1] and low >= low[1] ? 1 : 0
    open <= close[1] and close >= open[1] and close <= close[1] or open >= close[1] and open <= open[1] and close <= open[1] and close >= close[1] ? 1 : 0

inside() =>
    high <= high[1] and low >= low[1] ? 1 : 0
enterIndex = 0.0
enterIndex := enterIndex[1]

inPosition = not na(strategy.position_size) and strategy.position_size > 0
if inPosition and na(enterIndex)
    enterIndex := bar_index
    enterIndex



//if strategy.position_size <= 0 

//    strategy.exit("Long", stop=low[0]-stop_loss,comment="stop loss")


//if not na(enterIndex) and bar_index - enterIndex + 0 >= 0 

//    strategy.exit("Long", stop=low[0]-belowlow,comment="exit")

//    enterIndex := na

T_Low = request.security(syminfo.tickerid, 'D', low[0])
D_High = request.security(syminfo.tickerid, 'D', high[1])
D_Low = request.security(syminfo.tickerid, 'D', low[1])
D_Close = request.security(syminfo.tickerid, 'D', close[1])
D_Open = request.security(syminfo.tickerid, 'D', open[1])

W_High2 = request.security(syminfo.tickerid, 'W', high[1])
W_High = request.security(syminfo.tickerid, 'W', high[0])
W_Low = request.security(syminfo.tickerid, 'W', low[0])
W_Low2 = request.security(syminfo.tickerid, 'W', low[1])
W_Close = request.security(syminfo.tickerid, 'W', close[1])
W_Open = request.security(syminfo.tickerid, 'W', open[1])

//longStopPrice  = strategy.position_avg_price * (1 - stopl)
// Go Long - if prev day low is broken and stop loss prev day low
entryprice = ta.sma(close, 18)

//(high[0]<=high[1]or close[0]<open[0]) and low[0]>vwma(close,30) and time>timestamp(2020,12,0,0,0)

showMon = input(true, title='trade tuesdays?')
showTue = input(true, title='trade wednesdayy?')
showWed = input(true, title='trade thursday?')
showThu = input(true, title='trade friday?')
showFri = input(true, title='trade saturday?')
showSat = input(true, title='trade sunday?')
showSun = input(true, title='trade monday?')

isMon() =>
    dayofweek(time('D')) == dayofweek.monday and showMon
isTue() =>
    dayofweek(time('D')) == dayofweek.tuesday and showTue
isWed() =>
    dayofweek(time('D')) == dayofweek.wednesday and showWed
isThu() =>
    dayofweek(time('D')) == dayofweek.thursday and showThu
isFri() =>
    dayofweek(time('D')) == dayofweek.friday and showFri
isSat() =>
    dayofweek(time('D')) == dayofweek.saturday and showSat
isSun() =>
    dayofweek(time('D')) == dayofweek.sunday and showSun


clprior = close[0]
entryline = ta.sma(close, 18)[1]
//(isMon() or isTue()or isTue()or  isWed() 
noathigh = high < high[1] or high[2] < high[3] or high[1] < high[2] or low[1] < ta.sma(close, 18)[0] and close > ta.sma(close, 18)[0]

if noathigh and time > timestamp(2020, 12, 0, 0, 0) and (alsobelow == false or high >= ta.sma(close, 18)[0]) and (isMon() or isTue() or isWed() or isThu() or isFri() or isSat() or isSun()) and (high >= high[1] or sib or low <= low[1])  //((sib == false and inside()==true) or inside()==false) and (insideBar()==true or shortinside==false)
    if tradeabove == false
        strategy.entry('Long', strategy.long, limit=low + offset * syminfo.mintick, comment='long')
    if tradeabove == true and (xing == false or clprior < entryline)  // and high<high[1] 
        strategy.entry('Long', strategy.long, stop=high + offset * syminfo.mintick, comment='long')


//if time>timestamp(2020,12,0,0,0) and isSat()  
//    strategy.entry("Long", strategy.long, limit=0, comment="long")


//strategy.exit("Long", stop=low-400*syminfo.mintick)

//strategy.exit("Long", stop=strategy.position_avg_price-10*syminfo.mintick,comment="exit")
//strategy.exit("Long", stop=low[1]-belowlow*syminfo.mintick, comment="stop")

if strategy.position_avg_price > 0 and trailingtwo == false and close > strategy.position_avg_price
    strategy.exit('Long', stop=strategy.position_avg_price, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo == false and (low > strategy.position_avg_price or close < strategy.position_avg_price)
    strategy.exit('Long', stop=low[0] - belowlow * syminfo.mintick, comment='stop')

if strategy.position_avg_price > 0 and trailingtwo
    strategy.exit('Long', stop=ta.lowest(low, 2)[0] - belowlow * syminfo.mintick, comment='stop')