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

전략에 따른 역동적 경향

저자:차오장, 날짜: 2024-06-03 16:57:51
태그:ATR

img

전반적인 설명

이 전략은 시장 트렌드를 파악하기 위해 슈퍼트렌드 지표를 이용한다. 슈퍼트렌드 지표는 가격과 변동성을 결합하고, 녹색 선이 상승 추세를 나타내고 빨간 선이 하락 추세를 나타낸다. 이 전략은 지표 선의 색상의 변화를 감지하여 구매 및 판매 신호를 생성하며, 지표 선을 동적 스톱-로스 수준으로 사용합니다. 이 전략은 또한 성과를 최적화하기 위해 후속 스톱-로스 및 고정된 영리 논리를 통합합니다.

전략 원칙

  1. 슈퍼트렌드 지표의 상위 (상위) 및 하위 (dn) 범위를 계산하고 종료 가격과 상위 및 하위 범주 사이의 관계를 기반으로 현재 트렌드 방향 (트렌드) 을 결정합니다.
  2. 트렌드가 하향 (-1) 에서 상향으로 변할 때 구매 신호 (buySignal) 를 생성하고 트렌드가 하향 (-1) 에서 상향으로 변할 때 판매 신호 (sellSignal) 를 생성합니다.
  3. 구매 신호가 생성되면, 긴 포지션을 열고, 하부 밴드 (dn) 를 스톱 로스 수준으로 설정합니다. 판매 신호가 생성되면, 짧은 포지션을 열고, 상부 밴드 (up) 를 스톱 로스 수준으로 설정합니다.
  4. 트레이일링 스톱 로스 로직을 도입합니다. 가격의 상승/하락이 특정 포인트 (트레이일링 가치) 를 차지하면 스톱 로스 레벨이 상승/하락하여 스톱 로스 보호를 제공합니다.
  5. 고정된 영업 논리를 도입하고, 트렌드가 변할 때 수익을 위해 포지션을 닫습니다.

전략적 장점

  1. 적응력: 슈퍼트렌드 지표는 가격과 변동성을 결합하여 다른 시장 조건과 거래 도구에 적응할 수 있습니다.
  2. 동적 스톱 로스: 동적 스톱 로스 수준으로 지표 라인을 사용하면 위험을 효과적으로 제어하고 손실을 줄일 수 있습니다.
  3. 트래일링 스톱 로스: 트래일링 스톱 로스 로직을 도입하면 트렌드가 계속되면 이익을 보호 할 수 있으며 전략의 수익성을 향상시킬 수 있습니다.
  4. 명확한 신호: 전략에서 생성되는 구매 및 판매 신호는 명확하고 작동 및 실행이 쉽습니다.
  5. 유연한 매개 변수: 전략의 매개 변수 (ATR 기간, ATR 곱셈자 등) 는 시장 특성과 거래 스타일에 따라 조정될 수 있으며 적응력을 향상시킵니다.

전략 위험

  1. 매개 변수 위험: 다른 매개 변수 설정은 전략 성능에 상당한 차이를 초래할 수 있으며 철저한 역 테스트와 매개 변수 최적화를 요구합니다.
  2. 불안정한 시장 위험: 불안정한 시장에서 트렌드 변화가 자주 발생하면 전략이 과도한 거래 신호를 생성하여 거래 비용과 미끄러짐 위험을 증가시킬 수 있습니다.
  3. 갑작스러운 트렌드 변화 위험: 시장 트렌드가 갑작스럽게 변하면 전략은 적시에 포지션을 조정할 수 없으며 손실이 증가할 수 있습니다.
  4. 과도한 최적화 위험: 전략의 과도한 최적화는 곡선 적합으로 이어질 수 있으며, 결과적으로 미래 시장에서 낮은 성과를 낼 수 있습니다.

전략 최적화 방향

  1. 트렌드의 안정성을 확인하고 불안정한 시장에서 빈번한 거래를 줄이기 위해 여러 시간 프레임 분석을 포함합니다.
  2. 추세 결정의 정확성을 높이기 위해 다른 기술적 지표 또는 기본 요인을 결합합니다.
  3. 전략의 이익-손실 비율을 향상시키기 위해 동적 인 이익-이익 또는 위험-이익 비율을 도입하는 것과 같은 스톱-손실 및 수익-손실 논리를 최적화하십시오.
  4. 다양한 시장 조건에서 좋은 성능을 유지하는 매개 변수 조합을 선택하기 위해 매개 변수에 대한 견고성 테스트를 수행합니다.
  5. 개인 거래 위험과 전반적인 위험을 통제하기 위해 포지션 크기와 자금 관리 규칙을 도입하십시오.

요약

동적 트렌드 다음 전략은 시장 트렌드를 파악하기 위해 슈퍼트렌드 지표를 활용하고, 동적 스톱 로스 및 트레일 스톱 로스를 통해 리스크를 제어하고, 일정한 테이크 로프트를 통해 수익을 확보합니다. 전략은 적응력이 좋고, 명확한 신호를 가지고 있으며, 작동이 쉽습니다. 그러나 실제 응용에서는 매개 변수 최적화, 불변 시장 위험 및 갑작스러운 트렌드 변화 위험에주의를 기울여야합니다. 멀티 타임프레임 분석을 도입하여, 스톱 로스 및 테이크 로프트 논리를 최적화하여, 매개 변수 견고성 테스트를 수행하고, 기타 조치를 구현함으로써 전략의 성능과 안정성을 더욱 향상시킬 수 있습니다.


/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Supertrend Strategy', overlay=true, format=format.price, precision=2)
Periods = input.int(title='ATR Period', defval=10)
src = input.source(hl2, title='Source')
Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
changeATR = input.bool(title='Change ATR Calculation Method ?', defval=true)
showsignals = input.bool(title='Show Buy/Sell Signals ?', defval=true)
highlighting = input.bool(title='Highlighter On/Off ?', defval=true)

// ATR calculation
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2

// Supertrend calculations
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 direction
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Plotting
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))

// Highlighting
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, transp=90)
fill(mPlot, dnPlot, title='DownTrend Highligter', color=shortFillColor, transp=90)

// Alerts
alertcondition(buySignal, title='SuperTrend Buy', message='SuperTrend Buy!')
alertcondition(sellSignal, title='SuperTrend Sell', message='SuperTrend Sell!')
changeCond = trend != trend[1]
alertcondition(changeCond, title='SuperTrend Direction Change', message='SuperTrend has changed direction!')

// Pip and trailing stop calculation
pips = 50
pipValue = syminfo.mintick * pips
trailingPips = 10
trailingValue = syminfo.mintick * trailingPips

// Strategy
if (buySignal)
    strategy.entry("Long", strategy.long, stop=dn, comment="SuperTrend Buy")
if (sellSignal)
    strategy.entry("Short", strategy.short, stop=up, comment="SuperTrend Sell")

// Take profit on trend change
if (changeCond and trend == -1)
    strategy.close("Long", comment="SuperTrend Direction Change")
if (changeCond and trend == 1)
    strategy.close("Short", comment="SuperTrend Direction Change")

// Initial Stop Loss
longStopLevel = up - pipValue
shortStopLevel = dn + pipValue

// Trailing Stop Loss
var float longTrailStop = na
var float shortTrailStop = na

if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // Long position
        if (longTrailStop == na or close > strategy.position_avg_price + trailingValue)
            longTrailStop := high - trailingValue
        strategy.exit("Stop Loss Long", from_entry="Long", stop=longTrailStop)
    if (strategy.position_size < 0)  // Short position
        if (shortTrailStop == na or close < strategy.position_avg_price - trailingValue)
            shortTrailStop := low + trailingValue
        strategy.exit("Stop Loss Short", from_entry="Short", stop=shortTrailStop)

// Initial Exit
strategy.exit("Initial Stop Loss Long", from_entry="Long", stop=longStopLevel)
strategy.exit("Initial Stop Loss Short", from_entry="Short", stop=shortStopLevel)

관련

더 많은