
This strategy uses pivot points (PivotHigh and PivotLow) to identify swing highs and lows in price and draws upward and downward trendlines based on these points. The slope of the trendlines is calculated using methods such as ATR (Average True Range), standard deviation, or linear regression, and then adjusted by a slope factor. When the price breaks through a trendline, the strategy generates a buy or sell signal.
This strategy utilizes pivot points and trendline slopes to construct a real-time trendline trading system. By capturing trendline breakout events, the strategy can trade in the early stages of trend formation. Although the strategy has certain advantages, it is still necessary to be aware of its risks in choppy markets and further enhance the strategy’s robustness and profitability by introducing more information, optimizing signal filtering, position management, and other methods.
/*backtest
start: 2023-04-20 00:00:00
end: 2024-04-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(" only Ajay ", overlay=true)
//------------------------------------------------------------------------------
//Settings
//------------------------------------------------------------------------------{
length = input.int(14, 'Swing Detection Lookback')
mult = input.float(1., 'Slope', minval = 0, step = .1)
calcMethod = input.string('Atr', 'Slope Calculation Method', options = ['Atr','Stdev','Linreg'])
backpaint = input(true, tooltip = 'Backpainting offset displayed elements in the past. Disable backpainting to see real time information returned by the indicator.')
//Style
upCss = input.color(color.teal, 'Up Trendline Color', group = 'Style')
dnCss = input.color(color.red, 'Down Trendline Color', group = 'Style')
showExt = input(true, 'Show Extended Lines')
//------------------------------------------------------------------------------}
//Calculations
//------------------------------------------------------------------------------{
var upper = 0.
var lower = 0.
var slope_ph = 0.
var slope_pl = 0.
var offset = backpaint ? length : 0
n = bar_index
src = close
ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)
//Slope Calculation Method
slope = switch calcMethod
'Atr' => ta.atr(length) / length * mult
'Stdev' => ta.stdev(src,length) / length * mult
'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult
//Get slopes and calculate trendlines
slope_ph := ph ? slope : slope_ph
slope_pl := pl ? slope : slope_pl
upper := ph ? ph : upper - slope_ph
lower := pl ? pl : lower + slope_pl
var upos = 0
var dnos = 0
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos
//------------------------------------------------------------------------------}
//Extended Lines
//------------------------------------------------------------------------------{
// var uptl = line.new(na,na,na,na, color = upCss, style = line.style_dashed, extend = extend.right)
// var dntl = line.new(na,na,na,na, color = dnCss, style = line.style_dashed, extend = extend.right)
// if ph and showExt
// uptl.set_xy1(n-offset, backpaint ? ph : upper - slope_ph * length)
// uptl.set_xy2(n-offset+1, backpaint ? ph - slope : upper - slope_ph * (length+1))
// if pl and showExt
// dntl.set_xy1(n-offset, backpaint ? pl : lower + slope_pl * length)
// dntl.set_xy2(n-offset+1, backpaint ? pl + slope : lower + slope_pl * (length+1))
//------------------------------------------------------------------------------}
//Plots
//------------------------------------------------------------------------------{
plot(backpaint ? upper : upper - slope_ph * length, 'Upper', color = ph ? na : upCss, offset = -offset)
plot(backpaint ? lower : lower + slope_pl * length, 'Lower', color = pl ? na : dnCss, offset = -offset)
//Breakouts
upBreakout = upos > upos[1]
dnBreakout = dnos > dnos[1]
if (upBreakout)
strategy.entry("Up Breakout", strategy.long)
if (dnBreakout)
strategy.entry("Down Breakout", strategy.short)
//------------------------------------------------------------------------------}
//Alerts
//------------------------------------------------------------------------------{
alertcondition(upos > upos[1], 'Upward Breakout', 'Price broke the down-trendline upward')
alertcondition(dnos > dnos[1], 'Downward Breakout', 'Price broke the up-trendline downward')
//------------------------------------------------------------------------------}