Die Ressourcen sind geladen. Beförderung...

SMA-basierte intelligente Trailing Stop-Strategie mit Intraday-Mustererkennung

Schriftsteller:ChaoZhang, Datum: 2025-01-17 16:04:09
Tags:SMADie KommissionATR

 SMA-Based Intelligent Trailing Stop Strategy with Intraday Pattern Recognition

Übersicht

Dies ist eine Strategie, die auf dem 18-tägigen einfachen gleitenden Durchschnitt (SMA18) basiert und die Intraday-Mustererkennung und intelligente Trailing-Stop-Mechanismen kombiniert. Die Strategie beobachtet hauptsächlich die Preisbeziehung zu SMA18, zusammen mit Intraday-Hoch- und Tiefpositionen, um lange Einträge zu optimalen Zeiten auszuführen. Sie verwendet einen flexiblen Stop-Loss-Ansatz, der sowohl feste Stop-Loss-Punkte als auch eine zweitägige Low-Trailing-Stop-Option bietet.

Strategieprinzipien

Die Kernlogik umfasst mehrere Schlüsselelemente: Eintrittsbedingungen basierend auf der Preisposition im Verhältnis zum 18-Tage- gleitenden Durchschnitt mit Optionen für Ausbruch oder Über-Line-Einträge 2. Analyse von Intraday-Candlestick-Mustern, insbesondere mit Schwerpunkt auf Inside Bar-Mustern zur Verbesserung der Eingabegenauigkeit 3. Selektiver Handel nach den Merkmalen des Wochentages 4. Eintrittspreise mit Limitordern mit einem geringen Aufwärtsverschiebung von Tiefstständen zur Verbesserung der Füllwahrscheinlichkeit 5. Doppel Stop-Loss-Mechanismen: feste Stops basierend auf dem Einstiegspreis oder Trailing Stops basierend auf den zweitägigen Tiefs

Strategische Vorteile

  1. Kombiniert technische Indikatoren und Preismuster für zuverlässigere Einstiegssignale
  2. Flexibler Mechanismus zur Auswahl der Handelszeiten für die marktspezifische Optimierung
  3. Intelligentes Stop-Loss-System, das sowohl Gewinne schützt als auch eine angemessene Preisbewegung ermöglicht
  4. Sehr anpassungsfähige Parameter für verschiedene Marktumgebungen
  5. Wirksame Fehlsignalreduktion durch Inside Bar-Musterfilterung

Strategische Risiken

  1. Festgesetzte Stopps können in volatilen Märkten zu einem frühen Ausstieg führen
  2. Ein Trailing-Stopp könnte bei schnellen Umkehrungen zu minimalen Gewinnen führen
  3. Häufige Inside Bars während der Konsolidierung können zu Überhandelungen führen Schadensminderungsmaßnahmen
  • Dynamische Stop-Loss-Anpassung auf Basis der Marktvolatilität
  • Hinzufügung von Trendbestätigungsindikatoren
  • Umsetzung von Mindestgewinnzielen zur Filterung von qualitativ schlechten Geschäften

Optimierungsrichtlinien

  1. Einbeziehung von Volatilitätsindikatoren (wie ATR) für die dynamische Stop-Loss-Anpassung
  2. Ergänzung der Lautstärkanalyse zur Verbesserung der Signalzuverlässigkeit
  3. Entwicklung intelligenter Algorithmen zur Datenauswahl auf der Grundlage historischer Leistungen
  4. Implementieren Sie Trendstärke-Filter, um den Handel mit schwachen Trends zu vermeiden
  5. Verbesserte Algorithmen zur Erkennung von Mustern in der Inside Bar

Zusammenfassung

Diese Strategie baut ein umfassendes Handelssystem auf, indem sie mehrere analytische Dimensionen kombiniert. Seine Kernstärken liegen in flexiblen Parameter-Einstellungen und intelligenten Stop-Loss-Mechanismen, die eine Anpassung an verschiedene Marktumgebungen ermöglichen. Durch kontinuierliche Optimierung und Verbesserung zeigt die Strategie vielversprechende Leistungen bei unterschiedlichen Marktbedingungen.


/*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')




Verwandt

Mehr