적응형 추세 추종 손절매 전략


생성 날짜: 2023-10-17 14:04:28 마지막으로 수정됨: 2023-10-17 14:04:28
복사: 0 클릭수: 491
1
집중하다
1217
수행원

적응형 추세 추종 손절매 전략

개요

이 전략은 Wilder volatility trailing stop 방법을 사용하여 ATR 지표와 다른 유형의 이동 평균을 결합하여 매우 적응성이 강한 트렌드 추적 유형의 중지 전략을 구현합니다.

전략 원칙

이 전략의 핵심은 Wilder volatility trailing stop 알고리즘이다. 그것은 먼저 ATR 지표를 계산하고, 입력된 파라미터에 따라 ATR 지표의 길이를 계산하고, 곱하여, 동적인 스톱 로드를 얻는다. 그리고는 종식 가격, 최고 가격, 최저 가격 중 어떤 옵션과 결합하여, 지속적으로 스톱 로드의 고점과 낮은 점을 업데이트한다. 가격이 이 스톱 로드를 뚫었을 때, 구매 및 판매 작업을 수행한다.

코드에서, 먼저 f_ma 함수를 통해 RMA, EMA, SMA, Hull MA와 같은 여러 가지 이동 평균을 구현합니다. 그리고 ATR 지표를 계산하여 사용자가 설정한 곱셈을 곱하면 변동률에 기반한 스톱 라인을 얻을 수 있습니다.

이 전략은 ATR 지표, 다른 유형의 평균선 및 변수 설정을 유연하게 사용하여 매우 적응력이 강한 트렌드 추적 중지 전략을 구현합니다. 그것은 트렌드를 효과적으로 추적하여 시장에서 큰 회귀가있을 때 손실을 중단 할 수 있습니다.

우위 분석

  • 이 전략은 Wilder Volatility Trailing Stop 알고리즘을 먼저 사용한다. 이는 안정적인 트렌드 추적 방식이다.

  • 전략적으로 ATR 지표를 동적으로 사용하여 스톱 라인을 계산하면 스톱 포인트가 너무 강하지 않도록 할 수 있습니다. ATR 지표는 시장의 변동성과 위험 수준을 효과적으로 반영 할 수 있습니다.

  • 이 코드는 RMA, EMA, SMA, Hull MA와 같은 다양한 평행선 옵션을 구현하여 전략의 적응성을 강화합니다.

  • ATR의 길이를 조정하고, 곱하기 변수를 조정하여, 다른 시장에 대한 최적의 변수를 찾아서 전략 효과를 최적화 할 수 있습니다.

  • 전략은 최고 가격, 최저 가격, 종식 가격과 같은 다양한 가격 선택으로 스톱 로드를 계산할 수 있으며, 다양한 품종에 대해 최적화할 수 있다.

  • 전체적으로, 이 전략은 신뢰할 수 있고, 적응력이 강하며, 쉽게 최적화될 수 있는 트렌드 추적 중지 전략이다.

위험 분석

  • 이 전략은 주로 변수 최적화에 의존하며, 다른 시장과 품종에 따라 적절한 ATR과 곱하기 변수 조합을 찾기 위해 테스트가 필요하며, 그렇지 않으면 손실 효과는 좋지 않을 수 있다.

  • 진동상황에서 ATR 중지선이 자주 발생하여 중단을 촉발할 수 있다. 트렌드 판단 지표와 결합하여 최적화하여 진동상황을 놓치지 않도록 해야 한다.

  • 스톱 라인이 너무 느슨하면 회수 기회를 놓치게 되고, 너무 밀리면 거래 빈도와 슬라이드 비용이 증가한다. 균형점을 찾기 위해 신중한 테스트가 필요합니다.

  • 여러 가지 평균선 선택으로 인해 전략 효과의 편차가 발생할 수 있습니다. 특정 품종에 대해 하나의 주요 평균선을 선택하고 다른 평균선은 보조 참조로만 사용해야합니다.

  • 이 전략은 트렌드 추적에 초점을 맞추고 직접적인 수익을 창출할 수 없습니다. 다른 상장 퇴출 전략이나 정지 전략의 조합과 함께 사용이 고려되어야 합니다.

  • 매개 변수가 적절하지 않은 경우, 전략이 너무 자주 거래되거나 너무 오랜 시간 포지션을 보유하는 문제가 발생할 수 있습니다. 이것은 최적화로 해결해야합니다.

최적화 방향

  • 트렌드 지표가 포함되는 것을 고려하여 트렌드가 존재하는지 판단하고, 변동이 있는 상황에서 함축되는 것을 피할 수 있다.

  • 반전 지표 요소를 추가하여 공상 트렌드와 다중 트렌드가 번갈아 가면서 더 빨리 상쇄 포지션 전환을 테스트 할 수 있습니다.

  • 거래 품종의 특징과 ATR 길이 변수를 연관시키려고 시도할 수 있습니다. 다른 품종은 다른 ATR 길이 설정을 사용합니다.

  • 거래량 지표를 추가하여 거래량이 눈에 띄게 줄어들 때 스톱 라인을 강화하는 속도를 높일 수 있습니다.

  • 회수 비율을 높이는 것도 고려할 수 있지만, 너무 단단하지 않아 정상 회귀를 막기 위해 회수율을 높일 수는 없다.

  • 다른 지표의 판단력을 결합하여 파라미터 최적화를 할 수 있으며, 힘이 부족할 경우 적절히 느슨한 제지 범위가 적용된다.

요약하다

이 전략은 Wilder Volatility Trailing Stop 아이디어에 기반하여, 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)