Strategie zur Verfolgung von Stop-Loss-Verlusten mit offener, hoher und niedriger Stop-Loss-Verlustrate

Schriftsteller:ChaoZhang, Datum: 2024-02-18 14:30:08
Tags:

img

Übersicht

Diese Strategie basiert auf den offenen, hohen und niedrigen Daten von Kerzenkarten, um Trendumkehrpunkte für Einträge zu identifizieren. Nach den Einträgen werden Stop-Loss-Linien basierend auf dem ATR-Indikator festgelegt und verfolgt. Ziele werden auch basierend auf dem Risiko-Rendite-Verhältnis berechnet. Wenn der Preis entweder das Stop-Loss- oder Gewinnziel erreicht, werden Aufträge an geschlossene Positionen gesendet.

Strategie Logik

Die Einstiegssignale dieser Strategie stammen von den offenen, hohen und niedrigen Preisen. Ein Kaufsignal wird erzeugt, wenn der Eröffnungspreis dem Tief des Kerzenstäbels entspricht, und ein Verkaufssignal wird erzeugt, wenn der Eröffnungspreis dem Hoch entspricht, was auf potenzielle Trendumkehrmöglichkeiten hinweist.

Nach dem Eintritt wird der dynamische Trailing Stop Loss auf der Grundlage des ATR-Indikators berechnet. Der Long Stop Loss wird auf das niedrigste Tief der letzten N-Bars minus 1 ATR gesetzt; der Short Stop Loss wird auf das höchste Hoch der letzten N-Bars plus 1 ATR gesetzt. Die Stop Loss-Linie wird dynamisch auf die Preisbewegungen aktualisiert.

Die Gewinnziele werden auf der Grundlage der Festlegung des Risiko-Rendite-Verhältnisses berechnet. Das Long-Ziel wird zum Einstiegspreis plus (die Risikodifferenz zwischen Einstiegspreis und Stop-Loss multipliziert mit der Risiko-Rendite-Verhältnis) festgelegt; das Short-Ziel wird zum Einstiegspreis minus (die Risikodifferenz zwischen Stop-Loss und Einstiegspreis multipliziert mit der Risiko-Rendite-Verhältnis) festgelegt.

Wenn der Preis entweder den Stop-Loss- oder das Gewinnziel erreicht, werden Aufträge auf Flattenpositionen gesendet.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Einfache und klare Eintrittssignale, vermeiden mehrfache Schläge.

  2. Dynamisches ATR-Trailing-Stopp sperrt die Gewinne und verhindert das Verfolgen von Höhen und Tiefen.

  3. Die Steuerung des Risiko-Rendite-Verhältnisses verhindert, dass Gewinne auf dem Tisch bleiben und übertrieben gehandelt wird.

  4. Anwendbar auf verschiedene Produkte, leicht zu optimieren.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Eintrittssignale können in gewissem Maße zurückbleiben und den besten Markteintritt verpassen.

  2. Ein Stopp-Loss ist zu eng oder zu locker, was zu unnötigen Stopp-Losses oder fehlenden Gewinnen führt.

  3. Keine Trendbestimmung, anfällig dafür, in unterschiedlichen Märkten gefangen zu sein.

  4. Nicht in der Lage, über Nacht Positionen zu handhaben.

Die Optimierungsrichtungen sind:

  1. Einbeziehen Sie andere Indikatoren für Trendverzerrungen, um Fehler zu vermeiden.

  2. Die ATR-Parameter werden verfeinert oder eine Volatilitätskontrolle für einen besseren Stop-Loss hinzugefügt.

  3. Hinzufügen einer Trendfilterung zur Verringerung des Signalrausches.

  4. Hinzufügen von Übernachtungsposition für bestimmte Produkte.

Schlussfolgerung

Dies ist eine einfache und unkomplizierte Strategie mit einer klaren Eintrittslogik, einer angemessenen Stop-Loss-Methodik und einer guten Risikokontrolle. Es gibt jedoch einige Einschränkungen wie unzureichende Trendverzerrung, Signalverzögerung usw. Diese Mängel weisen auch auf Richtungen für die zukünftige Optimierung hin. Durch die Einbeziehung mehrerer Indikatorfilter und Risikomanagement-Module kann diese Strategie weiter verbessert und robuster gemacht werden.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Open-High-Low strategy

strategy('Strategy: OLH', shorttitle="OLH", overlay=true )

// Inputs
slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings")
showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings")
// Trade related
rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings")
lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings")


// Utils
green(open, close) => close > open ? true : false
red(open, close) => close < open ? true : false
body(open, close) => math.abs(open - close)
lowerwick = green(open, close) ? open - low : close - low
upperwick = green(open, close) ? high - close : high - open
crange = high - low
crangep = high[1] - low[1] // previous candle's candle-range
bullish = close > open ? true : false
bearish = close < open ? true : false


// Trade signals
longCond = barstate.isconfirmed and (open == low)
shortCond = barstate.isconfirmed and (open == high)

// For SL calculation
atr = ta.atr(slAtrLen)
highestHigh = ta.highest(high, 7)
lowestLow = ta.lowest(low, 7)
longStop = showSLLines ? lowestLow - (atr * 1) : na
shortStop = showSLLines ? highestHigh + (atr * 1) : na
plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross)
plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross)

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long")
        sl := longStop
        target := close + ((close - longStop) * rrRatio)
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short")
        sl := shortStop
        target := close - ((shortStop - close) * rrRatio)
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "Close all entries at end of day.")



Mehr