
슈퍼 ATR 트렌드 추적 전략은 ATR 지표에 기반한 트렌드 추적 전략이다. ATR 지표를 사용하여 시장의 변동성을 측정하고, ATR의 몇 배를 스톱 라인으로 사용하여 트렌드 추적을 구현한다.
이 전략은 우선 ATR 지수를 계산하는데, ATR 지수는 지난 N 일 동안의 주가 변동의 이동 평균으로 시장 위험과 변동성을 나타내기 위해 사용된다. 전략은 우리가 ATR의 계산 방법을 변경하여 일반 ATR 또는 SMA 방식을 선택할 수 있다.
그 다음 ATR 값에 따라 하나의 배수를 통로 상하로 곱하여, 즉 상하로 계산한다:close - Multiplier * ATR[역주:close + Multiplier * ATRATR 지표에 기반한 트렌드 채널을 구성한다.
다음으로 우리는 현재의 가격이 채널을 뚫고 올라간다는 것을 판단한다. 가격이 궤도를 뚫고 올라간다면, 하향 추세에 진입한다고 판단한다. 가격이 궤도를 뚫고 내려간다면, 상승 추세에 진입한다고 판단한다.
또한, 전략은 거래 시간 창을 설정하여 지정된 날짜의 시간 동안만 거래한다.
이 지표 채널 기반의 트렌드 추적 전략은 다음과 같은 장점이 있습니다.
전체적으로 보면, 이것은 간단하고 실용적인 트렌드 추적 전략으로, 위험을 효과적으로 통제하고 동시에 더 나은 수익을 얻을 수 있습니다.
이 전략에는 다음과 같은 위험도 있습니다.
이러한 위험을 통제하기 위해, 우리는 다음과 같은 조치를 취할 수 있습니다.
이 전략에는 더 많은 최적화 가능성이 있습니다:
이러한 최적화를 통해 전략의 안정성과 수익률을 더욱 높일 수 있습니다.
이 전략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