Strategi ini adalah sistem perdagangan pintar berdasarkan pelbagai trendline breakout. Ia secara dinamik mengenal pasti tahap sokongan dan rintangan utama, menggabungkan beberapa penunjuk teknikal untuk mengira cerun trendline, dan melaksanakan perdagangan apabila harga memecahkan trendline. Strategi ini bukan sahaja menangkap titik perubahan trend pasaran tetapi juga boleh dioptimumkan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Logik teras merangkumi tiga komponen utama: Pertama, ia mengenal pasti paras tertinggi dan terendah utama menggunakan tempoh melihat kembali untuk menubuhkan tahap sokongan dan rintangan awal; Kedua, ia secara dinamik mengira cerun garis trend berdasarkan kaedah yang dipilih (ATR, Penyimpangan Standard, atau Regresi Linear) untuk menyesuaikan diri dengan lebih baik dengan turun naik pasaran; Akhirnya, ia memantau hubungan harga dengan garis trend dan mencetuskan isyarat perdagangan apabila pecah. Sistem ini juga merangkumi mekanisme untuk mencegah overfit backtest melalui parameter backpainting, mensimulasikan keadaan perdagangan sebenar.
Strategi ini membina sistem perdagangan trendline breakout yang boleh dipercayai dengan menggunakan pelbagai kaedah analisis teknikal secara komprehensif. Kekuatannya terletak pada keupayaan untuk menyesuaikan diri secara dinamik dengan perubahan pasaran sambil memberikan isyarat perdagangan yang jelas. Walaupun terdapat beberapa risiko yang wujud, kestabilan dan keuntungan strategi dapat ditingkatkan dengan ketara melalui tetapan parameter yang betul dan pengoptimuman berterusan.
/*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")