Estrategia de negociación intradía con ruptura de cierre


Fecha de creación: 2023-10-09 16:56:21 Última modificación: 2023-10-09 16:56:21
Copiar: 0 Número de Visitas: 401
1
Seguir
1166
Seguidores

Descripción general

La estrategia es una estrategia simple de negociación intradiaria basada en la media móvil, que se aplica a la hora de un ciclo de tiempo del GBPUSD. Sólo entra cuando se abre el mercado en Londres y sale cuando se cierra el mercado en Londres, lo que es muy adecuado para la ruptura de la tendencia en el horario de Londres.

Principio de estrategia

La estrategia utiliza dos medias móviles, una muy rápida y otra muy lenta. La lógica es la siguiente:

  1. La brecha solo entra en el campo cuando se abre el mercado en Londres (a las 8 horas). La forma de juzgar es que el precio de cierre o el precio más alto puede hacer más si se rompe la media rápida, y el precio de cierre o el precio más bajo puede hacer menos si se rompe la media rápida.

  2. Al mismo tiempo, se requiere que el precio de cierre de la línea K anterior sea más alto que el promedio lento para hacer más, y bajo el promedio lento para hacer un vacío, para filtrar situaciones no tendenciales.

  3. El stop loss está configurado para un mínimo de 50-100 puntos.

  4. No hay paradas, y cuando Londres cierre (a las 15:00) no hay condiciones para salir.

Análisis de las ventajas

Esta es una estrategia de ruptura muy simple, pero con las siguientes ventajas debido al uso racional de las características de tendencia de la hora de Londres:

  1. El riesgo de que el mercado se tambalee se evita al entrar en el mercado solo cuando la tendencia es clara.

  2. La ruptura de la hora de Londres es la única forma de aprovechar las características de la hora de Londres, que es muy volátil.

  3. El sistema de suspensión es de baja pérdida y puede soportar un cierto grado de rebote.

  4. El equipo de la Liga de Campeones de la Liga de Campeones de la Liga de Campeones de la Liga de Campeones de la Liga.

Análisis de riesgos

La estrategia también tiene sus riesgos:

  1. En el caso de que no haya una tendencia clara en el horario de Londres, es posible que no haya transacciones durante mucho tiempo.

  2. El riesgo de pérdidas por paradas menores. Después de la ruptura, puede haber un cierto grado de rebote causado por paradas.

  3. Riesgo de salida prematura por el tiempo de salida fijo. Puede ser necesario extender el tiempo de mantenimiento de la posición cuando hay una fuerte tendencia.

La respuesta es la flexibilización adecuada de las reglas de entrada, el uso de stop loss móvil para bloquear ganancias y la adaptación adecuada de la hora de salida en función de la situación del mercado.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. Se añaden filtros para otros indicadores, como el RSI, las bandas de Brin y otros, para evitar un mayor impacto en el mercado.

  2. Optimización de combinaciones de lineas medias móviles para probar el efecto de la línea media en diferentes parámetros.

  3. Prueba diferentes tamaños de puntos de parada para encontrar el rango de parada óptimo.

  4. La hora de salida se ajusta en tiempo real según las circunstancias, en lugar de fijarse en el momento de la salida.

  5. Probar el efecto de otros pares de divisas y otros períodos de tiempo.

  6. Adición de módulos de control de riesgos, como la gestión de fondos, el cálculo del tamaño de la transacción, etc.

Resumir

La estrategia en su conjunto es una estrategia de ruptura de la franja horaria de Londres muy sencilla y práctica. La ventaja es que las reglas son simples y claras, y se pueden evitar algunos riesgos de negociación mediante el uso racional de las características de la franja horaria.

Código Fuente de la Estrategia
/*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")