
이 전략은 가격의 동적 지표를 계산하고, 장단한 쌍방향 추적 스톱을 설정하여 수익을 잠금하여 트렌드 추적 스톱을 실현합니다. 전략은 동시에 활성화 레벨과 결합하여 지정된 수익을 달성한 후에 스톱을 추적하기 시작하면 조기 중지되는 것을 효과적으로 방지 할 수 있습니다.
가격의 12회 동력을 계산하고, 동력의 1회 동력을 계산한다. 빠른 동력 (가격동력의 1회 동력) 이 0시 이상일 때 더하고, 0시 미만일 때 빈한다. 이렇게 하면 가격동력의 변화 방향을 판단하고, 가격 경향을 파악할 수 있다.
트래킹 중지 거리 및 트래킹 중지 활성화 레벨을 설정하십시오. 트래킹 중지 거리는 가격이 새로운 최고점 또는 최저점으로 실행 될 때 지정된 거리로 스톱을 조정하는 것을 의미합니다. 트래킹 중지 활성화는 특정 수익률을 달성 한 후에 스톱을 추적하는 것을 의미합니다.
이 전략은 최고 가격이나 최저 가격을 추적하여 수익을 고정하고, 가격이 설정된 스톱 로즈 거리를 넘어서면 평점 신호를 낸다.
이중 동량 판단을 사용하여 가격 추세 방향을 정확하게 판단하여 거래 횟수를 줄이고 피하는 것이 가능합니다.
유연한 설정으로 스톱로스를 추적하여 위험을 줄이고 수익을 고정할 수 있습니다.
트래킹 스톱 손실 활성화 레벨을 설정할 수 있으며, 특정 수익을 달성한 후에만 스톱 손실 메커니즘을 시작하여 조기 스톱 손실을 방지 할 수 있습니다.
다중 헤드 및 공허 헤드의 손실 수준을 동시에 설정하여 위험을 완전히 제어 할 수 있습니다.
계산 과정이 간단하고 효율적이며, 이해하기 쉽고, 실행하기 쉽습니다.
이중 동력 판단은 역전 신호가 발생할 수 있으며, 트렌드 필터링을 결합해야 한다.
스톱더미널이 너무 커진다면 상당한 손실이 발생할 수 있다.
활성화 레벨이 너무 높으면 스톱 손실 기회를 놓칠 수 있습니다.
더 많은 변수 테스트와 최적화가 필요한데, 최적의 정지점을 찾기 위해서다.
트렌드 판단과 변수 최적화를 통해 잘못된 신호를 줄일 수 있다. 다양한 품종의 계약과 변수 설정을 테스트하여 최적의 구성을 찾는다.
시장 구조를 식별하는 지표와 결합하여, 빈도 트렌드를 확인하고, 역거래를 피하십시오.
거래량 변화, 축소량 돌파 등과 같은 더 많은 선택 조건이 추가되어 신호의 정확도가 향상되었습니다.
파라미터를 최적화하고, 다양한 스톱 거리 및 활성화 레벨의 성능을 테스트한다.
동적으로 추적된 스톱 라인지를 고려하고, 시장의 변동에 따라 자동으로 조정한다.
부분 상쇄 또는 이동 상쇄를 설정하여 위험을 더욱 제어할 수 있다.
이 전략의 전체 구조는 명확하고, 이중 동량 지표를 통해 가격 추세를 판단하고, 수익을 고정하기 위해 유연한 추적 스톱로스를 설정하고, 거래 위험을 효과적으로 제어할 수 있습니다. 이 전략은 이해하기 쉽고 구현할 수 있으며, 더 많은 기술 지표와 변수 테스트를 추가하여 전략의 성능을 더욱 향상시킬 수있는 최적화 할 수있는 공간이 있습니다. 이 전략은 스톱 손해 관리를 구현하기위한 아이디어와 참고 자료를 제공 할 수 있습니다.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Trailing Stop Snippet", overlay=true)
length = input(12)
price = close
momentum(seria, length) =>
mom = seria - seria[length]
mom
mom0 = momentum(price, length)
mom1 = momentum( mom0, 1)
tsact = input.float(0.0, "Trailing Stop Activation |", group="strategy", tooltip="Activates the Trailing Stop once this PnL is reached.") / 100
tsact := tsact ? tsact : na
ts = input.float(0.0, "Position Trailing Stop |", group="strategy", tooltip="Trails your position with a stop loss at this distance from the highest PnL") / 100
ts := ts ? ts : na
in_long = strategy.position_size > 0
in_short = strategy.position_size < 0
var ts_ = array.new_float()
ts_size = array.size(ts_)
ts_get = ts_size > 0 ? array.get(ts_, ts_size - 1) : 0
if in_long
if tsact and high > strategy.position_avg_price + strategy.position_avg_price * tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if not tsact
if ts_size > 0 and ts_get < high
array.push(ts_, high)
if ts_size < 1
array.push(ts_, high)
if in_short
if tsact and low < strategy.position_avg_price - strategy.position_avg_price * tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
if not tsact
if ts_size > 0 and ts_get > low
array.push(ts_, low)
if ts_size < 1
array.push(ts_, low)
trail = in_long and ts_size > 0 ? low < ts_get - ts_get * ts : in_short and ts_size > 0 ? high > ts_get + ts_get * ts : na
if (mom0 > 0 and mom1 > 0)
strategy.entry("MomLE", strategy.long, stop=high+syminfo.mintick, comment="MomLE")
else
strategy.cancel("MomLE")
if (mom0 < 0 and mom1 < 0)
strategy.entry("MomSE", strategy.short, stop=low-syminfo.mintick, comment="MomSE")
else
strategy.cancel("MomSE")
tsClose = in_long ? ts_get - ts_get * ts : in_short ? ts_get + ts_get * ts : na
if trail
strategy.close_all()
if not strategy.opentrades
array.clear(ts_)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)
plotchar(ts_get, "GET", "")
plot(strategy.position_avg_price > 0 ? strategy.position_avg_price : na, "Average", color.rgb(251, 139, 64), 2, plot.style_cross)
plot(tsClose > 0 ? tsClose : na, "Trailing", color.rgb(251, 64, 64), 2, plot.style_cross)
plot(strategy.position_avg_price - strategy.position_avg_price * tsact > 0 ? strategy.position_avg_price - strategy.position_avg_price * tsact : na, "TS Activation", color.fuchsia, 2, plot.style_cross)