슈퍼 ATR 추세 추종 전략


생성 날짜: 2024-02-19 11:41:20 마지막으로 수정됨: 2024-02-19 11:41:20
복사: 0 클릭수: 669
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

슈퍼 ATR 추세 추종 전략

개요

슈퍼 ATR 트렌드 추적 전략은 ATR 지표에 기반한 트렌드 추적 전략이다. ATR 지표를 사용하여 시장의 변동성을 측정하고, ATR의 몇 배를 스톱 라인으로 사용하여 트렌드 추적을 구현한다.

전략 원칙

이 전략은 우선 ATR 지수를 계산하는데, ATR 지수는 지난 N 일 동안의 주가 변동의 이동 평균으로 시장 위험과 변동성을 나타내기 위해 사용된다. 전략은 우리가 ATR의 계산 방법을 변경하여 일반 ATR 또는 SMA 방식을 선택할 수 있다.

그 다음 ATR 값에 따라 하나의 배수를 통로 상하로 곱하여, 즉 상하로 계산한다:close - Multiplier * ATR[역주:close + Multiplier * ATRATR 지표에 기반한 트렌드 채널을 구성한다.

다음으로 우리는 현재의 가격이 채널을 뚫고 올라간다는 것을 판단한다. 가격이 궤도를 뚫고 올라간다면, 하향 추세에 진입한다고 판단한다. 가격이 궤도를 뚫고 내려간다면, 상승 추세에 진입한다고 판단한다.

또한, 전략은 거래 시간 창을 설정하여 지정된 날짜의 시간 동안만 거래한다.

전략적 이점

이 지표 채널 기반의 트렌드 추적 전략은 다음과 같은 장점이 있습니다.

  1. ATR 지표를 사용하여 자동으로 스톱 포지션을 조정하여 위험을 효과적으로 제어할 수 있습니다.
  2. ATR 지표는 주가 변동성을 고려하고, 스톱 라인이 더 합리적입니다.
  3. 통로 뚫고 진입을 판단하여 진입의 정확도를 높여줍니다.
  4. ATR을 계산하는 방법을 조정할 수 있으며, 정책의 유연성을 높일 수 있습니다.
  5. 거래 시간 창을 설정하여 주요 사건을 방지하는 전략이 실패합니다.

전체적으로 보면, 이것은 간단하고 실용적인 트렌드 추적 전략으로, 위험을 효과적으로 통제하고 동시에 더 나은 수익을 얻을 수 있습니다.

위험 분석

이 전략에는 다음과 같은 위험도 있습니다.

  1. 시장의 급격한 변동이 있을 때 ATR 지표는 시장의 변화에 반응하지 않을 수 있으며, 이는 너무 느슨하게 중지됩니다.
  2. 다중 의견이 일치하지 않을 경우, 가격이 통로 내에서 변동하여 거래 위험이 증가할 수 있습니다.
  3. 고정된 배수 설정은 모든 품종에 적합하지 않을 수 있으며, 다른 품종에 맞게 조정할 필요가 있습니다.
  4. setWindow는 거래 기회를 제한합니다. 잘 설정하지 않으면 더 좋은 거래 기회를 놓칠 수 있습니다.

이러한 위험을 통제하기 위해, 우리는 다음과 같은 조치를 취할 수 있습니다.

  1. 다른 지표와 결합하여 시장 상태를 판단하여 ATR 지표에만 의존하지 마십시오.
  2. 필터링 조건을 추가하여 무효 해킹의 트레이딩 위험을 방지합니다.
  3. 다양한 품종의 역사적인 특성에 따라 적절한 배수를 선택
  4. setWindow의 파라미터를 최적화하고 테스트하여 합리적인 설정을 확인합니다.

최적화 방향

이 전략에는 더 많은 최적화 가능성이 있습니다:

  1. 기계 학습 알고리즘을 도입하여 배수의 동적 최적화를 구현할 수 있습니다.
  2. 감정 지표와 같은 판단을 결합할 수 있는 다공간 레버, 통로 범위를 최적화
  3. 거래량을 늘리거나 변동 확인을 통해 무효 돌파구를 피하십시오.
  4. 고급 시간 기반 정책 프레임 워크를 사용하여 백테스트

이러한 최적화를 통해 전략의 안정성과 수익률을 더욱 높일 수 있습니다.

요약하다

이 전략overall는 매우 실용적인 트렌드 추적 전략이다. 그것은 ATR 지표를 사용하여 적응 통로를 구축하고, 통로 돌파를 통해 매매 시기를 판단한다. 전략은 간단하고 실용적이며, 위험을 효과적으로 제어하고, 중장선 트렌드를 추적하는 데 적합하다. 우리는 또한 추가적인 위험 제어 및 전략 최적화 제안을 제시하여 이 전략을 더 강력하고 안정적으로 만든다.

전략 소스 코드
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('B厂长 @超级趋势精简优化版', overlay=true)
Periods = input(title='ATR周期', defval=10)
src = input(hl2, title='价格数据源')
Multiplier = input.float(title='ATR 乘数', step=0.1, defval=3.0)
changeATR = input(title='更改ATR计算方法', defval=true,tooltip = '默认为art否则sma(ta.tr,ATR周期)')
showsignals = input(title='显示买入/卖出信号', defval=false)
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - Multiplier * atr
up1 = nz(up[1], up)
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + Multiplier * atr
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title='上涨趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal and showsignals ? up : na, title='买点', text='买点', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0))
dnPlot = plot(trend == 1 ? na : dn, title='下跌趋势', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal and showsignals ? dn : na, title='卖点', text='卖点', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
FromMonth = input.int(defval=9, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=999)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=999)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)
window() =>
    time >= start and time <= finish ? true : false
longCondition = buySignal
if longCondition and window()
    strategy.entry('BUY', strategy.long, comment = '做多')
shortCondition = sellSignal
if shortCondition and window()
    strategy.entry('SAL', strategy.short, comment = '做空')

buy1 = ta.barssince(buySignal)
sell1 = ta.barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na