리소스 로딩... 로딩...

멀티 트렌드 라인 브레이크 모멘텀 양적 전략

저자:차오장, 날짜: 2024-12-20 14:26:41
태그:ATRSMA

img

전략 개요

이 전략은 여러 트렌드 라인 브레이크에 기반한 지능형 거래 시스템입니다. 주요 지원 및 저항 수준을 동적으로 식별하고, 트렌드 라인 기울기를 계산하기 위해 여러 기술적 지표를 결합하고, 가격이 트렌드 라인을 통과 할 때 거래를 실행합니다. 전략은 시장 트렌드 전환점을 포착 할뿐만 아니라 다른 시장 조건에 적응하도록 최적화 할 수 있습니다.

전략 원칙

핵심 논리는 세 가지 주요 구성 요소를 포함합니다. 첫째, 초기 지원 및 저항 수준을 설정하기 위해 룩백 기간을 사용하여 주요 최고와 최저를 식별합니다. 둘째, 시장 변동성에 더 잘 적응하기 위해 선택한 방법 (ATR, 표준편차 또는 선형 회귀) 에 따라 동적으로 트렌드 라인 기울기를 계산합니다. 마지막으로, 트렌드 라인과 가격 관계를 모니터링하고 브레이크에 거래 신호를 유발합니다. 시스템은 또한 실제 거래 조건을 시뮬레이션하여 백 페인팅 매개 변수를 통해 백테스트 오버 피팅을 방지하는 메커니즘을 포함합니다.

전략적 장점

  1. 높은 적응력: 여러 기울기 계산 방법과 조정 가능한 매개 변수를 통해 전략은 다른 시장 환경에 적응 할 수 있습니다.
  2. 강력한 리스크 제어: 트렌드 라인의 동적 조정 능력은 트렌드 변화를 신속히 파악하고 거짓 브레이크로 인한 손실을 줄이는데 도움이 됩니다.
  3. 우수한 시각화: 전략은 트렌드 라인 확장 및 브레이크아웃 마커를 포함하여 명확한 시각적 피드백을 제공합니다.
  4. 신호 확인 메커니즘: 거래 신호 신뢰성을 보장하기 위해 여러 조건 검증을 사용합니다.

전략 위험

  1. 극심한 시장 변동성 중 잘못된 신호를 생성할 수 있습니다.
  2. 트렌드 라인 계산 지연은 약간 지연된 입점으로 이어질 수 있습니다.
  3. 부적절한 매개 변수 선택은 과잉 거래 또는 중요한 기회를 놓칠 수 있습니다.
  4. 다양한 시장에서 빈번한 잘못된 파업 신호가 발생할 수 있습니다.

전략 최적화 방향

  1. 분산 유효성을 확인하기 위해 부피 지표를 포함합니다
  2. 높은 변동성 기간 동안 매개 변수를 조정하기 위해 시장 변동성 필터를 추가합니다.
  3. 신호 정확성을 향상시키기 위해 추가 기술 지표를 통합
  4. 적응적 매개 변수 조정 메커니즘 개발
  5. 지능적인 스톱 로스 및 이윤 취득 계산 방법을 구현합니다.

요약

이 전략은 다양한 기술 분석 방법을 종합적으로 활용하여 신뢰할 수있는 트렌드 라인 브레이크아웃 거래 시스템을 구축합니다. 이 전략의 강점은 명확한 거래 신호를 제공하면서 시장 변화에 동적으로 적응하는 능력에 있습니다. 일부 내재된 위험이 존재하지만 적절한 매개 변수 설정과 지속적인 최적화로 전략의 안정성과 수익성이 크게 향상 될 수 있습니다.


/*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")


관련

더 많은