
이 전략은 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