피보트 포인트 및 기울기 기반의 실시간 트렌드 라인 거래

저자:차오장, 날짜: 2024-04-26 15:34:28
태그:ATRADXMA

img

전반적인 설명

이 전략은 가격의 스윙 최고와 최저를 식별하기 위해 피보트 포인트 (PivotHigh 및 PivotLow) 를 사용하여 이러한 점을 기반으로 상승 및 하락 트렌드 라인을 그린다. 트렌드 라인의 기울기는 ATR (평균 진정한 범위), 표준 편차 또는 선형 회귀 등의 방법을 사용하여 계산되고 기울기 인자로 조정된다. 가격이 트렌드 라인을 통과하면 전략은 구매 또는 판매 신호를 생성한다.

전략 원칙

  1. ta.pivothigh (() 및 ta.pivotlow (()) 함수를 사용하여 특정 뷰백 기간 동안 스윙 하이 (ph) 와 스윙 로프 (pl) 를 감지합니다.
  2. 선택된 계산 방법 (ATR, 표준편차 또는 선형 회귀) 을 기반으로 트렌드 라인의 기울기를 계산하고 기울기 인수 (mult) 로 곱하여 조정합니다.
  3. 기울기 및 피보트 포인트 가격을 사용하여 상승 트렌드 라인 (상위) 및 하락 트렌드 라인 (하위) 의 현재 값을 계산합니다.
  4. 현재 종료 가격이 트렌드 라인을 통과했는지 여부를 결정합니다. 종료 가격이 상승 트렌드 라인을 넘으면 상승 브레이크 신호가 생성됩니다. 종료 가격이 하락 트렌드 라인을 넘으면 하락 브레이크 신호가 생성됩니다.
  5. 차트에서 트렌드 라인을 그려라. 라인을 확장할 수 있는 옵션이 있다.
  6. 브레이크오웃 신호를 기반으로 거래: 상향 브레이크오웃에 장거리, 하향 브레이크오웃에 쇼트.

전략적 장점

  1. 이 전략은 가격 행동의 객관적인 사실 (추적 포인트와 트렌드 라인) 에 기초하여 거래 신호를 생성하여 신뢰성과 안정성을 제공합니다.
  2. 트렌드 라인의 기울기는 다른 시장 조건에 적응하여 시장 변동성에 따라 동적으로 조정 될 수 있습니다.
  3. 사용자는 기울기 계산 방법과 매개 변수 설정을 유연하게 선택하여 전략 성능을 최적화 할 수 있습니다.
  4. 이 전략은 다양한 사용자의 요구를 충족시키기 위해 실시간 및 지연 신호 모드를 모두 제공합니다.
  5. 내장 경고 기능은 사용자가 거래 기회를 적시에 파악하는 데 도움이 될 수 있습니다.

전략 위험

  1. 불안한 시장이나 트렌드가 불분명할 때 전략은 잘못된 신호를 발생시켜 수익성이 떨어질 수 있습니다.
  2. 전략의 성능은 매개 변수 설정에 달려 있습니다. 부적절한 매개 변수는 전략이 실패하거나 과도한 거래를 유발할 수 있습니다.
  3. 지연 신호 모드에서는 백트테스팅의 존재로 인해 실제 거래 결과는 역사적인 테스트 결과와 다를 수 있습니다.

전략 최적화 방향

  1. 트렌드 라인 브레이크 신호를 확인하고 신호 품질을 향상시키기 위해 거래량 및 변동성과 같은 더 많은 기술 지표 또는 가격 행동 특징을 도입하십시오.
  2. 잘못된 신호를 줄이기 위해 트렌드 라인 브레이크의 기간과 규모와 같은 요소를 고려하여 거래 신호를 필터링합니다.
  3. 트렌드 강도나 변동성에 따라 포지션 크기를 동적으로 조정하고 합리적인 스톱 로스 및 영업률을 설정하는 등 포지션 관리와 리스크 통제를 최적화한다.
  4. 가장 좋은 매개 변수 조합을 찾기 위해 기계 학습 또는 최적화 알고리즘을 사용하여 매개 변수를 최적화합니다.

요약

이 전략은 실시간 트렌드 라인 거래 시스템을 구축하기 위해 피프트 포인트와 트렌드 라인 기울기를 활용합니다. 트렌드 라인 브레이크 이벤트를 캡처함으로써 전략은 트렌드 형성의 초기 단계에서 거래 할 수 있습니다. 전략은 특정 장점이 있지만 여전히 불안정한 시장에서 위험을 인식하고 더 많은 정보를 도입하고 신호 필터링, 위치 관리 및 기타 방법을 최적화하여 전략의 견고성과 수익성을 더욱 향상시키는 것이 필요합니다.


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

//------------------------------------------------------------------------------}


관련

더 많은