전략에 따른 슈퍼 ATR 트렌드

저자:차오장, 날짜: 2024-02-19 11:41:20
태그:

img

전반적인 설명

슈퍼 ATR 트렌드 다음 전략은 ATR 지표 기반 트렌드 다음 전략입니다. 그것은 시장 변동성을 측정하기 위해 ATR 지표를 사용하고 트렌드를 추적하기 위해 여러 ATR에 기반한 스톱 로스를 설정합니다.

전략 논리

전략은 먼저 ATR 지표를 계산합니다. 이는 지난 N 일 동안 가격 변동의 이동 평균으로 시장 위험과 변동성을 나타냅니다. 전략은 ATR 계산 방법을 변경할 수 있습니다. 일반 ATR 또는 SMA.

그 다음 상단 및 하단 대역은 ATR 값과 인수를 곱한 값에 기초하여 계산됩니다. 즉:close - Multiplier * ATR상단역의 경우close + Multiplier * ATR이것은 ATR 기반의 트렌드 채널을 형성합니다.

다음으로 현재 가격이 채널의 상단 또는 하단 범위를 통과하는지 판단합니다. 가격이 상단 범위를 통과하면 하향 추세로 진입하는 것으로 판단됩니다. 가격이 하단 범위를 통과하면 상승 추세로 진입하는 것으로 판단됩니다. 트렌드 브레이크가있을 때, 우리는 해당 구매 및 판매를합니다.

또한 전략은 지정된 날짜 시간 범위 내에서만 거래할 수 있는 거래 시간 창을 설정했습니다.

이점 분석

이 지표 채널 기반 트렌드 다음 전략은 다음과 같은 장점을 가지고 있습니다:

  1. 스톱 로스 포지션을 자동으로 조정하는 ATR 표시기를 사용하면 위험을 효과적으로 제어합니다.
  2. ATR는 가격 변동성을 고려하고 더 합리적인 스톱 로스를 고려합니다.
  3. 채널 브레이크로 입력 정밀도를 높여
  4. ATR 계산 방법을 조정할 수 있습니다. 더 유연합니다.
  5. 중요한 이벤트 중 전략 실패를 방지하기 위해 거래 창을 설정

일반적으로 이것은 위험성을 효과적으로 통제하고 좋은 수익을 얻을 수 있는 전략을 따르는 간단하고 실용적인 경향입니다.

위험 분석

이 전략에는 몇 가지 위험도 있습니다.

  1. 시장은 ATR이 너무 느슨한 스톱 로스로 인해 적시에 반응하지 못하는 격렬한 변화를 겪을 수 있습니다.
  2. 감정이 분분할 때 가격은 채널에서 변동 할 수 있으며 거래 위험을 증가시킵니다.
  3. 고정 복수는 모든 제품에 적합하지 않을 수 있습니다. 따라서 조정해야합니다.
  4. set창은 거래 기회를 제한합니다. 제대로 설정되지 않으면 좋은 거래를 놓칠 수 있습니다.

이러한 위험을 통제하기 위해 다음의 조치를 취할 수 있습니다.

  1. 다른 지표를 결합하여 시장 상태를 결정하고 ATR에만 의존하는 것을 피하십시오.
  2. 트레이드 리스크를 도입하는 유효하지 않은 브레이크오웃을 피하기 위해 필터를 추가합니다.
  3. 다른 제품의 역사적 특성에 따라 적절한 곱셈자를 선택
  4. 최적화 및 테스트 설정 올바른 설정을 보장하기 위해 창 매개 변수를

최적화

이 전략은 더 이상 최적화 할 수 있습니다.

  1. 멀티플리커를 동적으로 최적화하기 위해 기계 학습 알고리즘을 도입
  2. 채널 범위를 최적화하기 위해 감정 지표 등을 포함
  3. 유효하지 않은 브레이크오웃을 피하기 위해 볼륨 또는 변동성 확인을 추가합니다.
  4. 백테스트를 위한 고급 시간 기반 전략 프레임워크를 활용

이러한 최적화는 전략의 안정성과 수익성을 더욱 향상시킬 수 있습니다.

결론

전체적으로 이것은 매우 실용적인 트렌드 다음 전략입니다. 그것은 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



더 많은