Chiến lược này là một hệ thống giao dịch thông minh dựa trên nhiều đường xu hướng đột phá. Nó xác định năng động các mức hỗ trợ và kháng cự chính, kết hợp nhiều chỉ số kỹ thuật để tính độ dốc đường xu hướng và thực hiện giao dịch khi giá vượt qua đường xu hướng. Chiến lược không chỉ nắm bắt các bước ngoặt xu hướng thị trường mà còn có thể được tối ưu hóa để thích nghi với các điều kiện thị trường khác nhau.
Logic cốt lõi bao gồm ba thành phần chính: Thứ nhất, nó xác định mức cao và thấp chính bằng cách sử dụng thời gian xem lại để thiết lập mức hỗ trợ và kháng cự ban đầu; Thứ hai, nó tính toán năng động độ dốc đường xu hướng dựa trên phương pháp đã chọn (ATR, Sai lệch chuẩn hoặc Chuyển hướng tuyến tính) để thích nghi tốt hơn với sự biến động của thị trường; Cuối cùng, nó theo dõi mối quan hệ giá với đường xu hướng và kích hoạt tín hiệu giao dịch khi phá vỡ. Hệ thống cũng bao gồm các cơ chế để ngăn chặn quá mức kiểm tra ngược thông qua tham số vẽ lại, mô phỏng điều kiện giao dịch thực tế.
Chiến lược này xây dựng một hệ thống giao dịch đột phá đường xu hướng đáng tin cậy bằng cách sử dụng toàn diện các phương pháp phân tích kỹ thuật khác nhau. Sức mạnh của nó nằm trong khả năng thích nghi năng động với những thay đổi của thị trường trong khi cung cấp các tín hiệu giao dịch rõ ràng. Mặc dù có một số rủi ro vốn có, sự ổn định và lợi nhuận của chiến lược có thể được cải thiện đáng kể thông qua cài đặt tham số thích hợp và tối ưu hóa liên tục.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Alexgoldhunter //@version=5 strategy("Trendlines with Breaks Strategy [AlexGoldHunter]", overlay=true) // Input parameters length = input.int(14, title="Swing Detection Lookback") mult = input.float(1.0, title="Slope", minval=0, step=0.1) calcMethod = input.string('Atr', title="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 settings upCss = input.color(color.teal, title="Up Trendline Color", group="Style") dnCss = input.color(color.red, title="Down Trendline Color", group="Style") showExt = input(true, title="Show Extended Lines") // Calculations var upper = 0.0 var lower = 0.0 var slope_ph = 0.0 var slope_pl = 0.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, title="Upper", color=ph ? na : upCss, offset=-offset) plot(backpaint ? lower : lower + slope_pl * length, title="Lower", color=pl ? na : dnCss, offset=-offset) // Breakouts plotshape(upos > upos[1] ? low : na, title="Upper Break", style=shape.labelup, location=location.absolute, color=upCss, text="alex_buy_now", textcolor=color.white, size=size.tiny) plotshape(dnos > dnos[1] ? high : na, title="Lower Break", style=shape.labeldown, location=location.absolute, color=dnCss, text="alex_sell_now", textcolor=color.white, size=size.tiny) // Strategy: Buy and Sell conditions if (upos > upos[1]) strategy.entry("Buy", strategy.long) if (dnos > dnos[1]) strategy.entry("Sell", strategy.short) // Alerts alertcondition(upos > upos[1], title="Upward Breakout", message="Price broke the down-trendline upward") alertcondition(dnos > dnos[1], title="Downward Breakout", message="Price broke the up-trendline downward")