Strategy vault / Trend following
Simple Trailing Stop Buy Strategy Based on Percentage
This strategy implements a simple percentage-based trailing stop and trailing buy. By experimenting with different percentage combinations across timeframes and charts, the strategy parameters can be optimized.

Overview
This strategy implements a simple percentage-based trailing stop and trailing buy. By experimenting with different percentage combinations across timeframes and charts, the strategy parameters can be optimized.
Strategy Logic
The strategy mainly uses two metrics to achieve trailing stop loss and trailing buy:
Trailing Stop Line (TSL): Calculated based on recent N bars of closing prices and stop loss offset percentage set by user. Triggers stop loss when price falls below this line.
Trailing Buy Line (TBL): Calculated based on recent N bars of highest prices and buy offset percentage set by user. Triggers buy when price rises above this line.
By comparing price with these two metrics, the stop loss and trailing buy rules are implemented.
Advantages
The advantages of this strategy are:
Simple and intuitive, easy to understand and implement.
Flexible stop loss and trailing buy through parameter adjustment.
Applicable across markets and timeframes.
Allows trend following and timely stop loss.
Risks
The risks of this strategy include:
Improper parameter setting may cause over-aggressive stop loss or buys.
Frequent trading and slippage in ranging markets.
Requires parameter optimization for different market characteristics.
Enhancement Opportunities
The strategy can be enhanced through:
Adaptive algorithms to auto optimize stop and buy parameters.
Addition of position sizing and risk management modules.
Incorporation of other indicators to gauge overall trend to avoid whipsaws.
Conclusion
In summary, this is a very simple and intuitive trend following strategy. With parameter tuning it can be adapted across markets. Further incorporation of adaptive algorithms and additional filters can improve robustness. Overall it provides a basic yet effective framework for quantitative trading.
Parameters
| Name | Default | What it controls |
|---|---|---|
| v_input_1 | 1.5 | Stop Offset % |
| v_input_2 | 1.9 | Trailing Buy Offset % |
| v_input_3 | 6 | Use last x bars for calculation |
| v_input_4_close | 0 | Source Trailing Stop calculation: close | high | low | open | hl2 | hlc3 | hlcc4 | ohlc4 |
| v_input_5_close | 0 | Source Trailing Buy calculation: close | high | low | open | hl2 | hlc3 | hlcc4 | ohlc4 |
| v_input_6_low | 0 | Source Stop Trigger: low | high | close | open | hl2 | hlc3 | hlcc4 | ohlc4 |
| v_input_7_high | 0 | Source Buy Trigger: high | close | low | open | hl2 | hlc3 | hlcc4 | ohlc4 |
Source Pine Script
/*backtest
start: 2023-01-12 00:00:00
end: 2024-01-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
//Developed from ©Finnbo code
strategy("Simple Trailing Buy & Stop Strategy", overlay=true)
offset = input(defval=1.5, title="Stop Offset %", type=float, minval=0.1, maxval=100, step=0.1)
buyoffset = input(defval=1.9, title="Trailing Buy Offset %", type=float, minval=0.1, maxval=100, step=0.1)
sumbars = input(defval=6, title="Use last x bars for calculation", minval=1)
srcts = input(title="Source Trailing Stop calculation", defval=close)
srctb = input(title="Source Trailing Buy calculation", defval=close)
srctrigger = input(title="Source Stop Trigger", defval=low)
srctriggerbuy = input(title="Source Buy Trigger", defval=high)
tsl = rma(srcts, sumbars)*(1-(offset/100))// = (sum(srcts,sumbars)/sumbars)*(1-(offset/100))
tbuy = rma(srctb, sumbars)*(1+(buyoffset/100))
plot(tsl, color=(srctrigger<tsl)?red:green)
plot(tbuy, color=(srctriggerbuy>tbuy)?red:green)
//plotshape(crossunder(srctrigger,tsl), text="Long Stop", style=shape.circle, color=red)
alertcondition(crossunder(srctrigger,tsl), "Long Stop alert", "SELL")
//plotshape(crossover(srctriggerbuy,tbuy), text="Long", style=shape.circle, color=green)
alertcondition(crossover(srctriggerbuy,tbuy), "Long alert", "BUY")
longCondition = crossover(srctriggerbuy,tbuy)
if (longCondition)
strategy.entry("Long", strategy.long)
closeCondition = crossunder(srctrigger,tsl)
if (closeCondition)
strategy.close("Long")
Published by ChaoZhang on the FMZ strategy square · last modified 2024-01-19. 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/Simple-Trailing-Stop-Buy-Strategy-Based-on-Percentage.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
- 200 EMA VWAP MFI Trend Following StrategyPine Script · Trend following · 1d
- 4 EMA Trend StrategyPine Script · Trend following · 1d
- ADX MA and EMA Long Only Trend Tracking StrategyPine Script · Trend following · 1d
- ATR Dynamic Profit Target and Stop Loss StrategyPine Script · Trend following · 1d
- ATR Dynamic Trend Following and EMA Crossover Trading StrategyPine Script · Trend following · 1d
- ATR and Moving Average Crossover Hybrid StrategyPine Script · Trend following · 1h