리소스 로딩... 로딩...

슈퍼트렌드 ATR 전략

저자:차오장, 날짜: 2024-03-29 11:29:15
태그:

img

전반적인 설명

이 전략은 슈퍼트렌드 지표와 ATR 지표에 기반한 전략이다. 이 전략의 주요 아이디어는 슈퍼트렌드 지표를 사용하여 현재 시장 트렌드 방향을 결정하고 슈퍼트렌드 지표가 변경되면 거래를하는 것입니다. 동시에 이 전략은 ATR 지표를 사용하여 스톱 로스 및 영업 가격을 계산하고 위험을 제어하기 위해 계정 잔액의 특정 비율을 기반으로 포지션 크기를 계산합니다.

전략 원칙

이 전략의 원칙은 다음과 같습니다.

  1. 슈퍼트렌드 지표의 값을 계산하고 슈퍼트렌드 지표가 변경되면 구매 또는 판매 신호를 생성합니다.
  2. ATR 지표를 사용하여 스톱 로스 및 영리 가격을 계산합니다. 스톱 로스 가격은 현재 가격 더하기 또는 ATR 값을 곱한 배수 인 마이너스이며, 영리 가격은 스톱 로스 가격과 리스크 보상 비율을 곱한 것입니다.
  3. 각 거래의 위험을 제어하기 위해 계정 잔액의 특정 비율과 스톱 로스 가격을 기반으로 포지션 크기를 계산합니다.
  4. 매수 신호가 생성되면 긴 포지션을 열고, 스톱 로스 가격은 신호가 생성된 가격에서 ATR 값을 곱한 배수를 빼고, 수익을 취하는 가격은 신호가 생성된 가격과 ATR 값을 곱한 배수를 곱한 위험/이익 비율을 곱한 가격입니다.
  5. 판매 신호가 생성될 때, 짧은 포지션을 열고, 스톱 로스 가격은 신호가 생성되는 가격과 ATR 값이 곱하기 인수값이며, 수익을 취하는 가격은 신호가 생성되는 가격과 ATR 값이 곱하기 인수값을 빼고 리스크-어워드 비율로 곱하는 가격입니다.

전략적 장점

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

  1. 트렌드 추적 및 변동성 지표를 결합하여 트렌드를 효과적으로 파악하고 동시에 위험을 제어합니다.
  2. 포지션 크기는 수동 조정 없이 계좌 잔액과 위험 수준에 따라 자동으로 계산되며, 이를 쉽게 구현할 수 있습니다.
  3. 매개 변수들은 다양한 시장과 제품에 맞게 유연하게 조정될 수 있습니다.

전략 위험

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

  1. 불안정한 시장에서 자주 구매 및 판매 신호는 높은 거래 비용과 미끄러짐으로 이어질 수 있습니다.
  2. 고정된 스톱 러스 및 영업률은 시장 변화에 적응하지 못할 수 있으며, 이로 인해 조기 스톱 러스 또는 작은 이익이 발생할 수 있습니다.
  3. 포지션 크기의 계산은 역대 변동성에 달려 있습니다. 변동성이 갑자기 증가하면 큰 마감으로 이어질 수 있습니다.

위 위험 요소에 대응하기 위해 다음의 조치를 취할 수 있습니다.

  1. 더 많은 신호 필터링 조건을 추가하여 거래 빈도를 줄입니다.
  2. 트래일링 스톱 로스 또는 동적 트레이프 로프 (dynamic take profit) 를 사용하는 것과 같은 스톱 로스 및 영업 취득의 계산 방법을 최적화합니다.
  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)


더 많은