이 전략은 ATR 지표를 사용하여 트렌드를 추적하기 위해 다중 타임프레임 동적 트렌드 채널을 구축합니다. 더 큰 트렌드를 포착하기 위해 지속적으로 채널을 조정함으로써 가격이 채널을 통과 할 때 신호를 생성합니다.
이 전략은 상승세 채널과 하락세 채널을 구축하기 위해 ATR 지표를 사용합니다. 구체적으로, 상승세 채널 라인은 ATR 지표의 N 곱하기 폐업 가격 마이너스; 하락세 채널 라인은 ATR 지표의 N 곱하기 폐업 가격입니다. N 값은 매개 변수를 통해 조정할 수 있습니다.
가격이 상승 트렌드 채널을 통과하면 구매 신호가 생성되며 가격이 하락 트렌드 채널을 통과하면 판매 신호가 생성됩니다. 채널은 트렌드를 추적하기 위해 최신 가격에 따라 동적으로 조정됩니다.
또한, 전략은 또한 흐름이 상승 추세인지 하락 추세인지 결정하기 위해 트렌드 변수를 정의합니다. 트렌드 변수는 잘못된 신호를 생성하지 않도록 채널 라인과 함께 작동합니다.
개선:
전체적으로 이것은 괜찮은 트렌드 추적 전략이다. 트렌드와 함께 트레이드를 동적으로 조정하고 최고와 판매 최저를 쫓는 것을 피한다. 매개 변수 최적화와 적절한 개선으로 전략 장점은 더 향상되고 더 나은 결과를 달성하기 위해 위험을 줄일 수 있다.
/*backtest start: 2023-01-08 00:00:00 end: 2024-01-14 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('超级趋势精简优化版', 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.close('BUY',comment = '卖出') buy1 = ta.barssince(buySignal) sell1 = ta.barssince(sellSignal) color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na