Breakout-Day-Trading-Strategie zum Abschluss


Erstellungsdatum: 2023-10-09 16:56:21 zuletzt geändert: 2023-10-09 16:56:21
Kopie: 0 Klicks: 641
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie ist eine einfache Intra-Day-Trading-Strategie, basierend auf der Moving Average, die für den GBPUSD 1-Stunden-Zyklus-Chart gilt. Sie tritt nur bei London-Open ein und tritt bei London-Closing aus, was für den Trend-Breakout-Handel in der Londoner Zeit geeignet ist.

Strategieprinzip

Die Strategie verwendet zwei bewegliche Durchschnittslinien, eine sehr schnelle Durchschnittslinie und eine sehr langsame Durchschnittslinie. Die spezifische Logik lautet:

  1. Nur bei London-Eröffnung (um 8 Uhr) kann ein Durchbruch eingeleitet werden. Die Entscheidung erfolgt, ob der Schlusskurs oder der höchste Preis die schnelle Durchschnittslinie überschreitet oder ob der Schlusskurs oder der niedrigste Preis die schnelle Durchschnittslinie überschreitet.

  2. Gleichzeitig wird verlangt, dass der Schlusskurs der vorherigen K-Linie höher als der langsame Durchschnitt ist, um mehr zu tun, und niedriger als der langsame Durchschnitt ist, um sich zu befreien, um nicht-trendige Situationen zu filtern.

  3. Die Stop-Loss-Einstellung ist auf ein Minimum von 50 bis 100 Punkten eingestellt.

  4. Das Spiel ist ohne Stopp, und wenn London zu Ende ist (um 15 Uhr), ist es unbedingt abgeschafft.

Analyse der Stärken

Dies ist eine sehr einfache Durchbruchstrategie, die jedoch die folgenden Vorteile hat, da sie die Trendmerkmale der London-Zeit angemessen nutzt:

  1. Es ist wichtig zu wissen, dass der Markt nur dann in Schwierigkeiten gerät, wenn die Trends klar sind.

  2. Die Börse hat den Handel nur in der Londoner Zeit eröffnet, um die hohen Schwankungen dieser Zeit zu nutzen.

  3. Das System ist mit einem kleinen Stop-Loss ausgestattet und kann einem gewissen Ausmaß an Rückstoß standhalten.

  4. Das ist eine sehr schwierige Aufgabe, denn es geht nicht darum, über Nacht zu bleiben.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Es gibt keine eindeutigen Trends in der Londoner Zeit und es kann lange Zeit ohne Handel sein.

  2. Das Risiko von Stop-Loss durch kleine Stop-Losses. Nach dem Durchbruch kann es zu einem gewissen Ausmaß an Rebound durch Stop-Losses kommen.

  3. Das Risiko eines vorzeitigen Ausstiegs durch eine feste Ausgangszeit. Bei starken Trends kann eine Verlängerung der Haltedauer erforderlich sein.

Die Gegenmaßnahmen bestehen darin, die Einstiegsregeln angemessen zu lockern, mobile Stop-Losses zu verwenden, um Gewinne zu sichern, und die Ausstiegszeit entsprechend der Marktlage anzupassen.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Die Filter für andere Indikatoren, wie RSI, Bollinger Bands und andere, werden hinzugefügt, um weitere Marktschwankungen zu vermeiden.

  2. Optimieren Sie die Kombination von beweglichen Gleichungen und testen Sie die Gleichungswirkung verschiedener Parameter.

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

  4. Die Startzeit wird in Echtzeit angepasst, je nach Situation, anstatt zu einem festen Schlusszeitpunkt zu starten.

  5. Test der Wirkung anderer Währungspaare und anderer Zeiträume.

  6. Eingliederung von Risikokontrollmodulen, z. B. Geldverwaltung, Berechnung der Transaktionsgröße usw.

Zusammenfassen

Die Strategie insgesamt ist eine sehr einfache und praktische London-Zeit-Breaking-Strategie. Der Vorteil ist, dass die Regeln einfach und klar sind und einige Handelsrisiken durch die vernünftige Verwendung von Zeitabschnitten vermieden werden können. Es gibt auch einige Optimierungsmöglichkeiten, die die Stabilität und Profitabilität der Strategie weiter verbessern können, wenn die Tests weiter optimiert werden.

Strategiequellcode
/*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")