Stratégie de trading de jour avec breakout de clôture


Date de création: 2023-10-09 16:56:21 Dernière modification: 2023-10-09 16:56:21
Copier: 0 Nombre de clics: 641
1
Suivre
1617
Abonnés

Aperçu

La stratégie est une stratégie de trading simple et intraday basée sur la moyenne mobile, qui s’applique au graphique de cycles de 1 heure GBPUSD. Elle n’entre que lorsque le marché est ouvert à Londres et s’arrête à la clôture de Londres, ce qui est parfait pour les transactions de rupture de tendance à Londres.

Principe de stratégie

La stratégie utilise deux moyennes mobiles, une moyenne très rapide et une moyenne très lente. La logique est la suivante:

  1. La rupture n’est possible qu’à l’ouverture du marché à Londres (à 8h00). Le prix de clôture ou le prix le plus élevé peut faire plus que le prix de clôture ou le prix le plus bas peut faire moins que le prix le plus élevé.

  2. En même temps, il est nécessaire d’exiger un prix de clôture de la première ligne K supérieur à la moyenne lente pour faire plus et inférieur à la moyenne lente pour faire moins, afin de filtrer les situations non tendancielles.

  3. Le paramètre de stop-loss est très bas, entre 50 et 100 points.

  4. Il n’y a pas d’arrêt de jeu, et la fin de la journée à Londres est à 15 heures sans conditions.

Analyse des avantages

Il s’agit d’une stratégie de rupture très simple, mais qui présente les avantages suivants, car elle exploite judicieusement les caractéristiques de la tendance de la période londonienne:

  1. En effet, le risque d’un choc de la bourse est évité en n’entrant que lorsque la tendance est claire.

  2. Le seul moment où la transaction a été réalisée a été à l’heure de Londres, profitant ainsi de la volatilité de cette période.

  3. Il est équipé d’un petit stop-loss qui peut résister à un certain nombre de rebonds.

  4. Il n’y a pas de conditions pour quitter le terrain et ne pas risquer de passer la nuit.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Il n’y a pas de tendance claire à l’heure de Londres et il est possible que les transactions ne se poursuivent pas pendant de longues périodes.

  2. Risque d’arrêt dû à des pertes mineures. Après une percée, il peut y avoir un certain rebond causé par un arrêt.

  3. Risque de sortie prématurée lié à une période de sortie fixe. Il peut être nécessaire de prolonger la période de détention lors d’une forte tendance.

La contre-mesure consiste à assouplir de manière appropriée les règles d’entrée, à utiliser des stop-loss mobiles pour bloquer les gains et à ajuster le temps de sortie en fonction des conditions du marché.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Il a ajouté des filtres sur d’autres indicateurs, tels que le RSI, les bandes de Brent, etc., pour éviter davantage de chocs sur le marché.

  2. Optimiser les combinaisons mobiles de la même ligne et tester l’effet de la même ligne pour différents paramètres.

  3. Testez les différentes tailles de points d’arrêt pour trouver la meilleure plage d’arrêt.

  4. Le temps de départ est ajusté en temps réel en fonction de la situation, au lieu d’être fixé au moment de la clôture.

  5. Tester l’efficacité d’autres paires de devises et d’autres périodes de temps.

  6. Ajout de modules de contrôle des risques, tels que la gestion des fonds, le calcul de la taille des transactions, etc.

Résumer

L’ensemble de la stratégie est une stratégie de rupture de Londres très simple et pratique. L’avantage est que les règles sont simples et claires et que certains risques de négociation peuvent être évités par une utilisation rationnelle des caractéristiques de la période.

Code source de la stratégie
/*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")