이 전략은 여러 트렌드 라인 브레이크에 기반한 지능형 거래 시스템입니다. 주요 지원 및 저항 수준을 동적으로 식별하고, 트렌드 라인 기울기를 계산하기 위해 여러 기술적 지표를 결합하고, 가격이 트렌드 라인을 통과 할 때 거래를 실행합니다. 전략은 시장 트렌드 전환점을 포착 할뿐만 아니라 다른 시장 조건에 적응하도록 최적화 할 수 있습니다.
핵심 논리는 세 가지 주요 구성 요소를 포함합니다. 첫째, 초기 지원 및 저항 수준을 설정하기 위해 룩백 기간을 사용하여 주요 최고와 최저를 식별합니다. 둘째, 시장 변동성에 더 잘 적응하기 위해 선택한 방법 (ATR, 표준편차 또는 선형 회귀) 에 따라 동적으로 트렌드 라인 기울기를 계산합니다. 마지막으로, 트렌드 라인과 가격 관계를 모니터링하고 브레이크에 거래 신호를 유발합니다. 시스템은 또한 실제 거래 조건을 시뮬레이션하여 백 페인팅 매개 변수를 통해 백테스트 오버 피팅을 방지하는 메커니즘을 포함합니다.
이 전략은 다양한 기술 분석 방법을 종합적으로 활용하여 신뢰할 수있는 트렌드 라인 브레이크아웃 거래 시스템을 구축합니다. 이 전략의 강점은 명확한 거래 신호를 제공하면서 시장 변화에 동적으로 적응하는 능력에 있습니다. 일부 내재된 위험이 존재하지만 적절한 매개 변수 설정과 지속적인 최적화로 전략의 안정성과 수익성이 크게 향상 될 수 있습니다.
/*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")