이 전략은 동력 지표와 상대적으로 강한 지표 ((RSI) 를 결합하여, 트렌드 방향을 잡는 동시에 위험을 제어하기 위한 수동적 인 스톱 손실 메커니즘을 지원합니다. 가격이 강한 유동성이있을 때, 더 많이 구입하고, 가격이 약한 유동성이있을 때, 공백을 판매합니다. 전략은 동시에 스톱 손실 조건을 설정하여, 스톱 손실을 사용하여 최대 수익 수준을 추적하여 이익을 잠금하고 손실을 줄일 수 있습니다.
동력 지표 ADX를 사용하여 가격 경향 방향을 판단
ADX가 20보다 크면 트렌드가 나타납니다.
+DI 라인에서 -DI 라인을 통과할 때 신호
-DI 라인이 +DI 라인을 통과할 때 하향 신호
RSI 지표는 과매매를 판단합니다.
RSI 70 이상은 초고 구매 지역이며, 하향 신호입니다.
RSI가 30보다 낮으면 초과지점입니다.
ADX가 트렌드가 존재한다고 판단하고 RSI가 확인 신호를 내면, 그에 따른 다공간 연산을 수행하십시오.
이 전략은 동적으로 조정할 수 있는 후속 손실 제도를 사용하며, 두 가지 변수를 포함합니다:
활성화 비율: 포지션을 개시한 후 가격이 설정된 비율에 도달하면 활성화 후속 손실
추적 비율: 가장 최근 최고 수익률에서 추적 중단 손실의 비율
가격이 활성화 조건에 도달 한 후, 추적 중지 라인은 최대 수익 수준을 추적한다. 가격이 돌아 오면, 중지 라인은 따라 이동한다. 만약 돌아가는 폭이 설정된 추적 비율을 초과하면, 중지 라인은 촉발되어 모든 포지션을 닫는다.
동력 지표는 트렌드 방향을 판단하고, 기업들의 노력을 막는 것을 방지합니다.
RSI 지표는 역전 기회를 놓치지 않도록 합니다.
이윤을 고정하고 손실을 줄일 수 있는, 손해지기를 따라 할 수 있는
전략이 명확하고 간결하며, 실행이 이해하기 쉽습니다.
다양한 시장과 시간대에 널리 적용할 수 있습니다.
ADX는 가짜 침입이 잘못된 신호를 발생시킨다고 판단했다.
RSI는 여러 개의 가짜 신호를 발생 시켰습니다.
조정할 수 있는 손상 변수가 잘못 설정되어 있습니다.
큰 폭의 폭파로
다양한 ADX 및 RSI 파라미터 조합을 테스트하여 최적화 입학
다른 스톱 손실 활성화 포인트와 추적 폭을 감지하여 최적의 매개 변수를 찾습니다.
신호 품질을 향상시키기 위해 다른 지표에 필터링을 추가하는 것을 고려하십시오
다른 시장에서 테스트를 통해 일반 파라미터 설정을 결정합니다.
이 전략은 동력 분석, RSI 지표 및 후속 중단 메커니즘을 통합하여 트렌드 방향을 효과적으로 판단하고, 반전 지점을 식별하고 거래 위험을 제어할 수 있습니다. 전략은 명확하고, 실행이 간단하며, 주식, 외환, 디지털 통화 등의 시장에서 널리 사용할 수 있습니다.
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-03 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Trailing Stop with RSI", overlay=true)
length = input.int(12, "Momentum Length")
price = close
momentum(seria, length) =>
mom = seria - seria[length]
mom
mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)
rsiLength = input.int(14, "RSI Length")
rsiOverbought = input(70, "RSI Overbought Level")
rsiOversold = input(30, "RSI Oversold Level")
rsiValue = ta.rsi(close, rsiLength)
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_)
rsiOverboughtCondition = rsiValue >= rsiOverbought
rsiOversoldCondition = rsiValue <= rsiOversold
if rsiOverboughtCondition
strategy.close("SHORT", "SX")
strategy.entry("LONG", strategy.long)
if rsiOversoldCondition
strategy.close("LONG", "LX")
strategy.entry("SHORT", strategy.short)
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)