Esta estrategia es un indicador de ruptura de consolidación de consolidación intradía para los mercados indios. Incorpora condiciones de tiempo, comisión y seguimiento de stop-loss. Las ventajas de esta estrategia incluyen lógica clara, ajuste flexible de parámetros y adaptación a la dinámica del mercado. Sin embargo, existen ciertos riesgos y necesitan una mayor optimización.
La estrategia básica se basa en bandas de Bollinger. Utiliza una media móvil simple de período de LENGTH ya que la línea media y las bandas ascendente/baja son +MULT/-MULT desviaciones estándar. Las señales de compra se generan cuando se cierran las rupturas por encima de la banda superior, y las señales de venta se generan cuando se cierran las rupturas por debajo de la banda inferior, formando una estrategia de ruptura de rango.
Para el control de riesgos, utiliza ATR para la línea de stop loss. También considera las horas de negociación del mercado indio y cierra todas las posiciones a las 14:57 todos los días.
Las ventajas de esta estrategia:
Los riesgos de esta estrategia:
Los riesgos pueden reducirse:
La estrategia se puede optimizar en varias direcciones:
Con la optimización del modelo y el algoritmo, se pueden mejorar las capacidades de sintonización de parámetros y filtrado de señales para una adaptación más amplia y una mayor tolerancia al riesgo.
En resumen, esta es una estrategia de ruptura intradiaria sencilla. Aborda las especificidades del mercado indio y controla los riesgos comerciales. Con mejoras adicionales en la sintonización de parámetros y el filtrado de señales, esta estrategia puede cumplir con el requisito de comercialización.
/*backtest start: 2022-12-08 00:00:00 end: 2023-12-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Consolidation Breakout [Indian Market Timing]",overlay = true , pyramiding = 0 ,initial_capital = 50000, default_qty_value=5, currency = currency.NONE,commission_type = strategy.cash, commission_value = 30, slippage = 1 ) // ══════════════════════════════════// // ————————> INPUT VALUES <————————— // // ══════════════════════════════════// LENGTH = input.int(title='LENGTH', defval = 75, minval = 10 ,maxval = 300) MULT = input.float(title='MULT_STDEV',defval = 3.2 , minval = 1 , maxval = 7 , step =0.1) //EMA1 = input.int(title='EMA1', defval = 50, minval = 10 ,maxval = 550) //EMA2 = input.int(title='EMA2', defval = 135, minval = 10 ,maxval = 550) factor_tr = input.float(title = "ATR TRAIL", defval = 10, step = 0.1) // ══════════════════════════════════// // ————————> DAY TIME LIMIT <——————— // // ══════════════════════════════════// t = time(timeframe.period, '0935-1430:1234567') time_condition = not na(t) //**********************// ════════════════════════════════// //**********************// ————————> ATR & PLOT <————————— // //**********************// ════════════════════════════════// //ema1 = ta.ema(close,EMA1) //ema2 = ta.ema(close,EMA2) //plot(ema1, color=color.new(color.blue, 0), style=plot.style_linebr, title='ema1') //plot(ema2, color=color.new(color.yellow, 0), style=plot.style_linebr, title='ema2') atr_tr = ta.atr(16)*factor_tr longStop = close - atr_tr shortStop = close + atr_tr Entry = close length = LENGTH mult = MULT basis = ta.sma(Entry , length) dev = mult * ta.stdev(Entry , length) upper = (basis + dev) lower = (basis - dev) buyEntry = ta.crossover(Entry , upper) sellEntry = ta.crossunder(Entry , lower) //plot(upper, color=color.new(color.red, 0), style=plot.style_linebr, title="short stop") //plot(lower, color=color.new(color.green, 0), style=plot.style_linebr, title="Long stop") plot(upper, color=close[1] > upper and close > upper ? color.green : color.red, linewidth=2) plot(lower, color=close[1] > lower and close > lower ? color.green : color.red, linewidth=2) // ══════════════════════════════════// // ————————> LONG POSITIONS <————————// // ══════════════════════════════════// //******barinstate.isconfirmed used to avoid repaint in real time******* if ( buyEntry and strategy.opentrades==0 and barstate.isconfirmed and time_condition) strategy.entry(id= "Long" ,direction = strategy.long, comment = "B") plot(longStop , color=color.new(color.blue, 0), style=plot.style_linebr, title='long Stop') if strategy.position_size > 0 strategy.exit("long tsl", "Long" , stop = longStop , comment='S') // ═════════════════════════════════════// // ————————> SHORT POSITIONS <————————— // // ═════════════════════════════════════// if ( sellEntry and strategy.opentrades==0 and barstate.isconfirmed and time_condition) strategy.entry(id = "Short" ,direction = strategy.short, comment = "S") if strategy.position_size < 0 strategy.exit("short tsl", "Short" , stop = shortStop ,comment='B') // ════════════════════════════════════════════════// // ————————> CLOSE ALL POSITIONS BY 3PM <————————— // // ════════════════════════════════════════════════// strategy.close_all(when = hour == 14 and minute == 57)