여러 시간 프레임 슈퍼 트렌드 추적 전략

저자:차오장, 날짜: 2024-01-15 11:35:47
태그:

img

전반적인 설명

이 전략은 ATR 지표를 사용하여 트렌드를 추적하기 위해 다중 타임프레임 동적 트렌드 채널을 구축합니다. 더 큰 트렌드를 포착하기 위해 지속적으로 채널을 조정함으로써 가격이 채널을 통과 할 때 신호를 생성합니다.

전략 논리

이 전략은 상승세 채널과 하락세 채널을 구축하기 위해 ATR 지표를 사용합니다. 구체적으로, 상승세 채널 라인은 ATR 지표의 N 곱하기 폐업 가격 마이너스; 하락세 채널 라인은 ATR 지표의 N 곱하기 폐업 가격입니다. N 값은 매개 변수를 통해 조정할 수 있습니다.

가격이 상승 트렌드 채널을 통과하면 구매 신호가 생성되며 가격이 하락 트렌드 채널을 통과하면 판매 신호가 생성됩니다. 채널은 트렌드를 추적하기 위해 최신 가격에 따라 동적으로 조정됩니다.

또한, 전략은 또한 흐름이 상승 추세인지 하락 추세인지 결정하기 위해 트렌드 변수를 정의합니다. 트렌드 변수는 잘못된 신호를 생성하지 않도록 채널 라인과 함께 작동합니다.

장점

  • 동적 채널을 사용하여 트렌드를 추적하고 트렌드와 함께 거래합니다.
  • 높은 가격과 낮은 가격에 따라가는 것을 피하고 시장 역전 위험을 줄입니다.
  • 조절 가능한 채널 매개 변수, 높은 적응력
  • 보다 유연한 여러 시간 프레임 설정

위험성

  • 지나치게 공격적인 추적은 손실 위험을 증가시킬 수 있습니다.
  • 잘못된 채널 매개 변수 설정으로 인해 더 적은 또는 더 많은 잘못된 신호가 발생합니다.
  • 매개 변수를 조정하기 위해 강력한 프로그래밍 기술이 필요합니다.

개선:

  • 적당하게 ATR 곱셈을 더 낮은 추적 크기로 줄이십시오.
  • 가장 좋은 조합을 찾기 위해 매개 변수를 최적화
  • 거래당 손실을 줄이기 위해 스톱 로스 전략을 추가

최적화 방향

  • 더 신뢰할 수 있는 신호를 위해 필터에 다른 표시기를 추가
  • 위험을 줄이기 위해 스톱 로스 전략을 추가
  • 최적을 찾기 위해 매개 변수 최적화를 수행
  • 수익률을 향상시키기 위해 입출시기를 최적화하십시오.

요약

전체적으로 이것은 괜찮은 트렌드 추적 전략이다. 트렌드와 함께 트레이드를 동적으로 조정하고 최고와 판매 최저를 쫓는 것을 피한다. 매개 변수 최적화와 적절한 개선으로 전략 장점은 더 향상되고 더 나은 결과를 달성하기 위해 위험을 줄일 수 있다.


/*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



더 많은