
14주기 RSI를 사용하지 마십시오. 이 전략은 RSI 주기를 8으로 압축하고 14점의 동력 하락을 통해 단선 폭발을 잡습니다. 전통적인 RSI 전략은 흔들리는 시장에서 반복적으로 맞붙습니다. 이 조합은 고 주파수 변동에서 더 안정적입니다.
핵심 논리는 매우 직설적입니다: RSI의 동력 변화가> 14일 때 멀티 헤드 신호를 유발하고, <-14일 때 빈 헤드 신호를 유발합니다. 동시에 거래량이 13주기를 초과하는 평균을 요구하며, 가짜 돌파구가 아닌지 확인합니다. 이 디자인은 단순한 RSI의 초과 구매 초과 판매 신호보다 1-2주기를 앞당겨 트렌드가 시작되는 황금 순간을 포착합니다.
4.15%의 중지, 1.85%의 중지, 2.24: 1의 리스크 수익 비율. 이 비율은 탈피 전략에서 급진적이지만 2.55%의 이동 중지와 함께 실제 위험 통제가 더 엄격합니다.
핵심은 이동한 스톱의 디자인이다: 가격이 유리한 방향으로 움직일 때, 스톱 라인은 최고점/최저점의 동적 조정을 따른다. 이것은 4.15%의 스톱 목표가 달성되지 않더라도 대부분의 이익을 잠금할 수 있다는 것을 의미한다. 실전에서는 많은 거래가 2-3%의 위치에서 이동한 스톱으로 가져오며, 이익을 회전하는 것을 피한다.
거래량이 13주기 평균을 초과해야 입장을 열 수 있다. 이 설계는 가짜 신호의 90%를 필터링한다. 많은 RSI 전략은 낮은 양의 환경에서 자주 입장을 열고, 결과적으로 돌아 돌아 맞는다.
13주기 거래량 평균선은 일반적인 20주기보다 더 민감하며, 더 빨리 자금 유입을 식별할 수 있다. 1배의 수치는 높지 않은 것처럼 보이지만, 8주기 RSI의 빠른 반응과 함께, 진정한 돌파 기회를 가하기에 충분하다.
다중 입장은 세 가지 조건 중 하나를 충족해야 합니다: RSI 동력> 14, RSI가 초상 판매 영역에서 반발하고 RSI가 초상 판매 라인을 통과합니다. 이 디자인은 단일 조건보다 더 유연하고 다른 시장 상태에 적응합니다.
오버셀 라인은 10로 설정하고, 오버바이는 90로 설정하고, 전통적인 30/70보다 더 극단적입니다. 이렇게 하는 것의 장점은 가짜 신호를 줄이고, 나쁜 점은 몇 가지 기회를 놓칠 수 있습니다. 하지만, 탈피 전략의 경우, 놓치거나 실수하지 않는 것이 좋습니다.
이 전략은 암호화폐, 외환 주요 통화 쌍, 인기 주식과 같은 높은 변동성 품종에 가장 적합합니다. 낮은 변동성 블루핑 주식이나 채권에는 큰 할인 혜택이 제공됩니다.
최적의 시간창은 유럽/미국 거래시간이 겹치는 시기이며, 이 때 유동성이 가장 좋고 거래량 필터가 가장 효과적이다. 아시아 시간대는 거래량이 낮기 때문에 신호 품질이 떨어진다.
회귀 데이터는 이 전략이 연속적인 손실의 위험이 있음을 보여줍니다. 특히 수평 상동 시장에서 8주기 RSI가 너무 민감하여 간격 상동에서 반복적으로 손실 될 수 있습니다.
한 번의 리스크 은 계좌의 2%를 초과하지 않고, 3번 연속으로 상쇄 손실을 입으면 거래를 중지하는 것이 좋습니다. 역사적인 회귀는 미래의 수익을 의미하지 않으며, 실드 거래는 엄격한 자금 관리와 심리적 통제가 필요합니다.
/*backtest
start: 2024-09-29 00:00:00
end: 2025-09-26 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Bybit","currency":"ETH_USDT","balance":500000}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © MonkeyPhone
//@version=5
strategy("RSI Momentum Scalper", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, calc_on_order_fills=true)
// Trading Mode Selection
tradeMode = input.string("Both", title="Trade Mode", options=["Both", "Long Only", "Short Only"])
// RSI Settings
rsiLength = input.int(8, title="RSI Length", minval=2, maxval=30)
rsiOverbought = input.int(90, title="RSI Overbought", minval=60, maxval=99)
rsiOversold = input.int(10, title="RSI Oversold", minval=1, maxval=40)
rsiMomentumThreshold = input.float(14, title="RSI Momentum Threshold", minval=1, maxval=15, step=0.5)
// Volume Settings
volMultiplier = input.float(1, title="Volume Multiplier", minval=1.0, maxval=3.0, step=0.1)
volLookback = input.int(13, title="Volume MA Length", minval=5, maxval=50)
// Exit Settings
takeProfitPercent = input.float(4.15, title="Take Profit %", minval=0.1, maxval=10.0, step=0.1)
stopLossPercent = input.float(1.85, title="Stop Loss %", minval=0.1, maxval=6.0, step=0.1)
trailingStopPercent = input.float(2.55, title="Trailing Stop %", minval=0.1, maxval=4.0, step=0.05)
// Calculate RSI
rsi = ta.rsi(close, rsiLength)
rsiMA = ta.sma(rsi, 3)
// Calculate RSI Momentum
rsiMomentum = rsi - rsi[1]
// Volume Analysis
volMA = ta.sma(volume, volLookback)
highVolume = volume > volMA * volMultiplier
// Entry Conditions - Long
bullishMomentum = rsiMomentum > rsiMomentumThreshold
oversoldBounce = rsi < rsiOversold and rsi > rsi[1]
bullishCross = ta.crossover(rsi, rsiOversold)
longCondition = (bullishMomentum or oversoldBounce or bullishCross) and highVolume and close > close[1]
// Entry Conditions - Short
bearishMomentum = rsiMomentum < -rsiMomentumThreshold
overboughtReversal = rsi > rsiOverbought and rsi < rsi[1]
bearishCross = ta.crossunder(rsi, rsiOverbought)
shortCondition = (bearishMomentum or overboughtReversal or bearishCross) and highVolume and close < close[1]
// Apply trade mode filter
longEntry = longCondition and (tradeMode == "Both" or tradeMode == "Long Only")
shortEntry = shortCondition and (tradeMode == "Both" or tradeMode == "Short Only")
// Entry Logic
strategy.entry("Long", strategy.long, when=longEntry and strategy.position_size == 0)
strategy.entry("Short", strategy.short, when=shortEntry and strategy.position_size == 0)
// Declare and initialize trailing variables
var float highest_since_long = na
var float lowest_since_short = na
var float long_trailing_level = na
var float short_trailing_level = na
var float long_fixed_sl = na
var float long_tp = na
var float short_fixed_sl = na
var float short_tp = na
// Update trailing levels using ternary operators with math.max/min
highest_since_long := strategy.position_size > 0 ? math.max(na(highest_since_long[1]) ? math.max(high, strategy.position_avg_price) : highest_since_long[1], high) : na
lowest_since_short := strategy.position_size < 0 ? math.min(na(lowest_since_short[1]) ? math.min(low, strategy.position_avg_price) : lowest_since_short[1], low) : na
// Calculate exit levels
long_fixed_sl := strategy.position_size > 0 ? strategy.position_avg_price * (1 - stopLossPercent / 100) : na
long_tp := strategy.position_size > 0 ? strategy.position_avg_price * (1 + takeProfitPercent / 100) : na
long_trailing_level := strategy.position_size > 0 ? highest_since_long * (1 - trailingStopPercent / 100) : na
short_fixed_sl := strategy.position_size < 0 ? strategy.position_avg_price * (1 + stopLossPercent / 100) : na
short_tp := strategy.position_size < 0 ? strategy.position_avg_price * (1 - takeProfitPercent / 100) : na
short_trailing_level := strategy.position_size < 0 ? lowest_since_short * (1 + trailingStopPercent / 100) : na
// Effective stop loss levels
effective_long_sl = strategy.position_size > 0 ? math.max(long_fixed_sl, long_trailing_level) : na
effective_short_sl = strategy.position_size < 0 ? math.min(short_fixed_sl, short_trailing_level) : na
// Exit Logic
strategy.exit("Long Exit", "Long", limit=long_tp, stop=effective_long_sl, when=strategy.position_size > 0)
strategy.exit("Short Exit", "Short", limit=short_tp, stop=effective_short_sl, when=strategy.position_size < 0)
// Plot TP, fixed SL, and trailing SL levels on chart when in position
plot(strategy.position_size > 0 ? long_tp : na, title="Long TP", color=color.green, style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_fixed_sl : na, title="Long Fixed SL", color=color.red, style=plot.style_linebr)
plot(strategy.position_size > 0 ? long_trailing_level : na, title="Long Trailing SL", color=color.orange, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_tp : na, title="Short TP", color=color.green, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_fixed_sl : na, title="Short Fixed SL", color=color.red, style=plot.style_linebr)
plot(strategy.position_size < 0 ? short_trailing_level : na, title="Short Trailing SL", color=color.orange, style=plot.style_linebr)
// Alerts
alertcondition(longEntry, title="Long Entry Alert", message="RSI Momentum Long Signal")
alertcondition(shortEntry, title="Short Entry Alert", message="RSI Momentum Short Signal")