트렌드 돌파 - 모멘텀 손절매 전략


생성 날짜: 2023-11-13 17:20:51 마지막으로 수정됨: 2023-11-13 17:20:51
복사: 0 클릭수: 847
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

트렌드 돌파 - 모멘텀 손절매 전략

개요

이 전략은 파격 및 동적 중지 지표에 기반한 중장선 트렌드 추적 전략이다. 전략은 가격의 동적 중지 라인을 돌파하여 트렌드 방향을 판단하고, 가격이 중지 라인을 돌파했을 때 진입하고, 그 후 중지 라인을 사용하여 트렌드를 추적하고 수익을 잠금합니다. 전략은 중장선 트렌드를 포착하는 동시에 동적 중지 라인을 사용하여 위험을 제어하는 것을 목표로합니다.

전략 원칙

이 전략은 동적 스톱 지표인 Volatility Stop를 사용하여 트렌드 방향을 판단하고 스톱을 추적한다. Volatility Stop는 가격의 변동 범위에 따라 동적 스톱 라인을 계산한다.

  1. 가격의 ATR을 계산합니다.
  2. ATR 값에 따라 정지 인수를 곱하면 정지 라인을 얻습니다.
  3. 가격이 상승할 때, 최고 가격을 기록하고, 스톱 라인은 최고 가격으로 ATR 곱하기 인수
  4. 가격이 하락할 때, 최저값을 기록하고, 최저값으로 ATR 곱하기 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)