Handelsstrategie für den Tag des Ausbruchs

Schriftsteller:ChaoZhang, Datum: 2023-10-09 16:56:21
Tags:

Übersicht

Dies ist eine einfache Tageshandelsstrategie, die auf gleitenden Durchschnitten basiert und für den GBPUSD 1-Stunden-Zeitrahmen geeignet ist.

Strategie Logik

Die Strategie verwendet zwei gleitende Durchschnitte, eine sehr schnelle und eine sehr langsame.

  1. Eintritt nur beim London Open (8 AM), wenn der Preis den schnellen MA durchbricht.

  2. Vorläufige Bars müssen für lange über dem langsamen MA liegen und für kurze unter dem langsamen MA, um nicht-trendige Bewegungen auszufiltern.

  3. Verwenden Sie einen sehr kleinen Stop-Loss von 50-100 Punkten.

  4. Kein Gewinn, ausgeht bedingungslos bei der Londoner Schließung (15:00).

Analyse der Vorteile

Dies ist eine sehr einfache Breakout-Strategie, aber durch die korrekte Nutzung der Londoner Sitzungstrend-Eigenschaften hat sie folgende Vorteile:

  1. Nur in klaren Trends eingeht, um unbeständige Marktrisiken zu vermeiden.

  2. Die Handelsüberschreitungen erfolgen nur während der hohen Volatilität in London.

  3. Ein kleiner Stop-Loss kann einem Rückzug standhalten.

  4. Ein bedingungsloser Ausstieg vermeidet über Nacht Risiken.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Kann für längere Zeit gleichbleiben, wenn London keinen klaren Trend hat.

  2. Stop-Loss-Risiken, wenn Sie auf Retracements gestoppt werden.

  3. Risiken eines vorzeitigen Ausstiegs, wenn starke Trends eine längere Haltedauer erfordern.

Die Maßnahmen umfassen die Erweiterung der Einstiegsregeln, die Verwendung von Trailing Stops zur Gewinnsicherung und die dynamische Anpassung der Ausgangszeiten anhand der Marktbedingungen.

Optimierungsrichtlinien

Die Strategie kann in mehreren Bereichen verbessert werden:

  1. Fügen Sie andere Filter wie RSI, Bollinger Bands hinzu, um weiter unruhige Märkte zu vermeiden.

  2. Optimieren Sie Kombinationen von gleitenden Durchschnitten, indem Sie verschiedene Parameter testen.

  3. Versuche verschiedene Stop-Loss-Größen, um einen optimalen Bereich zu finden.

  4. Dynamische Anpassung der Ausgangszeiten anhand der Kursentwicklung und nicht anhand einer festen Zeit.

  5. Testen Sie andere Währungspaare und Zeitrahmen.

  6. Hinzu kommt das Risikomanagement wie die Positionsgröße auf der Grundlage der Kontogröße.

Zusammenfassung

Insgesamt ist dies eine sehr einfache und praktische London Session Breakout Strategie. Sie profitiert von der Vermeidung bestimmter Handelsrisiken durch die korrekte Nutzung der Session-Eigenschaften. Es gibt auch Bereiche für weitere Optimierungen zur Verbesserung der Robustheit und Rentabilität. Die Strategie bietet einen nützlichen Rahmen und eine Vorlage für den effektiven Handel mit London Session Breakouts.


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// strategy(title="2 ma breakout",shorttitle="2 ma breakout", initial_capital=10000,overlay=true, commission_type = strategy.commission.cash_per_contract, commission_value = 0.00008 )
timeinrange(res, sess) => time(res, sess) != 0

//Change false to false = You have to turn on, won't show up by default
//****Always use lowercase letters

doNYOpen = input(defval=false, type = input.bool, title="NY Open On")
doNYSession = input(defval=false, type = input.bool, title="NY Session On")
doNYClose = input(defval=false, type = input.bool, title="NY Close On")

doAussieOpen = input(defval=false, type = input.bool, title="Aussie Open On")
doAussieSession = input(defval=false, type = input.bool, title="Aussie Session On")
doAussieClose = input(defval=false, type = input.bool, title="Aussie Close On")

doAsiaOpen = input(defval=false, type = input.bool, title="Asia Open On")
doAsiaSession = input(defval=false, type = input.bool, title="Asia Session On")
doAsiaClose = input(defval=false, type = input.bool, title="Asia Close On")

doEurOpen = input(defval=true, type = input.bool, title="Euro Open On")
doEurSession = input(defval=true, type = input.bool, title="Euro Session On")
doEurClose = input(defval=true, type = input.bool, title="Euro Close On")

//You can copy and paste these colors. white - silver - gray - maroon - red - purple - fuchsia - green - lime
//   olive - yellow - navy - blue - teal - aqua - orange 

nySessionStart = color.olive
nySession = color.olive
nySessionEnd = color.olive
asiaSessionStart = color.blue
asiaSession = color.blue
asiaSessionEnd = color.blue
europeSessionStart = color.red
europeSession = color.red
europeSessionEnd = color.red
colorwhite = color.white

//****Note ---- Use Military Times --- So 3:00PM = 1500


bgcolor(doAsiaSession and timeinrange(timeframe.period, "1800-0400") ? asiaSession : na, transp=75)
//bgcolor(timeinrange(timeframe.period, "0000-0300") ? color.white  : na, transp=75)
bgcolor(doEurSession and timeinrange(timeframe.period, "0300-1100") ? europeSession : na, transp=75)
bgcolor(doNYSession and timeinrange(timeframe.period, "0800-1600") ? nySession : na, transp=75)

active = input(true, title="Show On Chart")
pricehigh = security(syminfo.tickerid, '60', high[0])
pricelow = security(syminfo.tickerid, '60', low[0])
//Daily Plots
offs_daily = 0 
hiHighs = 0
loLows = 0
//plot(timeinrange(timeframe.period, "0000-0300") and pricehigh ? pricehigh  : na, title="Previous Daily High", style=plot.style_line, linewidth=2, color=color.gray)
//plot(timeinrange(timeframe.period, "0000-0300") and pricelow ? pricelow : na, title="Previous Daily Low", style=plot.style_linebr, linewidth=2, color=color.gray)

if(timeinrange(timeframe.period, "0000-0300"))
    hiHighs = highest(high, 3)
    loLows = lowest(low, 3)
    

// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2020, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true


len = input(2)
src = input(close, title="Source")
out = sma(src, len)

lena = input(200, minval=1, title="Length slow")
srca = input(close, title="Source")
outa = ema(srca, lena)

//tp = input(100, title="tp")
sl = input(66, title="sl")
// if(smabool)
//     out := sma(src, len)
// else if(emabool)
//     out := ema(src, len)
// else if(hmabool)
//     out := hma(src, len)
// else if(vmabool)
//     out := wma(src, len)  
// else if(vwmabool)
//     out := vwma(src, len)   
// else if(smmabool)
//     out := sma(src, len)  
 
plot(out, color=color.white, title="MA")
plot(outa, color=color.white, title="MA")

longC = timeinrange(timeframe.period, "0300-0400") and (crossover(close,out) or crossover(high,out)) and close[1] > outa and time_cond
shortC = timeinrange(timeframe.period, "0300-0400") and (crossunder(close,out) or crossunder(low,out)) and close[1] < outa and time_cond



//inputlondon = input(false, title="london session")
//inputny = input(false, title="new york session")

//if(inputlondon==true)

strategy.initial_capital = 50000

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade

temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100      //Convert to contracts
size = temp03 - temp03%1 //Normalize to 1000s (Trade size)
if(size < 1)
    size := 1         //Set min. lot size


strategy.entry("long",1,when=longC)
//strategy.close("long", when = crossunder(close,out) or not (timeinrange(timeframe.period, "0300-1000")))
strategy.close("long", when =  not (timeinrange(timeframe.period, "0300-0945")))
strategy.exit("x_long","long", loss = sl)
     
    
strategy.entry("short",0,when=shortC)
//strategy.close("short",when = crossover(close,out) or not (timeinrange(timeframe.period, "0300-1000")))
strategy.close("short",when = not (timeinrange(timeframe.period, "0300-0945")))

strategy.exit("x_short","short", loss = sl)

//strategy.exit("closelong", "RSI_BB_LONG" , profit = close * 0.01 / syminfo.mintick, loss = close * 0.01 / syminfo.mintick, alert_message = "closelong")
//strategy.exit("closeshort", "RSI_BB_SHORT" , profit = close * 0.01 / syminfo.mintick, loss = close * 0.01 / syminfo.mintick, alert_message = "closeshort")



Mehr