Supertrend-Trailing-Stop-Loss-Strategie basierend auf Heikin Ashi


Erstellungsdatum: 2024-02-06 14:43:14 zuletzt geändert: 2024-02-06 14:43:14
Kopie: 0 Klicks: 606
1
konzentrieren Sie sich auf
1166
Anhänger

Supertrend-Trailing-Stop-Loss-Strategie basierend auf Heikin Ashi

Strategieübersicht

Die Strategie ist eine Trend-Tracking-Stopp-Strategie, die Heikin Ashi-Strecken und Supertrend-Indikatoren kombiniert. Sie nutzt die Heikin Ashi-Strecken, um Marktlärm zu filtern, die Supertrend-Indikatoren, um die Trendrichtung zu bestimmen, und nutzt die Supertrends als dynamische Stop-Line, um effiziente Trend-Tracking und Risikokontrolle zu ermöglichen.

Strategieprinzip

  1. Berechnen Sie die Heikin Ashi-Linie, einschließlich des Eröffnungspreises, des Schlusspreises, des Höchstpreises und des Tiefpreises.
  2. Berechnung der Supertrend-Indikatoren: Auf- und Abgleisung basierend auf ATR und Preis.
  3. Die Kombination von Heikin Ashi-Streifen und Supertrends bestimmt die Richtung des Trends.
  4. Bei Heikin Ashi wird ein bullisher Trend eingesetzt, wenn der Schlusskurs der K-Linie näher an der Oberbahn des Supertrends liegt als der Schlusskurs der K-Linie. Bei Heikin Ashi wird ein bearisher Trend eingesetzt, wenn der Schlusskurs der K-Linie näher an der Unterbahn des Supertrends liegt als der Schlusskurs der K-Linie.
  5. Bei bullish Trends wird die Stop-Line mit dem Supertrend aufgetrieben; bei Beobachtungstrends wird die Stop-Line mit dem Supertrend aufgetrieben.

Strategische Vorteile

  1. Mit Hilfe der Heikin-Ashi-Filterung können Trends besser identifiziert werden.
  2. Der Supertrend dient als dynamischer Stop-Loss, um die Gewinne des Trends zu maximieren und einen zu großen Rückzug zu vermeiden.
  3. In Kombination mit unterschiedlichen Zeitspannen wird die Überschneidbarkeit bestimmt, um ein höheres oder niedrigeres Signal zu bestätigen.
  4. Die Zeit-Plating-Funktion vermeidet die Einwirkung irrationaler Handlungen zu einem bestimmten Zeitpunkt.

Strategisches Risiko

  1. Bei einer Trendwende kann man leicht verlieren. Die Stop-Line kann entsprechend gelockert werden, um das Risiko zu verringern.
  2. Die falsche Einstellung der Supertrend-Parameter kann dazu führen, dass der Stop-Loss zu breit oder zu eng ist. Verschiedene Kombinationen von Parametern können getestet werden.
  3. Die Vermögensverwaltung wird nicht berücksichtigt.
  4. Die Transaktionskosten werden nicht berücksichtigt.

Richtung der Strategieoptimierung

  1. Optimierung der Parameterkombinationen der Supertendenzen, um die optimalen Parameter zu finden.
  2. Erweiterung der Positionskontrolle
  3. Kostenfaktoren wie Gebühren, Gleitpunkte usw.
  4. Die Stop-Loss-Grenze kann flexibel angepasst werden, je nachdem, wie stark oder schwach der Trend ist.
  5. Erwägen Sie die Filterung von Eintrittssignalen in Kombination mit anderen Indikatoren.

Zusammenfassen

Die Strategie integriert die Vorzüge der beiden Indikatoren Heikin Ashi und Supertrends, um die Trendrichtung zu erfassen und gleichzeitig die automatische dynamische Verfolgung von Stopps und Verlusten durch Supertrends zu nutzen, um Trendgewinne zu sichern. Das Risiko der Strategie besteht hauptsächlich aus Trendumkehr und Parameteroptimierung, die durch weitere Optimierung verbessert werden können. Insgesamt verbessert die Strategie die Stabilität des Handelssystems und den Gewinnraum durch die Integration der Indikatoren.

Strategiequellcode
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 4h
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/
// © ringashish

//@version=4
strategy("sa-strategy with HTF-TSL", overlay=true)


Pd = input(title="ATR Period", type=input.integer, defval=4)
Factor = input(title="ATR Multiplier", type=input.float, step=0.1, defval=2)
ST= supertrend(Factor, Pd)

heikinashi_close = security(heikinashi(syminfo.tickerid), timeframe.period, close)
heikinashi_low = security(heikinashi(syminfo.tickerid), timeframe.period, low)
heikinashi_open = security(heikinashi(syminfo.tickerid), timeframe.period, open)
heikinashi_high = security(heikinashi(syminfo.tickerid), timeframe.period, high)

heikinashi_close30 = security(heikinashi(syminfo.tickerid), "30", close)
//res1 = input("30", type=input.resolution, title="higher Timeframe")


//CCI TSL

res = input("240",type=input.resolution,title = "Higher Time Frame")
CCI = input(20)
ATR = input(5)
Multiplier=input(1,title='ATR Multiplier')
original=input(false,title='original coloring')
thisCCI = cci(close, CCI)
lastCCI = nz(thisCCI[1])


calcx()=> 
    bufferDn= high + Multiplier * sma(tr,ATR)
    bufferUp= low - Multiplier * sma(tr,ATR)
    if (thisCCI >= 0 and lastCCI < 0) 
        bufferUp := bufferDn[1]
    if (thisCCI <= 0 and lastCCI > 0) 
        bufferDn := bufferUp[1]

    if (thisCCI >= 0)
        if (bufferUp < bufferUp[1])
            bufferUp := bufferUp[1]
    else
        if (thisCCI <= 0)
            if (bufferDn > bufferDn[1])
                bufferDn := bufferDn[1]

   
    x = 0.0
    x := thisCCI >= 0 ?bufferUp:thisCCI <= 0 ?bufferDn:x[1]
    x

tempx = calcx()

calcswap() =>
    swap = 0.0
    swap := tempx>tempx[1]?1:tempx<tempx[1]?-1:swap[1]
    swap

tempswap = calcswap()

swap2=tempswap==1?color.blue:color.orange
swap3=thisCCI >=0 ?color.blue:color.orange
swap4=original?swap3:swap2

//display current timeframe's Trend

plot(tempx,"CTF",color=swap4,transp=0,linewidth=2, style = plot.style_stepline)


htfx = security(syminfo.tickerid,res,tempx[1],lookahead = barmerge.lookahead_on)
htfswap4 = security(syminfo.tickerid,res,swap4[1],lookahead = barmerge.lookahead_on)

plot(htfx,"HTF",color=htfswap4,transp=0,linewidth=3,style = plot.style_stepline)









//supertrend
Supertrend(Factor, Pd) =>
    Up=hl2-(Factor*atr(Pd))
    Dn=hl2+(Factor*atr(Pd))
    
    TrendUp = 0.0
    TrendUp := heikinashi_close[1]>TrendUp[1] ? max(Up,TrendUp[1]) : Up
    TrendDown = 0.0
    TrendDown := heikinashi_close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
    Trend = 0.0
    Trend := heikinashi_close > TrendDown[1] ? 1: heikinashi_close< TrendUp[1]? -1: nz(Trend[1],1)
    Tsl = Trend==1? TrendUp: TrendDown
    
    S_Buy = Trend == 1 ? 1 : 0
    S_Sell = Trend != 1 ? 1 : 0
    
    [Trend, Tsl]

[Trend,Tsl] = Supertrend(Factor, Pd)
// Security
//ST1_Trend_MTF = security(syminfo.tickerid, res1, Tsl,barmerge.lookahead_on)
//plot(ST1_Trend_MTF, "higher ST") 

crossdn = crossunder(heikinashi_close,Tsl) or crossunder(heikinashi_close[1],Tsl) or crossunder(heikinashi_close[2],Tsl) or heikinashi_close < Tsl
crossup = crossover(heikinashi_close,Tsl) or crossover(heikinashi_close[1],Tsl) or crossover(heikinashi_close[2],Tsl) or heikinashi_close > Tsl
plot(Tsl,"ST",color = color.black,linewidth =2)
plot(ema(heikinashi_close,20),"EMA 20",color=color.red)
plot(hma(heikinashi_close,15),"HMA 15",color=color.green)
plot(ema(heikinashi_close,15),"EMA 15",color=color.black)

closedown = (heikinashi_close < hma(heikinashi_close,15) and heikinashi_high > hma(heikinashi_close,15)) or(heikinashi_close < ema(heikinashi_close,20) and heikinashi_high > ema(heikinashi_close,20))
closeup = (heikinashi_close > hma(heikinashi_close,15) and heikinashi_low < hma(heikinashi_close,15)) or (heikinashi_close > ema(heikinashi_close,20) and heikinashi_low < ema(heikinashi_close,20))

buy = heikinashi_open == heikinashi_low and closeup and crossup  and close > htfx
//buy = heikinashi_open == heikinashi_low and heikinashi_close > ema(close,20) and heikinashi_low < ema(close,20) and crossup
buyexit = cross(close,tempx) //heikinashi_open == heikinashi_high //and heikinashi_close < ema(close,15) and heikinashi_high > ema(close,15)

//if heikinashi_close30[1] < ST1_Trend_MTF
//sell = heikinashi_open == heikinashi_high and heikinashi_close < ema(close,20) and heikinashi_high > ema(close,20) and rsi(close,14)<60 and crossdn
sell = heikinashi_open == heikinashi_high and closedown and rsi(close,14)<55 and crossdn  and close < htfx
sellexit = cross(close,tempx) //heikinashi_open == heikinashi_low //and heikinashi_close > ema(close,15) and heikinashi_low < ema(close,15)

rg = 0
rg := buy ? 1 : buyexit ? 2 : nz(rg[1])

longLogic = rg != rg[1] and rg == 1 
longExit = rg != rg[1] and rg == 2 

//plotshape(longExit,"exit buy",style = shape.arrowup,location = location.belowbar,color = color.red, text ="buy exit", textcolor = color.red)
//plotshape(longLogic,"BUY",style = shape.arrowup,location = location.belowbar,color = color.green, text ="buy", textcolor= color.green)

nm = 0
nm := sell ? 1 : sellexit ? 2 : nz(nm[1])

shortLogic = nm != nm[1] and nm == 1 
shortExit = nm != nm[1] and nm == 2 

//plotshape(shortExit,"exit sell",style = shape.arrowup,location = location.belowbar,color = color.red, text ="sell exit", textcolor = color.red)
//plotshape(shortLogic,"SELL",style = shape.arrowup,location = location.belowbar,color = color.green, text ="sell", textcolor= color.green)


//Exit at particular time

ExitHour = input(title="Exit Hour Of Day", type=input.integer, defval=15, step = 5, maxval = 24, minval = 0)
ExitMint = input(title="Exit Minute Of Day", type=input.integer, defval=15, step = 5, maxval = 24, minval = 0)
bgc = input(title="Highlight Background Color?", type=input.bool, defval=true)
mRound(num,rem) => (floor(num/rem)*rem)
exitTime = (hour(time) >= ExitHour and (minute == mRound(ExitMint, timeframe.multiplier))) ? 1 : 0
exitTime := exitTime == 0 ? (hour(time) >= ExitHour and (minute + timeframe.multiplier >= ExitMint)) ? 1 : 0 : exitTime

MarketClose =  exitTime and not exitTime[1]

alertcondition(exitTime and not exitTime[1], title="Intraday Session Close Time", message="Close All Positions")
bgcolor(exitTime and not exitTime[1] and bgc ? #445566 : na, transp =40)



longCondition = longLogic
if (longCondition)
    strategy.entry("long", strategy.long)
 
    


shortCondition = shortLogic
if (shortCondition)
    strategy.entry("short", strategy.short)
    

strategy.close("short", when =cross(close,tempx)  or MarketClose)
strategy.close( "long", when =cross(close,tempx) or MarketClose )