이 전략은 브레이크아웃과 변동성 스톱을 기반으로하는 트렌드 추적 전략이다. 이 전략은 동적 스톱 로스 라인의 가격 브레이크아웃을 통해 트렌드 방향을 식별한다. 가격이 스톱 로스 라인을 침투할 때 거래에 들어가 트렌드를 추적하고 이익을 잠금하기 위해 스톱 로스 라인을 사용합니다. 이 전략은 동적 스톱으로 위험을 제어하면서 중장기 트렌드를 포착하는 것을 목표로합니다.
이 전략은 트렌드 방향을 결정하고 스톱 손실을 추적하기 위해 변동성 스톱 지표를 사용합니다. 변동성 스톱은 가격 변동 범위에 따라 동적 스톱 손실 라인을 계산합니다. 구체적인 단계는 다음과 같습니다.
스톱 로스 라인은 가격에 따라 상하락으로 변동하여 동적 채널을 형성합니다.
가격이 스톱 로스 라인을 통과하면 트렌드 반전 신호가 됩니다. 전략은 포지션을 개척합니다.
포지션 개시 후, 전략은 다음과 같은 줄로 손해를 멈추는 것을 추적합니다.
가격이 다시 스톱 로스 라인을 치면 포지션이 종료됩니다.
이렇게 하면 전략은 트렌드를 신속히 추적할 수 있고, 동시에 스톱으로 위험을 조절할 수 있습니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
또한 고려해야 할 몇 가지 위험이 있습니다.
해결책:
이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.
전체적으로 변동성 정지와 함께 이 모멘텀 브레이크아웃 전략은 매우 실용적인 트렌드 다음 시스템이다. 그것은 트렌드 역전 기회를 포착하고 동적 정지로 위험을 효과적으로 제어하는 동시에 트렌드를 따라갈 수 있다. 적절한 매개 변수 조정으로, 트렌딩 시장에서 좋은 수익을 얻을 수 있다. 그러나 과도한 민감한 정지, 높은 거래 빈도 등과 같은 몇 가지 문제가 해결되어야 한다. 추가 최적화는 효율적이고 견고한 양자 거래 전략으로 전환할 수 있다.
/*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)