동적 스톱 로스 이동 평균 전략

저자:차오장날짜: 2024-01-29 15:52:43
태그:

img

전반적인 설명

이 전략은 ATR 및 가격 극단에 기반한 동적 트레일링 스톱의 아이디어를 채택하여 긴 및 짧은 스톱 로스 라인을 계산합니다. 들리어 출구 아이디어와 결합하여 스톱 로스 라인 브레이크업에 따라 긴 / 짧은 방향을 판단합니다. 스톱 로스 라인이 상향으로 돌파하면 상승 및 긴 엔트리로 판단됩니다. 스톱 로스 라인이 하향으로 돌파하면 하향 및 짧은 엔트리로 판단됩니다.

이 전략은 스톱 로스 관리와 엔트리 신호 판단 기능을 모두 가지고 있습니다.

전략 논리

이 전략은 다음과 같은 주요 부분으로 구성됩니다.

  1. ATR을 기반으로 긴/단 줄금 손실 라인을 계산합니다.

    사용자가 정의한 ATR 기간 길이와 곱셈 곱셈을 기반으로 실시간 ATR을 계산합니다. 그 다음 긴 / 짧은 스톱 로스 라인은 ATR과 가격 극단으로 계산됩니다.

     longStop = Highest - ATR  
     shortStop = Lowest + ATR
    
  2. 브레이크오웃으로 거래 방향을 판단하세요

    이전 바와 현재 바 사이의 스톱 로스 라인을 비교합니다. 현재 바의 스톱 로스 라인이 깨지면 거래 신호가 작동합니다.

     Long stop-loss line breakout upwards, long entry  
     Short stop-loss line breakout downwards, short entry   
    
  3. 위험/이익 비율을 기준으로 스톱 로스를 설정하고 수익을 취합니다.

    사용자 정의된 리스크/리워드 비율 (riskRewardRatio) 을 기반으로, 스톱 로스 거리와 리워드 거리를 ATR에서 계산합니다. 스톱 로스 오더와 노프스 오더는 포지션을 열 때 설정됩니다.

이점 분석

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

  1. 동적 후속 스톱 손실

    역동적인 트레일링 스톱 로스 라인을 채택하면 적시에 스톱 로스를 방지하고 하락 위험을 제어 할 수 있습니다.

  2. 이중 기능

    스톱 로스 라인은 스톱 로스 관리 도구와 엔트리 조건 판사로 작용하여 전략 복잡성을 줄입니다.

  3. 조정 가능한 리스크/이익 비율

    미리 정의된 위험/이익 비율로 더 높은 수익을 추구합니다.

  4. 이해하기 쉽고 확장 할 수 있습니다.

    간단한 구조, 이해하기 쉽고 확장을 위해 최적화됩니다.

위험 분석

이 전략에는 몇 가지 위험이 있을 수 있습니다.

  1. 양방향 위험

    쌍방향 거래 전략으로서, 그것은 긴 위험과 짧은 위험을 모두 감수합니다.

  2. ATR 매개 변수 의존성

    ATR 매개 변수는 스톱 로스 라인 및 거래 빈도에 직접 영향을 미칩니다. 부적절한 설정은 너무 넓은 스톱 로스 또는 너무 높은 거래 빈도로 이어질 수 있습니다.

  3. 트렌드 적응력

    이 전략은 급격한 파업으로 범위가 제한된 시나리오에 더 적합합니다. 강한 트렌드 시나리오에는 적합하지 않습니다.

위의 위험을 해결하기 위한 최적화는 다음과 같습니다.

  1. 트렌드 지표 포함

    시장 트렌드를 결정하기 위해 MA와 다른 트렌드 지표를 포함하고, 트렌드에 반대하는 거래를 피하십시오.

  2. 매개 변수 최적화

    ATR 매개 변수와 리스크/어워드 비율의 조합을 최적화하여 보다 합리적인 스톱 로스를 확보하고 수익을 취합니다.

  3. 추가 필터

    거래량 또는 변동성 조건 필터를 추가하여 거래 품질을 보장합니다.

최적화 방향

전략의 최적화를 위한 여지가 있습니다.

  1. 기계 학습을 통합

    더 높은 입시 정확성을 위해 가격 추세를 예측하기 위해 기계 학습 모델을 채택하십시오.

  2. 옵션으로 위험 없는 포트폴리오를 구축

    옵션은 기본 자산의 가격 변동을 헤지하고 위험 없는 중재 포트폴리오를 구축하기 위해 사용합니다.

  3. 시장 간 다자산 중재

    안정적인 알파를 얻기 위해 다른 시장과 자산 클래스를 넘나들며 통계적 중재를 수행합니다.

  4. 알고리즘 거래

    알고리즘 트레이딩 엔진을 활용하여 효율적으로 전략과 거래를 백테스트합니다.

결론

이 문서에서는 동적 트레일링 스톱 로스를 기반으로 한 양적 거래 전략을 철저히 분석합니다. 전략은 동시에 스톱 로스 관리 기능과 거래 신호 결정 기능을 갖추고 있으며, 효과적으로 위험을 제어합니다. 또한 전략의 장점, 잠재적 위험 및 향후 최적화를 논의했습니다. 추가 연구 및 응용 가치가있는 매우 실용적인 거래 전략입니다.


/*backtest
start: 2023-12-29 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Chandelier Exit with 1-to-1 Risk-Reward", shorttitle='CE', overlay=true)

// Chandelier Exit Logic
length = input.int(title='ATR Period', defval=22)
mult = input.float(title='ATR Multiplier', step=0.1, defval=3.0)
useClose = input.bool(title='Use Close Price for Extremums', defval=true)

atr = mult * ta.atr(length)

longStop = (useClose ? ta.highest(close, length) : ta.highest(length)) - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? math.max(longStop, longStopPrev) : longStop

shortStop = (useClose ? ta.lowest(close, length) : ta.lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? math.min(shortStop, shortStopPrev) : shortStop

var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

// Risk-Reward Ratio
riskRewardRatio = input.int(1, title="Risk-Reward Ratio", minval=1, maxval=10, step=1)

// Calculate Take Profit and Stop Loss Levels
takeProfitLevel = atr * riskRewardRatio
stopLossLevel = atr

// Entry Conditions
longCondition = dir == 1 and dir[1] == -1
shortCondition = dir == -1 and dir[1] == 1

// Entry Signals
if (longCondition)
    strategy.entry("Long", strategy.long, stop=close - stopLossLevel, limit=close + takeProfitLevel)
if (shortCondition)
    strategy.entry("Short", strategy.short, stop=close + stopLossLevel, limit=close - takeProfitLevel)

longStopPlot = plot(dir == 1 ? longStop : na, title='Long Stop', style=plot.style_linebr, linewidth=2, color=color.green)
shortStopPlot = plot(dir == 1 ? na : shortStop, title='Short Stop', style=plot.style_linebr, linewidth=2, color=color.red)

midPricePlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0, display=display.none, editable=false)

fill(midPricePlot, longStopPlot, color=color.new(color.green, 90), title='Long State Filling')
fill(midPricePlot, shortStopPlot, color=color.new(color.red, 90), title='Short State Filling')

// Alerts
if (dir != dir[1])
    strategy.entry("Direction Change", strategy.long, comment="Chandelier Exit has changed direction!")
if (longCondition)
    strategy.entry("Buy Signal", strategy.long, comment="Chandelier Exit Buy!")
if (shortCondition)
    strategy.entry("Sell Signal", strategy.short, comment="Chandelier Exit Sell!")


더 많은