슈퍼 트렌드 ATR 전략


생성 날짜: 2024-03-29 11:29:15 마지막으로 수정됨: 2024-03-29 11:29:15
복사: 2 클릭수: 707
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

슈퍼 트렌드 ATR 전략

개요

이것은 슈퍼 트렌드 지표와 ATR 지표에 기반한 전략이다. 이 전략의 주요 아이디어는: 슈퍼 트렌드 지표를 사용하여 현재 시장의 트렌드 방향을 판단하고, 슈퍼 트렌드 지표가 변할 때 거래를 한다. 동시에, 이 전략은 ATR 지표를 사용하여 중지 손실과 중지 가격을 계산하고, 계정 잔액의 일정한 비율에 따라 위치 크기를 계산하여 위험을 제어한다.

전략 원칙

이 전략의 원리는 다음과 같습니다.

  1. 슈퍼 트렌드 지표의 값을 계산합니다. 슈퍼 트렌드 지표가 변하면 구매 또는 판매 신호를 생성합니다.
  2. ATR 지수를 사용하여 중지 및 중지 가격을 계산합니다. 중지 가격은 현재 가격과 ATR 값을 줄인 값의 배수이며, 중지 가격은 중지 가격과 위험 수익률의 배수입니다.
  3. 각 거래의 위험을 통제하기 위해, 계좌 잔액의 일정한 비율과 스톱로스 가격에 따라 포지션 크기를 계산한다.
  4. 구매 신호가 발생했을 때, 더 많은 포지션을 열고, 스톱 가격으로 신호가 발생했을 때의 가격을 ATR 값에 곱한 값의 배수를 빼고, 스톱 가격으로 신호가 발생했을 때의 가격을 ATR 값에 더한 값에 곱한 값의 배수를 곱한 위험 수익률을 다.
  5. 판매 신호가 발생했을 때, 포지션을 공백으로 열고, 중지 가격으로 신호가 발생했을 때의 가격과 ATR 값을 곱한 배수, 중지 가격으로 신호가 발생했을 때의 가격과 ATR 값을 곱한 배수 곱한 위험 수익률을 다.

전략적 이점

이 전략의 장점은 다음과 같습니다.

  1. 트렌드 추적과 변동률 지표가 결합되어 트렌드를 효과적으로 포착하고 위험을 통제할 수 있습니다.
  2. 포지션 크기는 계정 잔액과 리스크 정도에 따라 자동으로 계산되며 수동으로 조정할 필요가 없으며 쉽게 실행할 수 있습니다.
  3. 매개 변수는 다양한 시장과 품종에 적용할 수 있습니다.

전략적 위험

이 전략의 위험은 다음과 같습니다.

  1. 불안정한 시장에서, 자주 발생하는 구매/판매 신호는 거래비용과 점유율을 높일 수 있다.
  2. 고정된 스톱로스 및 스톱 램프 비율은 시장의 변화에 적응하지 못할 수 있으며, 이로 인해 스톱로스가 너무 일찍 또는 수익이 너무 작을 수 있습니다.
  3. 포지션 크기의 계산은 역사적인 변동률에 의존하며, 변동률이 갑자기 커지면 더 큰 철회로 이어질 수 있다.

위와 같은 위험에 대해 다음과 같은 조치를 취할 수 있습니다.

  1. 신호 필터링 조건을 늘리고 거래 빈도를 줄입니다.
  2. 이동 상쇄 또는 동적 상쇄를 사용하는 것과 같은 중지 및 정지 계산 방법을 최적화하십시오.
  3. 포지션 계산에 위험 제어 요소를 도입합니다. 예를 들어, 변동률이 돌파할 때 포지션을 줄입니다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 트렌드 판단과 신호 필터링의 보조 조건으로 MACD, RSI 등과 같은 더 많은 기술적 지표를 도입하여 신호의 정확성을 향상시킵니다.
  2. 다양한 시장과 품종에 대해 슈퍼 트렌드 지표와 ATR 지표의 매개 변수를 최적화하여 최적의 매개 변수 조합을 찾습니다.
  3. 포지션 계산에 계좌의 최대 인출, 단편 거래의 최대 위험 등과 같은 더 많은 위험 제어 요소를 도입하여 전략의 안정성을 높인다.
  4. 부분 중단, 이동 중단과 같은 중단 전략을 추가하여 수익을 지속적으로 증가시킵니다.

이러한 최적화는 전략의 수익성과 안정성을 높이고, 동시에 전략의 위험을 낮추고, 전략을 다양한 시장 환경에 더 잘 적응시킬 수 있다.

요약하다

이 전략은 슈퍼 트렌드 지표와 ATR 지표를 결합하여 트렌드를 효과적으로 포착하고 동시에 위험을 제어할 수 있습니다. 최적의 위치 크기를 계산하여 각 거래의 위험을 제어 할 수 있습니다. 그러나 이 전략은 불안한 시장에서 높은 거래 비용과 회수 효과를 가져올 수 있습니다. 더 많은 기술 지표, 최적화 매개 변수, 위험 제어 요소 및 스톱 전략을 추가하여 전략의 성능을 더욱 향상시킬 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © tradez99

//@version=5
strategy('Supertrend', overlay=true, format=format.price, precision=2)

Periods = input(title='ATR Period', defval=10)
src = input(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input(title='Change ATR Calculation Method ?', defval=true)
showsignals = input(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input(title='Highlighter On/Off ?', defval=true)
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='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0))
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', 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='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0))
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white
shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white
//fill(mPlot, upPlot, title='UpTrend Highligter', color=longFillColor)
//fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor)

multiplier = input.float(title="ATR multiplier", defval = 1.5)
rr           = input.float(title="Risk:Reward", defval=1.0)
riskPerTrade = input.float(title="Risk Per Trade %", defval=1.0)
atr3 = ta.atr(14)

//calculate stops and targets 
longstop = close - (atr3 * multiplier)
shortstop = close + (atr3 * multiplier)
longStopDistance  = close - longstop
shortStopDistance = shortstop - close
longTarget  = close + (longStopDistance * rr)
shortTarget = close - (shortStopDistance * rr)

// Save stops & targets
var t_stop = 0.0
var t_target = 0.0

longCondition = buySignal 
if (longCondition)
    t_stop := longstop
    t_target := longTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (close - t_stop))
    strategy.entry("Long", strategy.long, qty = positionSize)

shortCondition = sellSignal 
if (shortCondition)
    t_stop := shortstop
    t_target := shortTarget
    positionSize = math.floor((strategy.equity * (riskPerTrade/100)) / (t_stop - close))  
    strategy.entry("Short", strategy.short, qty = positionSize)

strategy.exit(id="Long Exit", from_entry="Long", limit=t_target, stop=t_stop)
strategy.exit(id="Short Exit", from_entry="Short", limit=t_target, stop=t_stop)