Reversal Short term Breakout Trading Strategy
This strategy aims to capture short-term reversal trading opportunities. It will open short position after N consecutive up-bars and close position after M consecutive down-bars. It also incorporates time frame…

Overview
This strategy aims to capture short-term reversal trading opportunities. It will open short position after N consecutive up-bars and close position after M consecutive down-bars. It also incorporates time frame filter and stop loss/take profit features.
Logic
- Input parameters: Number of consecutive up-bars N, consecutive down-bars M
- Definition:
- ups counts number of up-bars, price>price[1] then +1, otherwise reset to 0
- dns counts number of down-bars, price<price[1] then +1, otherwise reset to 0
- Entry: short when ups≥N; close position when dns≥M
- Exit: fixed stop loss/take profit or end of time frame
Pros
- Capture reversal trading chances, suitable for short-term trading
- Flexible time frame setting catering to different trading plans
- Embedded stop loss/take profit facilitating risk management
Risks
- Short-term reversal may fail and reverse again leading to loss
- Reasonable N, M parameters needed, too large or small unfavourable
- Improper stop time may unable to stop loss in time
Optimization Directions
- Combine with trend indicator to avoid against trend trades
- Dynamic adjustment of parameters N, M
- Optimize stop loss mechanism
Conclusion
The strategy captures short-term trading opportunities through statistical K-line patterns. Reasonable parameter tuning and risk control measures are crucial for steady profits. Further improvements on combining trend analysis and dynamic parameter adjustment may lead to even better performance.
Parameters
| Name | Default | What it controls |
|---|---|---|
| v_input_1 | true | Consecutive Bars Up |
| v_input_2 | true | Consecutive Bars Down |
| v_input_3 | timestamp(2021-01-01T00:00:00) | Backtesting Start Date |
| v_input_4 | timestamp(2021-12-31T00:00:00) | Backtesting End Date |
| v_input_5 | Time Frame To Enter Trades | |
| v_input_6 | false | Enable Close Trade At End Of Time Frame |
| v_input_7 | false | Enable Take Profit & Stop Loss |
| v_input_8 | 5 | Stop Loss Ticks |
| v_input_9 | 10 | Take Profit Ticks |
| v_input_10 | Long Entry message | |
| v_input_11 | Short Entry message | |
| v_input_12 | Close Long message | |
| v_input_13 | Close Short message | |
| v_input_14 | Take Profit message | |
| v_input_15 | Stop Loss message |
Source Pine Script
/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Strategy
strategy("Up/Down Short Strategy", overlay=true, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash)
// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.short)
consecutiveBarsUp = input(1, title='Consecutive Bars Up')
consecutiveBarsDown = input(1, title='Consecutive Bars Down')
price = close
ups = 0.0
ups := price > price[1] ? nz(ups[1]) + 1 : 0
dns = 0.0
dns := price < price[1] ? nz(dns[1]) + 1 : 0
// Strategy Backtesting
startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time, title='Backtesting Start Date')
finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time, title='Backtesting End Date')
time_cond = true
//Time Restriction Settings
startendtime = input("", title='Time Frame To Enter Trades')
enableclose = input(false, title='Enable Close Trade At End Of Time Frame')
timetobuy = (time(timeframe.period, startendtime))
timetoclose = na(time(timeframe.period, startendtime))
// Stop Loss & Take Profit Tick Based
enablesltp = input(false, title='Enable Take Profit & Stop Loss')
stopTick = input(5.0, title='Stop Loss Ticks', type=input.float) / 100
takeTick = input(10.0, title='Take Profit Ticks', type=input.float) / 100
longStop = strategy.position_avg_price - stopTick
shortStop = strategy.position_avg_price + stopTick
shortTake = strategy.position_avg_price - takeTick
longTake = strategy.position_avg_price + takeTick
plot(strategy.position_size > 0 and enablesltp ? longStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Fixed SL")
plot(strategy.position_size < 0 and enablesltp ? shortStop : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Short Fixed SL")
plot(strategy.position_size > 0 and enablesltp ? longTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Long Take Profit")
plot(strategy.position_size < 0 and enablesltp ? shortTake : na, style=plot.style_linebr, color=color.green, linewidth=1, title="Short Take Profit")
// Alert messages
message_enterlong = input("", title="Long Entry message")
message_entershort = input("", title="Short Entry message")
message_closelong = input("", title="Close Long message")
message_closeshort = input("", title="Close Short message")
message_takeprofit = input("", title="Take Profit message")
message_stoploss = input("", title="Stop Loss message")
// Strategy Execution
if (ups >= consecutiveBarsUp) and time_cond and timetobuy
strategy.entry("Long", strategy.long, stop = high + syminfo.mintick, alert_message = message_enterlong)
if (dns >= consecutiveBarsDown) and time_cond and timetobuy
strategy.entry("Short", strategy.short, stop = low + syminfo.mintick, alert_message = message_entershort)
if strategy.position_size > 0 and timetoclose and enableclose
strategy.close_all(alert_message = message_closelong)
if strategy.position_size < 0 and timetoclose and enableclose
strategy.close_all(alert_message = message_closeshort)
if strategy.position_size > 0 and enablesltp and time_cond
strategy.exit(id="Close Long", stop=longStop, limit=longTake, alert_message = message_takeprofit)
if strategy.position_size < 0 and enablesltp and time_cond
strategy.exit(id="Close Short", stop=shortStop, limit=shortTake, alert_message = message_stoploss)
Published by ChaoZhang on the FMZ strategy square · last modified 2023-11-21. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.
Build this with AgenKit
A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Reversal-Short-term-Breakout-Trading-Strategy.md- npx agenkit install engineering-kit in your project
- Paste the command into your agent and approve each phase
- Get tests, backtest, risk controls and a paper-trading switch
Understand it first
Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.
Related specs
- 5 Day Moving Average Channel Breakout Strategy Combined With Mileage ConceptPine Script · Breakout · 1d
- ATR Trailing Stops StrategyPine Script · Breakout · 1h
- ATR Trend Breakout StrategyPine Script · Breakout · 1d
- Adaptive Bollinger Breakout with Moving Average Quantitative Strategy SystemPine Script · Breakout · 1h
- Adaptive Channel Breakout StrategyPine Script · Breakout · 1d
- Adaptive Multi Period Trading Strategy Based on Wave Trend Momentum BreakoutPine Script · Breakout · 2h