
이 전략은 파격 및 동적 중지 지표에 기반한 중장선 트렌드 추적 전략이다. 전략은 가격의 동적 중지 라인을 돌파하여 트렌드 방향을 판단하고, 가격이 중지 라인을 돌파했을 때 진입하고, 그 후 중지 라인을 사용하여 트렌드를 추적하고 수익을 잠금합니다. 전략은 중장선 트렌드를 포착하는 동시에 동적 중지 라인을 사용하여 위험을 제어하는 것을 목표로합니다.
이 전략은 동적 스톱 지표인 Volatility Stop를 사용하여 트렌드 방향을 판단하고 스톱을 추적한다. Volatility Stop는 가격의 변동 범위에 따라 동적 스톱 라인을 계산한다.
이렇게 하면 스톱 라인은 가격 변동에 따라 위아래로 변동하며, 동적인 통로를 형성한다.
이 전략은 가격이 스톱로스를 넘어서면 트렌드가 반전되는 것을 의미하며, 포지션을 열 수 있습니다.
포지션 개시 후, 전략은 스톱로드를 스톱로드 라인을 사용하여 추적합니다:
이 전략은 가격이 다시 스톱로즈 라인을 건드렸을 때 매매를 중지합니다.
이런 식으로, 전략은 순차적으로 진행될 수 있고, 트렌드 반전을 적시에 추적할 수 있으며, 동시에 스톱로스를 이용하여 위험을 통제할 수 있다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
이 전략에는 몇 가지 위험도 있습니다.
대책:
이 전략은 다음과 같은 부분에서 더 개선될 수 있습니다.
이 흐름 돌파 - 동적 상쇄 전략은 전체적으로 매우 실용적인 트렌드 추적 전략이다. 그것은 트렌드 반전 기회를 잡을 수 있으며, 순환으로 인해 동적 상쇄를 사용하여 효과적으로 위험을 제어 할 수 있다. 파라미터를 적절히 최적화하면 트렌드 상황에서 더 나은 수익을 얻을 수 있다. 그러나 이 전략은 상쇄가 너무 민감하고 거래 빈도가 너무 높다는 문제도 주의해야 한다. 추가적으로 최적화하면 이 전략은 고효율의 안정적인 정량 거래 시스템이 될 수 있다.
/*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)