Chiến lược này sử dụng các điểm pivot (PivotHigh và PivotLow) để xác định điểm cao và thấp trong giá và vẽ các đường xu hướng lên và xuống dựa trên các điểm này. Độ nghiêng của các đường xu hướng được tính bằng các phương pháp như ATR (Mức trung bình thực sự), độ lệch chuẩn hoặc hồi quy tuyến tính, và sau đó được điều chỉnh bằng yếu tố nghiêng. Khi giá vượt qua đường xu hướng, chiến lược tạo ra tín hiệu mua hoặc bán.
Chiến lược này sử dụng các điểm pivot và độ dốc đường xu hướng để xây dựng một hệ thống giao dịch đường xu hướng thời gian thực. Bằng cách nắm bắt các sự kiện đột phá đường xu hướng, chiến lược có thể giao dịch trong giai đoạn đầu của sự hình thành xu hướng. Mặc dù chiến lược có một số ưu điểm nhất định, nhưng vẫn cần phải nhận thức được rủi ro của nó trong các thị trường hỗn loạn và tiếp tục nâng cao độ mạnh mẽ và lợi nhuận của chiến lược bằng cách giới thiệu nhiều thông tin hơn, tối ưu hóa lọc tín hiệu, quản lý vị trí và các phương pháp khác.
/*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') //------------------------------------------------------------------------------}