Die Ressourcen sind geladen. Beförderung...

Handelsstrategie mit niedrigem Breakout bei Offener Hochschließung

Schriftsteller:ChaoZhang, Datum: 2024-02-02 12:03:45
Tags:

img

Übersicht

Die Open High Close Low Breakout-Handelsstrategie ist eine Trendfolgestrategie. Sie identifiziert die kurzfristige Trendrichtung, indem sie die Beziehung zwischen den offenen und schließenden Preisen auf Kerzenkarten überprüft.

Strategie Logik

Die Kernlogik besteht darin, zu überprüfen, ob der offene Preis dem niedrigsten oder höchsten Preis der Kerze entspricht. Ein langes Signal wird ausgelöst, wenn der offene Preis dem niedrigen entspricht. Ein kurzes Signal wird ausgelöst, wenn der offene Preis dem hohen entspricht. Dies zielt darauf ab, Ausbrüche zu erfassen, die einen kurzfristigen Trend nahelegen.

Einmal ein Signal ausgelöst ist, wird eine Position mit fester Größe sofort geöffnet. Der Stop-Loss wird basierend auf dem ATR-Indikator festgelegt, um die Marktvolatilität zu verfolgen. Das Take-Profit-Level ist ein festes RR-Multiplikator der Stop-Loss-Distanz zum Einstiegspreis. Wenn der Preis entweder den Stop-Loss oder den Take-Profit erreicht, wird die Position entsprechend geschlossen.

Die Strategie gleicht außerdem alle Positionen zu einer vom Benutzer festgelegten Tages-Cut-off-Zeit ab, z. B. 30 Minuten vor dem Schließen des US-Marktes.

Analyse der Vorteile

Die wichtigsten Vorteile sind:

  1. Die Verwendung von Öffnungs-/Schließpreisen zur schnellen Identifizierung von Ausbruchssignalen.

  2. Klares Eintrittssignal, das leicht umzusetzen ist.

  3. Zeitgerechte Stop-Loss- und Profit-Taken, um Gewinne zu erzielen und Verluste zu begrenzen.

  4. Flachstellung an der Tagesgrenze, um das Risiko einer Übernachtung zu vermeiden.

  5. Marktneutral, gilt für Devisen, Aktien, Kryptowährungen usw.

Risikoanalyse

Einige Risiken zu berücksichtigen:

  1. Häufiger Stop Loss bei ATR in unruhigen Märkten.

  2. Überanpassung an bestimmte Instrumente und Sitzungen ohne zusätzliche Filter.

  3. Bei starken Trends kann das festgelegte Take-Profit-Niveau unterdurchschnittlich sein.

  4. Ein schlechtes Timing bei Flachstellungen könnte Trends verfehlen oder unnötige Verluste verursachen.

Verbesserungsbereiche

Einige Möglichkeiten, sie weiter zu optimieren:

  1. Experimentieren Sie mit verschiedenen Stop-Loss-Techniken für verschiedene Marktbedingungen.

  2. Fügen Sie Filter mit Impulsindikatoren usw. hinzu, um falsche Signale zu vermeiden.

  3. Dynamische Anpassung der Gewinnspanne basierend auf der Marktvolatilität.

  4. Optimieren Sie die tägliche Cutoff-Zeit für verschiedene Handelsinstrumente und Sitzungen.

Schlussfolgerung

Die Open High Close Low Breakout-Strategie bietet eine einfache Methode zur Handelsdynamik. Klare Einstiegs- und Ausstiegsregeln machen es einfach zu implementieren und zu verwalten. Weitere Optimierungen von Parametern wie Stop Loss, Take Profit, Filter würden jedoch die Robustheit bei mehr Marktbedingungen verbessern. Im Laufe der Zeit durch strenge Tests fein abgestimmt, hat sie das Potenzial, starke risikobereinigte Renditen zu erzielen.


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