적응 트렌드 추적 중지 손실 전략

저자:차오장, 날짜: 2023-10-17 14:04:28
태그:

img

전반적인 설명

이 전략은 ATR 지표와 다른 종류의 이동 평균과 결합하여 와일더 변동성 트래킹 스톱 로스 방법을 사용하여 적응 트렌드 추적 스톱 로스 전략을 구현합니다.

전략 논리

이 전략의 핵심은 와일더 변동성 후속 스톱 알고리즘이다. 먼저 ATR 지표를 계산하고 입력된 ATR 길이와 곱자에 따라 스톱 손실 라인을 동적으로 그래프화합니다. 그 다음 닫힌 가격, 높은 가격 및 낮은 가격 중 선택한 가격 옵션을 기반으로 스톱 손실 라인의 가장 높고 가장 낮은 것을 추적합니다. 가격이 스톱 손실 라인을 깨면 거래 신호를 전송합니다.

코드에서 f_ma 함수는 RMA, EMA, SMA 및 Hull MA를 포함한 다양한 이동 평균을 구현합니다. ATR 지표는 변동성 기반 트레일링 스톱 라인을 생성하기 위해 사용자 정의 곱자에 의해 계산되고 곱됩니다. 이 라인의 가장 높고 가장 낮은 수준은 가장 높고 가장 낮은 함수를 사용하여 추적됩니다. 가격은이 트레일링 스톱 라인을 통과 할 때 거래가 수행됩니다.

유연하게 ATR 지표, 다른 이동 평균 및 조정 가능한 매개 변수를 활용함으로써이 전략은 매우 적응력있는 트렌드 추적 스톱 손실 시스템을 실현합니다. 시장에서 주요 인하가 발생하면 트렌드를 효과적으로 추적하고 손실을 중단 할 수 있습니다.

이점 분석

  • 이 전략은 와일더 변동성 트레일링 스톱 알고리즘을 활용합니다. 이것은 성숙하고 신뢰할 수있는 트렌드 추적 스톱 손실 방법론입니다.

  • 이 전략은 ATR 지표를 사용하여 고정된 스톱 로스 포인트를 피하여 스톱 로스 라인을 동적으로 계산합니다. ATR은 시장 변동성과 위험 수준을 효과적으로 반영 할 수 있습니다.

  • RMA, EMA, SMA 및 Hull MA를 포함한 다양한 이동 평균의 구현은 전략의 적응력을 향상시킵니다.

  • ATR 길이를 조정함으로써, 곱셈 매개 변수, 다양한 시장에 최적화된 매개 변수를 찾을 수 있으며, 전략 성능을 향상시킬 수 있습니다.

  • 높은 가격, 낮은 가격, 가까운 가격과 같은 다른 가격 옵션의 사용은 다양한 제품에 최적화를 허용합니다.

  • 요약하자면, 이것은 신뢰할 수 있고 적응력이 있고 쉽게 최적화 가능한 트렌드 추적 스톱 로스 전략입니다.

위험 분석

  • 전략은 매개 변수 최적화에 크게 의존합니다. 적절한 ATR 및 곱셈 매개 변수를 다른 시장과 제품에 대한 테스트를 통해 찾아야 합니다. 그렇지 않으면 스톱 손실 효과는 이상적이지 않을 수 있습니다.

  • 범위 시장에서 ATR 스톱 로스 라인은 자주 부당한 스톱 아웃을 유발할 수 있습니다. 이를 최적화하기 위해 트렌드 필터링 지표가 도입되어야합니다.

  • 스톱 로즈 라인이 너무 넓으면 손실 기회는 놓칠 수 있습니다. 너무 좁으면 거래 빈도와 슬리프 비용도 증가 할 것입니다. 신중한 테스트를 통해 균형 잡힌 지점을 찾아야 합니다.

  • 너무 많은 이동 평균 옵션은 성능 오차로 이어질 수 있습니다. 각 제품에 대해 하나의 주요 이동 평균을 선택해야하며 다른 것은 참조로만 사용해야합니다.

  • 이 전략은 트렌드 추적에 초점을 맞추고 수익을 직접적으로 목표로하지 않습니다. 다른 입출구 전략 또는 수익 기술을 결합해야합니다.

  • 부적절한 매개 변수와 함께 전략은 과도한 거래 또는 과대 규모의 보유 기간을 나타낼 수 있습니다. 이것은 최적화를 통해 해결해야합니다.

최적화 방향

  • 트렌드 식별 지표가 도입 될 수 있습니다.

  • 반전 지표는 상승 추세와 하락 추세가 번갈아지면 더 빨리 정지하고 반전 할 수 있도록 테스트 할 수 있습니다.

  • ATR 기간 매개 변수는 제품 특성과 상관관계를 가질 수 있으므로 다른 제품에는 다른 ATR 기간이 사용됩니다.

  • 부피 지표는 부피가 크게 감소할 때 스톱 로스 라인을 더 빨리 강화하기 위해 사용될 수 있습니다.

  • 스톱 로스 비율은 늘릴 수 있지만, 정상적인 리트레이싱에서 스톱 아웃을 피하기 위해 너무 좁아서는 안 됩니다.

  • 다른 지표는 모멘텀을 측정하고 모멘텀이 약할 때 멈추는 것을 느슨하게하기 위해 매개 변수를 최적화하는 데 사용할 수 있습니다.

요약

와일더 변동성 트레일링 스톱 개념에 기초하여 이 전략은 ATR 지표를 활용하여 매우 적응력 있는 트렌드 추적 스톱 로스 시스템을 설계한다. 매개 변수 최적화를 통해 다양한 거래 제품에 적용될 수 있으며, 신뢰할 수 있고 실용적인 스톱 로스 접근법이다. 그러나 트렌드 필터와 볼륨 요소와 같은 추가 개선으로 위험을 관리해야 더욱 견고하게 된다. 또한 스톱 로스 기법의 유용성을 극대화하기 위해 다른 전략과 결합되어야 한다.


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/

// Wilder's Volatility Trailing Stop Strategy with various MA's
// by SparkyFlary

//For Educational Purposes
//Results can differ on different markets and can fail at any time. Profit is not guaranteed.
strategy(title="Wilder's Volatility Trailing Stop Strategy with various MA's", shorttitle="Trailing Stop Strategy", overlay=true)

AtrMult = input(3.0, title="ATR multiplier")
ATRlength = input(7, title="ATR length")
ATRavgType = input("RMA", title="ATR moving average type", options=["RMA", "EMA", "SMA", "HULL"])
sicType = input("close", title="significant close type for trail calculation", options=["close", "high-low"])

//function for choosing moving averages
f_ma(type, src, len) =>
    float result = 0
    if type == "RMA" // Wilder's moving averaege or Running moving average
        result := rma(src, len)
    if type == "EMA" // Exponential moving average
        result := ema(src, len)
    if type == "SMA" // Simple moving average
        result := sma(src, len)
    if type == "HULL" // Hull moving average
        result := wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len)))
    result

ATR = f_ma(ATRavgType, tr, ATRlength)
upperTrail = lowest(sicType=="close"?close:low, ATRlength) + AtrMult * ATR
lowerTrail = highest(sicType=="close"?close:high, ATRlength) - AtrMult * ATR

float TS = 0
TS := close < TS[1] ? upperTrail[1] : close > TS[1] ? lowerTrail[1] : TS

//plot
plot(TS, title="trailing stop", color=close<TS?color.red:color.green)

//Strategy
buy = crossover(close, TS)
//sell = close < TS
short = crossunder(close, TS)
//cover = close > TS

strategy.entry(id="enter long", long=true, when=buy)
//strategy.close(id="enter long", comment="exit long", when=sell)
strategy.entry(id="enter short", long=false, when=short)
//strategy.close(id="enter short", comment="exit short", when=cover)

더 많은