Эта стратегия представляет собой индикатор прорыва консолидации внутридневного торговли для индийских рынков. Она включает временные условия, комиссию и отслеживание стоп-лосса. Преимущества этой стратегии включают четкую логику, гибкую настройку параметров и адаптацию к динамике рынка. Однако существуют определенные риски и требуют дальнейшей оптимизации.
Основная стратегия основана на полосах Боллинджера. Она использует ДЛОГО-периодическую простую скользящую среднюю, поскольку средняя линия и верхние/низкие полосы являются стандартными отклонениями +MULT/-MULT. Сигналы покупки генерируются при закрытии перерывов выше верхней полосы, а сигналы продажи генерируются при закрытии перерывов ниже нижней полосы, формируя стратегию прорыва диапазона.
Для контроля рисков он использует ATR для линии остановки потери. Он также учитывает торговые часы на индийском рынке и закрывает все позиции в 14:57 каждый день.
Преимущества этой стратегии:
Риски этой стратегии:
Риски могут быть уменьшены:
Стратегия может быть оптимизирована в нескольких направлениях:
С оптимизацией модели и алгоритма возможности настройки параметров и фильтрации сигналов могут быть улучшены для более широкой адаптации и более высокой терпимости к риску.
В общем, это простая стратегия внутридневного выхода. Она рассматривает специфику индийского рынка и контролирует торговые риски.
/*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)