
Tidak lagi menggunakan RSI 14 kitaran. Strategi ini secara langsung memampatkan kitaran RSI menjadi 8, dengan penurunan momentum 14 poin, khusus untuk menangkap ledakan garis pendek. Strategi RSI tradisional berulang kali berhadapan dengan pasaran yang bergolak, dan set ini lebih stabil dalam pergerakan frekuensi tinggi.
Logik terasnya sangat mudah: RSI mencetuskan isyarat multihead apabila perubahan momentum> 14, dan isyarat kosong apabila <-14. Pada masa yang sama, ia memerlukan purata perdagangan lebih daripada 13 kitaran, memastikan tidak ada pecah palsu. Reka bentuk ini lebih awal 1-2 kitaran daripada isyarat RSI yang lebih tinggi daripada RSI, untuk menangkap momen emas permulaan trend.
Stop loss 4.15%, Stop loss 1.85%, RRR mencapai 2.24:1. Rasio ini dianggap radikal dalam strategi kulit kepala, tetapi dengan stop loss bergerak 2.55%, kawalan risiko sebenar lebih ketat.
Kuncinya ialah reka bentuk berhenti bergerak: apabila harga bergerak ke arah yang menguntungkan, garis berhenti akan mengikuti penyesuaian dinamik titik tertinggi / titik terendah. Ini bermakna bahawa walaupun tidak mencapai sasaran 4.15% berhenti, sebahagian besar keuntungan dapat dikunci. Dalam pertempuran sebenar, banyak perdagangan akan dibawa keluar oleh berhenti bergerak di 2-3% lokasi, untuk mengelakkan pembalikan keuntungan.
Jumlah dagangan mesti melebihi purata 13 kitaran untuk membuka kedudukan. Reka bentuk ini menyaring 90% daripada isyarat palsu. Banyak strategi RSI membuka kedudukan dengan kerap dalam persekitaran yang rendah, dan hasilnya adalah berbalik.
Garis purata jumlah transaksi 13 kitaran lebih sensitif daripada 20 kitaran yang biasa, dan dapat mengenal pasti aliran wang lebih cepat. 1 kali ganda tidak kelihatan tinggi, tetapi dengan tindak balas cepat RSI 8 kitaran, sudah cukup untuk menyaring peluang terobosan yang benar.
Kemasukan berbilang mata perlu memenuhi salah satu daripada tiga syarat: RSI momentum> 14, RSI rebound dari zona oversold, RSI melalui garis oversold. Reka bentuk ini lebih fleksibel daripada satu syarat dan menyesuaikan diri dengan keadaan pasaran yang berbeza.
Garis overbid ditetapkan pada 10, garis overbuy ditetapkan pada 90, lebih melampau daripada 30⁄70 tradisional. Keuntungan untuk melakukan ini adalah untuk mengurangkan isyarat palsu, keburukan adalah kemungkinan kehilangan beberapa peluang.
Strategi ini paling sesuai untuk varian yang bergelombang tinggi seperti mata wang kripto, pasangan mata wang utama asing, dan saham popular.
Jendela masa terbaik adalah tempoh berlainan waktu perdagangan Eropah dan Amerika, di mana kecairan adalah yang terbaik dan penapis jumlah transaksi paling berkesan. Waktu Asia, kualiti isyarat akan menurun kerana jumlah transaksi yang lebih rendah.
Data retrospektif menunjukkan bahawa strategi ini mempunyai risiko kerugian berturut-turut, terutamanya dalam pasaran yang bergolak di sebelah kiri. 8 RSI kitaran terlalu sensitif dan mudah dilumpuhkan berulang kali dalam golak dalam tempoh.
Adalah disyorkan untuk tidak mengambil risiko lebih daripada 2% dari akaun dalam satu kali dan berhenti berdagang selepas 3 kerugian berturut-turut. Pemantauan semula sejarah tidak mewakili keuntungan masa depan, dan perdagangan langsung memerlukan pengurusan dana dan kawalan psikologi yang ketat.
/*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")