Stratégie de négociation au jour de la rupture

Auteur:ChaoZhang est là., Date: 2023-10-09 16:56:21 Je suis désolé
Les étiquettes:

Résumé

Il s'agit d'une stratégie simple de trading journalier basée sur des moyennes mobiles, adaptée au GBPUSD sur une période d'une heure.

La logique de la stratégie

La stratégie utilise deux moyennes mobiles, l'une très rapide et l'autre très lente.

  1. N'entrez qu'à l'ouverture de Londres (8h) lorsque le prix dépasse le MA rapide. Allez long si la fermeture ou le haut dépasse le MA rapide, allez court si la fermeture ou le bas dépasse le MA rapide.

  2. Exigez que les barres précédentes soient proches au-dessus de l'EM lent pour le long, au-dessous de l'EM lent pour le court, pour filtrer les mouvements non tendance.

  3. Utilisez un très petit stop loss de 50 à 100 points.

  4. Pas de prise de bénéfices, sorties inconditionnelles à la clôture de Londres (15h00).

Analyse des avantages

Il s'agit d'une stratégie de rupture très simple, mais en utilisant correctement les caractéristiques de la tendance de la session de Londres, elle présente les avantages suivants:

  1. Il n'entre que dans des tendances claires, en évitant les risques de marché instables.

  2. Les transactions ne se déroulent que pendant la période de forte volatilité à Londres.

  3. Un petit stop loss peut résister à un certain retracement.

  4. Une sortie inconditionnelle évite les risques du jour au lendemain.

Analyse des risques

La stratégie comporte également certains risques:

  1. Peut rester stable pendant de longues périodes lorsque Londres n'a pas de tendance claire.

  2. Le risque d'arrêt des pertes est d'être arrêté sur les retracements.

  3. Risques de sortie anticipée lorsque des tendances fortes nécessitent des périodes de détention prolongées.

Les mesures d'atténuation comprennent l'élargissement des règles d'entrée, l'utilisation d'arrêts de trailing pour verrouiller les bénéfices et l'ajustement dynamique du temps de sortie en fonction des conditions du marché.

Directions d'optimisation

La stratégie peut être améliorée dans plusieurs domaines:

  1. Ajoutez d'autres filtres comme le RSI, les bandes de Bollinger pour éviter davantage les marchés agités.

  2. Optimiser les combinaisons de moyennes mobiles en testant différents paramètres.

  3. Testez différentes tailles de stop loss pour trouver une plage optimale.

  4. Ajustez dynamiquement le temps de sortie en fonction de l'action du prix plutôt que d'un temps fixe.

  5. Testez d'autres paires de devises et des délais.

  6. Ajoutez la gestion des risques comme la taille des positions en fonction de la taille du compte.

Résumé

Dans l'ensemble, il s'agit d'une stratégie de rupture de session de Londres très simple et pratique. Elle bénéficie de l'évitement de certains risques de trading en utilisant correctement les caractéristiques de la session. Il existe également des domaines pour d'autres optimisations afin d'améliorer la robustesse et la rentabilité.


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



Plus de