변동성 중지와 함께 모멘텀 브레이크 전략

저자:차오장, 날짜: 2023-11-13 17:20:51
태그:

img

전반적인 설명

이 전략은 브레이크아웃과 변동성 스톱을 기반으로하는 트렌드 추적 전략이다. 이 전략은 동적 스톱 로스 라인의 가격 브레이크아웃을 통해 트렌드 방향을 식별한다. 가격이 스톱 로스 라인을 침투할 때 거래에 들어가 트렌드를 추적하고 이익을 잠금하기 위해 스톱 로스 라인을 사용합니다. 이 전략은 동적 스톱으로 위험을 제어하면서 중장기 트렌드를 포착하는 것을 목표로합니다.

전략 논리

이 전략은 트렌드 방향을 결정하고 스톱 손실을 추적하기 위해 변동성 스톱 지표를 사용합니다. 변동성 스톱은 가격 변동 범위에 따라 동적 스톱 손실 라인을 계산합니다. 구체적인 단계는 다음과 같습니다.

  1. 가격의 ATR (평균 실제 범위) 를 계산합니다
  2. 스톱 로스 인수와 ATR을 곱하여 스톱 로스 라인을 얻으십시오.
  3. 가격이 올라가면 최고값을 기록합니다. 스톱 로스 라인은 최고값인 ATR * 계수를 빼면 됩니다.
  4. 가격이 하락하면 가장 낮은 가격을 기록합니다. 스톱 로스 라인은 가장 낮은 가격 더하기 ATR * 계수입니다.

스톱 로스 라인은 가격에 따라 상하락으로 변동하여 동적 채널을 형성합니다.

가격이 스톱 로스 라인을 통과하면 트렌드 반전 신호가 됩니다. 전략은 포지션을 개척합니다.

  • 가격이 스톱 로스 라인을 넘어서면, 장거리
  • 가격이 스톱 로스 라인 아래로 넘어갈 때, 쇼트

포지션 개시 후, 전략은 다음과 같은 줄로 손해를 멈추는 것을 추적합니다.

  • 긴 동안, 손실을 중지 하 고 가장 높은 가격 빼기 ATR * 계수
  • 간단히 말해서, 스톱 로스는 가장 낮은 가격 더하기 ATR * 계수입니다.

가격이 다시 스톱 로스 라인을 치면 포지션이 종료됩니다.

이렇게 하면 전략은 트렌드를 신속히 추적할 수 있고, 동시에 스톱으로 위험을 조절할 수 있습니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 트렌드 반전을 적시에 파악하고 트렌드를 따라갈 수 있습니다.
  2. 시장 변동성에 기초한 스톱 포지션을 조정하기 위해 동적 스톱 손실을 사용합니다.
  3. 최대 이윤을 확보하려는 경향을 가진 스톱 로스 업데이트
  4. 상당한 수익을 달성하는 경향을 타고
  5. 위험을 효과적으로 통제하고 큰 손실을 피합니다.

위험 분석

또한 고려해야 할 몇 가지 위험이 있습니다.

  1. 스톱 로즈는 다양한 시장에서 자주 실행될 수 있습니다.
  2. 적절한 중지 손실 계수를 설정해야 합니다, 너무 작은 너무 민감한 수 있습니다
  3. 거래 수수료는 빈번한 거래로 수익을 소모 할 수 있습니다.
  4. 트렌드의 초기 단계에서 약간의 이익을 잃을 수 있습니다.
  5. 스톱 로즈가 가격에서 너무 멀어질 때 발생하는 위험

해결책:

  1. 최고의 매개 변수를 찾기 위해 백테스트를 통해 중지 손실 계수를 최적화
  2. 거래 빈도를 낮추기 위해 더 긴 시간 프레임을 사용
  3. 과잉 거래 방지 필터를 추가합니다
  4. 정지 거리에 약간의 유연성을 허용하지만 너무 크지 않습니다.

최적화 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 최고의 매개 변수 조합을 찾기 위해 중지 손실 계수를 최적화
  2. 필터를 추가 하 여 시장의 범위에서 을 피하기 위해
  3. 신호 검증을 위해 여러 시간 프레임을 결합
  4. 위치 크기를 최적화, 점진적으로 크기를 증가
  5. 시간 프레임의 동적 조정 고려
  6. 주류 트렌드를 파악하기 위해 주식 기본 요소와 결합

요약

전체적으로 변동성 정지와 함께 이 모멘텀 브레이크아웃 전략은 매우 실용적인 트렌드 다음 시스템이다. 그것은 트렌드 역전 기회를 포착하고 동적 정지로 위험을 효과적으로 제어하는 동시에 트렌드를 따라갈 수 있다. 적절한 매개 변수 조정으로, 트렌딩 시장에서 좋은 수익을 얻을 수 있다. 그러나 과도한 민감한 정지, 높은 거래 빈도 등과 같은 몇 가지 문제가 해결되어야 한다. 추가 최적화는 효율적이고 견고한 양자 거래 전략으로 전환할 수 있다.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
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/
//@version=4
strategy(shorttitle='Volatility Stop Strategy',title='Volatility Stop Strategy (by Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h
// Best time frame 2H

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(3.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


//Entry 


strategy.entry(id="long", long = true, when = crossover(close, vStop) and window())

//Exit
strategy.close("long", when = crossunder(close, vStop))

plot(vStop,"Vstop", color.black, linewidth=2)


더 많은