이 전략은 상대적 강도 지수 (RSI) 와 동적 트레일링 스톱 메커니즘을 결합하여 위험을 제어하는 동시에 트렌드 방향을 파악합니다. 강한 상승 동력이있을 때 길고 강한 하락 동력이있을 때 짧습니다. 이 전략은 또한 수익을 취하고 손실을 줄이기 위해 트레일링 스톱을 사용하여 수익을 취하고 손실을 줄이는 조건을 설정합니다.
ADX 지표를 사용하여 가격 트렌드 방향을 결정합니다.
ADX 20 이상 트렌드가 나타납니다.
+DI가 -DI보다 높으면 신호가 길어집니다.
-DI +DI 아래로 넘어가면 신호가 짧습니다.
과잉 매수/ 과잉 판매를 식별하는 RSI
70 이상인 RSI는 과잉 매입, 단축 신호를 나타냅니다.
30 이하의 RSI는 지나친 판매, 긴 신호를 나타냅니다.
ADX가 트렌드 + RSI 확인 신호를 표시할 때 긴/단 포지션을 취합니다.
이 전략은 두 개의 매개 변수를 가진 동적 트레일링 스톱 메커니즘을 사용합니다.
활성화 레벨: 가격이 진입 후 설정된 비율에 도달하면 트레일링 스톱을 활성화합니다.
트레일링 비율: 가장 높은 수익에서 정지 레벨 트레일 설정 비율
트레일링 스톱이 활성화되면 가장 높은 수익 수준을 따르게 됩니다. 가격이 리트레이스를 할 때, 스톱 레벨은 낮아집니다. 리트레이싱이 트레일 퍼센트를 초과하면 모든 포지션을 닫는 스톱이 트리거됩니다.
모멘텀 ADX는 트렌드 방향을 결정하고 거짓 브레이크를 피합니다.
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)