멀티타임 프레임 슈퍼 트렌드 팔로잉 전략


생성 날짜: 2024-01-15 11:35:47 마지막으로 수정됨: 2024-01-15 11:35:47
복사: 0 클릭수: 556
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

멀티타임 프레임 슈퍼 트렌드 팔로잉 전략

개요

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