변동성 중지 추적 전략

저자:차오장, 날짜: 2023-12-01 17:53:36
태그:

img

전반적인 설명

이것은 가격 변동성에 기반한 트렌드 추적 스톱 로스 전략이다. 가격 변동에 대한 스톱 로스 라인을 설정하기 위해 평균 참 범위 (ATR) 를 사용합니다. ATR은 가격의 변동성과 위험 수준을 반영합니다. 가격이 스톱 로스 라인을 초과하면 전략은 트렌드 반전을 판단하고 해당 조치를 취하여 포지션을 열거나 손실을 중지합니다.

전략 원칙

전략은 먼저 특정 기간 동안의 평균 진정한 범위 (ATR) 를 계산합니다. 그 다음 현재 가격 트렌드 방향에 따라 상승 추세라면 현재 최고 가격 마이너스 n 배의 ATR로 스톱 로스 라인을 설정합니다. 하락 추세라면 현재 최저 가격과 n 배의 ATR로 스톱 로스 라인을 설정합니다. n 값은 스톱 로스 라인과 가격 사이의 거리를 제어하기 위해 매개 변수를 통해 조정 할 수 있습니다.

가격이 상승 트렌드 또는 하락 트렌드의 스톱 로스 라인을 통과하면 트렌드가 변경된 것으로 판단됩니다. 이 시점에서 전략은 스톱 로스 포지션을 클리어하고 새로운 트렌드 방향에 따라 새로운 스톱 로스 라인을 설정합니다.

요약하자면, 전략은 가격 변동성을 사용하여 트렌드 변화에 대한 정확한 판단을 달성하기 위해 스톱 로스 라인을 설정합니다. 트렌드 변화가 발생했을 때 신속한 스톱 로스는 전략이 새로운 트렌드의 방향을 파악하는 데 도움이됩니다.

전략 의 장점

  • 가격 변동성 특성을 사용하여 트렌드를 판단하고 가격 전환점을 정확하게 파악합니다.
  • 적시에 손실을 중지하고 시장 전환 위험을 줄이기 위해 포지션을 변경합니다.
  • 스톱 로스 라인과 가격 변동 사이의 제어 거리에 대한 유연한 매개 변수 조정
  • 매개 변수는 더 나은 적응성을 위해 특정 제품에 최적화 할 수 있습니다.

전략 의 위험

  • 유효하지 않은 브레이크로 인한 잘못된 판단의 위험. 가격은 지속 불가능한 유효하지 않은 브레이크로 인해 트렌드 변화에 대한 잘못된 판단을 일으킬 수 있습니다.
  • 과도하게 공격적인 매개 변수 설정은 손실을 증가시킬 수 있습니다. 예를 들어, n 값이 너무 커지면, 중지 손실 라인은 너무 가깝고 작은 변동이 발생 할 수 있습니다.
  • 스톱 로스 효과는 통화와 같은 낮은 변동성 제품에는 좋지 않을 수 있습니다. 더 작은 ATR 값은 스톱 로스 라인이 가격에 더 가깝다는 것을 의미합니다.

최적화 방향

  • 거래량이나 변동성 가속화와 같은 보조 지표는 유효하지 않은 브레이크업에 대한 잘못된 판단을 피하기 위해 도입될 수 있습니다.
  • 다른 제품의 특성에 따라 n 값을 조정하여 중지 손실 거리를 더 적절하게 만듭니다.
  • 또한 ATR 기간은 가격 격차 변동성을 판단하는 가장 적합한 기간 매개 변수를 선택하도록 최적화 할 수 있습니다.

요약

전체적으로 이것은 가격 변동성에 기초한 스톱 로스 라인을 설정하는 좋은 알고리즘 구현입니다. 가격 트렌드를 판단하는 정확도는 높으며 트렌드의 주요 전환점을 캡처 할 수 있습니다. 또한 더 나은 적응력을 위해 매개 변수 조정에 약간의 공간을 제공합니다. 스톱 로스 전략으로 시장 역전의 위험을 효과적으로 피할 수 있으며 라이브 거래에서 적용 할 가치가 있습니다.


/*backtest
start: 2022-11-30 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © laptevmaxim92

//@version=4
strategy("Volatility stop strategy", overlay=true)

length = input(20)
mult = input(2, step = 0.1)
utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2039, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

atr_ = atr(length)
max_ = 0.0
min_ = 0.0
max1 = 0.0
max1 := max(nz(max_[1]), close)
min1 = 0.0
min1 := min(nz(min_[1]), close)
vstop = 0.0
is_uptrend = false
is_uptrend_prev = false
is_uptrend_prev := nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? color.green : color.red, linewidth=2)

longCondition = is_uptrend
if (longCondition and use_date)
    strategy.entry("BUY", strategy.long)

shortCondition = not is_uptrend
if (shortCondition and use_date)
    strategy.entry("SELL", strategy.short)
    
if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

더 많은