Yesterdays High Breakout Strategy
The Yesterday's High Breakout strategy is a trend following system that goes long when the price breaks above yesterday's high, even if the breakout occurs multiple times in a day. It aims to follow the trending…

Overview
The Yesterday's High Breakout strategy is a trend following system that goes long when the price breaks above yesterday's high, even if the breakout occurs multiple times in a day. It aims to follow the trending market conditions.
Principle
The strategy employs several technical indicators for entry and exit signals:
ROC Filter - Strategy is enabled only when today's close has a price change percent above a threshold versus previous day's close. This filters non-trending volatile markets.
Trigger Point - Records today's high, low and open prices. Long entry triggered when price breaks above today's high.
Entry and Exit Conditions - After entry, stop loss and take profit percentages are set. Trailing stop can be enabled to lock in profit. Conditional exit when price drops below a reference EMA.
Configuration - Gap percent to anticipate or delay entry. Customizable stop loss, take profit, trailing stop percentages.
Specifically, it tracks today's high price for entry signal. Long entry when price breaks above today's high. Then stop loss and take profit exits are set, with trailing stop enabled. Alternate exit when price crosses below given EMA. Optimization by setting gap percentage, adjusting stop loss and take profit ratios to control risk, enabling trailing stop to lock in profit.
Advantage Analysis
The advantages of this strategy:
Trend following, captures profit from trending moves.
Breakout strategy gives clear entry signals.
Considers today's high price, avoids consecutive entries.
Stop loss and take profit helps risk control.
Trailing stop locks in profit.
Entry timing can be tuned with parameter optimization to control risk.
Simple and intuitive, easy to understand and implement.
Applicable for long and short trades.
Risk Analysis
The risks to consider:
Breakout strategies susceptible to whipsaws. Price may immediately reverse after entry.
Only effective for trending markets, underperforms in ranging conditions.
Reasonable stop loss percent needed, too wide may increase loss.
Reasonable gap percent needed, too aggressive may increase loss.
False breakout can cause unnecessary loss, tuning required.
Volume needs to support follow through after breakout.
Consistency needed between parameters across timeframes.
Optimization Directions
Possible optimizations:
Add other indicators like volume, volatility to avoid whipsaws during ranging markets.
Add curve fitting indicators to qualify trend strength, avoid false trends.
Dynamic optimization of entry gap based on market volatility.
Dynamic optimization of stop loss and take profit following market conditions.
Different parameter sets for different symbols and timeframes.
Machine learning to TEST parameter impact on strategy performance.
Add Options functionality to optimize configurations.
Research applicability during ranging market conditions.
Expand to cross timeframe and multi-asset strategies.
Conclusion
The strategy offers decent performance during trending markets based on breakout of yesterday's high concept. But risks of whipsaw and parameter optimization difficulties exist. Further optimizations possible by adding judgments, dynamic parameter tuning, expanding to combined strategies etc. Overall it suits short term trend following, but risk control and parameter tuning needed.
Parameters
| Name | Default | What it controls |
|---|---|---|
| v_input_bool_1 | false | (?ROC Filter from CloseD)roc_enable |
| v_input_float_1 | true | Treshold |
| v_input_float_2 | true | (?Entry)Gap% |
| v_input_float_3 | 3 | Stop-loss |
| v_input_float_4 | 9 | Take-profit |
| v_input_float_5 | 2 | (?Trailing Stop Settings)Trailing-stop |
| v_input_float_6 | true | Offset Trailing |
| v_input_bool_2 | true | Trailing-stop |
| v_input_bool_3 | false | Close EMA |
| v_input_int_1 | 10 | EMA length |
Source Pine Script
/*backtest
start: 2023-10-06 00:00:00
end: 2023-11-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// Author: © tumiza 999
// © TheSocialCryptoClub
//@version=5
strategy("Yesterday's High v.17.07", overlay=true, pyramiding = 1,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity, default_qty_value=10,
slippage=1, backtest_fill_limits_assumption=1, use_bar_magnifier=true,
commission_type=strategy.commission.percent, commission_value=0.075
)
// -----------------------------------------------------------------------------
// ROC Filter
// -----------------------------------------------------------------------------
// f_security function by LucF for PineCoders available here: https://www.tradingview.com/script/cyPWY96u-How-to-avoid-repainting-when-using-security-PineCoders-FAQ/
f_security(_sym, _res, _src, _rep) => request.security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1]
high_daily = f_security(syminfo.tickerid, "D", high, false)
roc_enable = input.bool(false, "", group="ROC Filter from CloseD", inline="roc")
roc_threshold = input.float(1, "Treshold", step=0.5, group="ROC Filter from CloseD", inline="roc")
closed = f_security(syminfo.tickerid,"1D",close, false)
roc_filter= roc_enable ? (close-closed)/closed*100 > roc_threshold : true
// -----------------------------------------------------------------------------
// Trigger Point
// -----------------------------------------------------------------------------
open_session = ta.change(time('D'))
price_session = ta.valuewhen(open_session, open, 0)
tf_session = timeframe.multiplier <= 60
bgcolor(open_session and tf_session ?color.new(color.blue,80):na, title = "Session")
first_bar = 0
if open_session
first_bar := bar_index
var max_today = 0.0
var min_today = 0.0
var high_daily1 = 0.0
var low_daily1 = 0.0
var today_open = 0.0
if first_bar
high_daily1 := max_today
low_daily1 := min_today
today_open := open
max_today := high
min_today := low
if high >= max_today
max_today := high
if low < min_today
min_today := low
same_day = today_open == today_open[1]
plot( timeframe.multiplier <= 240 and same_day ? high_daily1 : na, color= color.yellow , style=plot.style_linebr, linewidth=1, title='High line')
plot( timeframe.multiplier <= 240 and same_day ? low_daily1 : na, color= #E8000D , style=plot.style_linebr, linewidth=1, title='Low line')
// -----------------------------------------------------------------------------
// Strategy settings
// -----------------------------------------------------------------------------
Gap = input.float(1,"Gap%", step=0.5, tooltip="Gap di entrata su entry_price -n anticipa entrata, con +n posticipa entrata", group = "Entry")
Gap2 = (high_daily1 * Gap)/100
sl = input.float(3, "Stop-loss", step= 0.5, group = "Entry")
tp = input.float(9, "Take-profit", step= 0.5, group = "Entry")
stop_loss_price = strategy.position_avg_price * (1-sl/100)
take_price = strategy.position_avg_price * (1+tp/100)
sl_trl = input.float(2, "Trailing-stop", step = 0.5, tooltip = "Attiva trailing stop dopo che ha raggiunto...",group = "Trailing Stop Settings")//group = "Trailing Stop Settings")
Atrl= input.float(1, "Offset Trailing", step=0.5,tooltip = "Distanza dal prezzo", group = "Trailing Stop Settings")
stop_trl_price_cond = sl_trl * high/syminfo.mintick/100
stop_trl_price_offset_cond = Atrl * high/syminfo.mintick/100
stop_tick = sl * high/syminfo.mintick/100
profit_tick = tp * high/syminfo.mintick/100
mess_buy = "buy"
mess_sell = "sell"
// -----------------------------------------------------------------------------
// Entry - Exit - Close
// -----------------------------------------------------------------------------
if close < high_daily1 and roc_filter
strategy.entry("Entry", strategy.long, stop = high_daily1 + (Gap2), alert_message = mess_buy)
ts_n = input.bool(true, "Trailing-stop", tooltip = "Attiva o disattiva trailing-stop", group = "Trailing Stop Settings")
close_ema = input.bool(false, "Close EMA", tooltip = "Attiva o disattiva chiusura su EMA", group = "Trailing Stop Settings")
len1 = input.int(10, "EMA length", step=1, group = "Trailing Stop Settings")
ma1 = ta.ema(close, len1)
plot(ma1, title='EMA', color=color.new(color.yellow, 0))
if ts_n == true
strategy.exit("Trailing-Stop","Entry",loss= stop_tick, stop= stop_loss_price, limit= take_price, trail_points = stop_trl_price_cond, trail_offset = stop_trl_price_offset_cond, comment_loss="Stop-Loss!!",comment_profit ="CASH!!", comment_trailing = "TRL-Stop!!", alert_message = mess_sell)
else
strategy.exit("TP-SL", "Entry",loss= stop_tick, stop=stop_loss_price, limit= take_price, comment_loss= "Stop-loss!!!", comment_profit = "CASH!!", alert_message = mess_sell)
if close_ema == true and ta.crossunder(close,ma1)
strategy.close("Entry",comment = "Close" , alert_message = mess_sell)
Published by ChaoZhang on the FMZ strategy square · last modified 2023-11-06. 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/Yesterdays-High-Breakout-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
- Adaptive Multi Period Trading Strategy Based on Wave Trend Momentum BreakoutPine Script · Breakout · 2h
- BB Breakout StrategyPine Script · Breakout · 1d
- BMSB Breakout Strategy BMSBPine Script · Breakout · 1h
- Bollinger Band T3 Moving Average StrategyPine Script · Breakout · 10m
- Bollinger Bands Dual track Breakthrough StrategyPine Script · Breakout · 30m
- Bollinger Breakout StrategyPine Script · Breakout · 30m