This strategy trades based on price breakouts beyond recent extremes. It calculates highest high and lowest low over a period and generates signals when price breaks these levels.
Calculate highest high upex and lowest low dnex over N periods.
Go long when price breaks above upex.
Go short when price breaks below dnex.
Configurable for long only, short only or both directions.
Configurable capital utilization rate.
Configurable trading time range.
The strategy follows trends using price breakout signals. Enhancing breakout validity and tuning parameters can improve performance. But false breakouts and risk controls need to be addressed. Overall a simple and effective trend trading solution.
/*backtest start: 2023-09-18 00:00:00 end: 2023-09-20 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Brakeout Strategy v1.0", shorttitle = "Brakeout str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") len = input(4, defval = 4, minval = 1, maxval = 1000, title = "Length") showlines = input(true, defval = true, title = "Show Lines?") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Extremums upex = highest(high, len) dnex = lowest(low, len) col = showlines ? blue : na plot(upex, color = col, linewidth = 2) plot(dnex, color = col, linewidth = 2) //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if (not na(close[len])) strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)), stop = upex + syminfo.mintick) strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)), stop = dnex - syminfo.mintick) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all()