Estrategia de negociación del día de ruptura

El autor:¿ Qué pasa?, Fecha: 2023-10-09 16:56:21
Las etiquetas:

Resumen general

Esta es una estrategia de negociación diaria simple basada en promedios móviles, adecuada para el marco de tiempo de GBPUSD de 1 hora. Solo entra en la apertura de Londres y sale en el cierre de Londres, lo que la hace ideal para el comercio de ruptura de tendencia durante la sesión de Londres.

Estrategia lógica

La estrategia utiliza dos promedios móviles, uno muy rápido y otro muy lento.

  1. Sólo entra en el abierto de Londres (8 AM) cuando el precio rompe el MA rápido. Ir largo si el cierre o alto rompe por encima del MA rápido, ir corto si el cierre o bajo rompe por debajo del MA rápido.

  2. Requerir que los bares anteriores cerradas estén por encima de la MA lenta para largo, por debajo de la MA lenta para corto, para filtrar los movimientos no tendenciales.

  3. Utilice un stop loss muy pequeño de 50-100 puntos.

  4. No tomar ganancias, sale incondicionalmente en el cierre de Londres (15:00).

Análisis de ventajas

Esta es una estrategia de ruptura muy simple, pero al utilizar adecuadamente las características de la tendencia de la sesión de Londres, tiene las siguientes ventajas:

  1. Solo entra en tendencias claras, evitando riesgos de mercado agitados.

  2. Las operaciones se rompen solo durante el período de alta volatilidad de Londres.

  3. Las pequeñas pérdidas de parada pueden soportar alguna retroceso.

  4. La salida incondicional evita los riesgos de la noche a la mañana.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Puede permanecer estable durante largos períodos cuando Londres no tiene una tendencia clara.

  2. Los riesgos de pérdida de parada de ser detenido en retracements.

  3. Los riesgos de salida anticipada cuando las tendencias fuertes requieren períodos de retención prolongados.

Las mitigaciones incluyen ampliar las reglas de entrada, usar paradas de trailing para bloquear las ganancias y ajustar dinámicamente el tiempo de salida en función de las condiciones del mercado.

Direcciones de optimización

La estrategia puede mejorarse en varios ámbitos:

  1. Añadir otros filtros como el RSI, Bollinger Bands para evitar aún más los mercados agitados.

  2. Optimizar las combinaciones de medias móviles mediante pruebas de diferentes parámetros.

  3. Prueba diferentes tamaños de stop loss para encontrar el rango óptimo.

  4. Ajuste dinámicamente el tiempo de salida basado en la acción del precio en lugar de un tiempo fijo.

  5. Prueba otros pares de divisas y marcos de tiempo.

  6. Añadir la gestión de riesgos como el tamaño de la posición basado en el tamaño de la cuenta.

Resumen de las actividades

En general, esta es una estrategia de ruptura de sesión de Londres muy simple y práctica. Se beneficia de evitar ciertos riesgos comerciales mediante la utilización adecuada de las características de la sesión. También hay áreas para nuevas optimizaciones para mejorar la robustez y la rentabilidad.


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



Más.