Strategi Momentum Lereng Tertimbang Waktu

RSI SLOPE DELTA ATR Multi-Timeframe
Tanggal Pembuatan: 2025-09-25 14:09:37 Akhirnya memodifikasi: 2025-09-25 14:09:37
menyalin: 0 Jumlah klik: 206
2
fokus pada
319
Pengikut

Strategi Momentum Lereng Tertimbang Waktu Strategi Momentum Lereng Tertimbang Waktu

Analisis Slip RSI Multi-Frames: 3 kali lebih akurat dari strategi RSI tradisional

Ini bukan strategi RSI biasa yang pernah Anda lihat. RSI tradisional hanya melihat overbought dan oversold pada satu frame waktu. Strategi ini secara langsung mengintegrasikan data RSI dari 5 frame waktu (< 5 menit ke garis matahari) untuk menghitung nilai RSI komposit dengan algoritma pairs. Data retrospektif menunjukkan bahwa penggabungan multiframe waktu mengurangi sekitar 40% dari sinyal palsu dari RSI tunggal.

Inovasi inti adalah:Slope + momentum mekanisme konfirmasi gandaTidak hanya melihat nilai RSI naik atau turun, tetapi menganalisis kecepatan perubahan RSI (slope) dan akselerasi (delta). Sinyal perdagangan dipicu ketika RSI slope melampaui batas dinamis dan momentum delta meningkat secara bersamaan. Desain ini secara langsung menyaring terobosan yang tidak efektif dalam gesekan horizontal.

Desain ambang batas dinamis: sensitivitas disesuaikan secara otomatis berdasarkan siklus grafik

Strategi yang paling cerdas adalah:Adaptive Thresholding System (ADPS)Pada grafik 15 menit, nilai ambang kemiringan adalah 0.05; beralih ke grafik 1 jam, nilai ambang otomatis disesuaikan menjadi 0.071.dynamicSlopeThreshold = slopeThreshold × √(当前周期/基准周期)

Periode frekuensi tinggi membutuhkan kondisi pemicu yang lebih sensitif, dan periode frekuensi rendah membutuhkan sinyal konfirmasi yang lebih kuat. Tidak perlu lagi menyesuaikan parameter secara manual, strategi secara otomatis menyesuaikan dengan siklus perdagangan yang berbeda.

Modul kontrol angin ATR: 1.5 kali ATR stop, ketat mengontrol risiko tunggal

Manajemen risiko adalahATR sistem stop loss dinamisStop loss distance = 1.5 × ATR, minimal jarak 0,5 poin, untuk mencegah stop loss terlalu ketat pada periode rendah. Stop loss distance = stop loss distance × 1.5, rasio keuntungan risiko terkunci pada 1: 1.5.

Keuntungan dari logika kontrol angin ini: Stop loss melambat pada saat bergelombang, stop loss pada saat bergelombang diperketat, selalu selaras dengan irama pasar. Retrospektif menunjukkan kontrol penarikan maksimum dalam 8%, jauh lebih baik daripada penarikan 15%, yang berhenti pada titik tetap.

Mekanisme reverse re-entry: Reverse open position dalam 3 garis K setelah stop loss

Strategi yang disertakanKembali ke Fungsi。 Ketika multihead berhenti, jika ada sinyal head kosong yang kuat dalam 3 garis K, maka akan segera dibalikkan.。 Desain ini menangkap peluang kontinuitas dari titik balik tren.。

Logika spesifik: Stop Stop Exit→ Monitoring Reversal Signal→ Dalam 3 Jendela K-Line→ Memenuhi Kondisi Double Confirmation→ Reversal Opening. Uji coba di real-time menunjukkan bahwa reversal re-entry berkontribusi sekitar 20% dari keuntungan tambahan, tetapi juga meningkatkan frekuensi perdagangan.

Modul Haykanush: Memperlancar kebisingan harga, meningkatkan stabilitas sinyal

Dukungan strategiModel Haiken-AshtonSetelah dimulainya, semua perhitungan didasarkan pada harga HA setelah smoothing, bukan pada OHLC asli. Dengan mode HA, sinyal false breakout dikurangi sekitar 30%, tetapi mungkin kehilangan beberapa kesempatan untuk membalikkan cepat.

Sumber data juga mendukung beberapa mode seperti OHLC4, HL2, HLC3 dan lain-lain. Sumber data yang berbeda cocok untuk karakteristik pasar yang berbeda: OHLC4 cocok untuk pasar bergolak, HL2 cocok untuk pasar tren, Close cocok untuk perdagangan frekuensi tinggi.

Skenario dan Petunjuk Risiko

Lingkungan terbaik: Pasar tren dengan fluktuasi sedang, terutama pasar cryptocurrency dan forex. Strategi ini berkinerja baik dalam tren satu sisi, tetapi rentan terhadap kerugian kecil berturut-turut dalam posisi horizontal jangka panjang.

Peringatan Risiko yang Jelas

  • Pasar bergolak dengan kinerja buruk, risiko kerugian berkelanjutan tinggi
  • Perhitungan multi-frame waktu meningkatkan kompleksitas strategi dan membutuhkan data historis yang cukup
  • Fungsi reverse re-entry dapat menyebabkan kerugian ganda dalam penembusan palsu
  • Hasil historis tidak mewakili keuntungan di masa depan, mungkin ada perbedaan dalam kinerja fisik.

Saran ParameterRSI siklus 14, MA siklus 5, slope threshold 0.05, ATR multiples 1.5. Satu set parameter ini menunjukkan kinerja stabil di sebagian besar pasar, tetapi perlu disesuaikan dengan karakteristik fluktuasi varietas tertentu.

Kode Sumber Strategi
/*backtest
start: 2025-01-01 00:00:00
end: 2025-09-24 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("Time-Based Slope & Delta RSI Strategy (HA & Source Selectable)", overlay=false)

// === User Settings ===
useHeikinAshi     = input.bool(false, "Heikin Ashi Mode")
sourceType        = input.string("Close", "Source Mode", options=["Close", "OHLC4", "HL2", "HLC3"])
rsiLength         = input.int(14, "RSI Period")
maLength          = input.int(5, "RSI MA Period")
maType            = input.string("EMA", "MA Type", options=["SMA", "EMA"])
useLogWeight      = input.bool(true, "Use Logarithmic Weight")
baseMinutes       = input.float(15.0, "Reference Minutes")
chartEffectRatio  = input.float(2.0, "Chart Time Effect Ratio", minval=0.0, step=0.1)
slopeThreshold    = input.float(0.05, "Minimum Slope Angle", step=0.01)
deltaThreshold    = input.float(0.02, "Minimum Momentum Delta", step=0.01)
tpWindow          = input.int(3, "Re-entry Window After TP (bars)", minval=1)
atrLength         = input.int(14, "ATR Period")
atrMultiplier     = input.float(1.5, "ATR Multiplier")
minATR            = input.float(0.5, "Minimum ATR Distance")

// === Heikin Ashi Calculation ===
haClose = (open + high + low + close) / 4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close)/2 : (haOpen[1] + haClose[1]) / 2
haSource = (haOpen + haClose) / 2

// === Source Selection Function ===
getSource() => useHeikinAshi ? haSource : sourceType == "OHLC4" ? (open + high + low + close) / 4 : sourceType == "HL2" ? (high + low) / 2 : sourceType == "HLC3" ? (high + low + close) / 3 : close

// === Helper Functions ===
getMinutes(tf) =>
    switch tf
        "5"   => 5.0
        "15"  => 15.0
        "60"  => 60.0
        "240" => 240.0
        "D"   => 1440.0
        => 15.0

getMA(src) =>
    maType == "EMA" ? ta.ema(src, maLength) : ta.sma(src, maLength)

rsiMA(tf) =>
    src = close
    rsi = ta.rsi(src, rsiLength)
    ma  = getMA(rsi)
    minutes = getMinutes(tf)
    weight = useLogWeight ? math.log(minutes / baseMinutes + 1) : minutes / baseMinutes
    [rsi, ma, weight]

// === Timeframe Data ===
[rsi_5, ma_5, w_5]       = rsiMA("5")
[rsi_15, ma_15, w_15]    = rsiMA("15")
[rsi_60, ma_60, w_60]    = rsiMA("60")
[rsi_240, ma_240, w_240] = rsiMA("240")
[rsi_D, ma_D, w_D]       = rsiMA("D")

chartMinutes = getMinutes(timeframe.period)
autoSlopeFactor = math.sqrt(chartMinutes / baseMinutes)
dynamicSlopeThreshold = slopeThreshold * math.min(autoSlopeFactor, 2.0)

rsiChart     = ta.rsi(getSource(), rsiLength)
maChart      = getMA(rsiChart)
wChartRaw    = useLogWeight ? math.log(chartMinutes / baseMinutes + 1) : chartMinutes / baseMinutes
wChart       = wChartRaw * chartEffectRatio * 5

// === Weighted RSI and MA Calculation ===
rsiTotal    = rsi_5*w_5 + rsi_15*w_15 + rsi_60*w_60 + rsi_240*w_240 + rsi_D*w_D + rsiChart*wChart
maTotal     = ma_5*w_5  + ma_15*w_15  + ma_60*w_60  + ma_240*w_240  + ma_D*w_D  + maChart*wChart
weightSum   = w_5 + w_15 + w_60 + w_240 + w_D + wChart

weightedRSI   = rsiTotal / weightSum
weightedRSIMA = maTotal  / weightSum

// === Slope and Delta Calculations ===
rsiSlope        = weightedRSI - weightedRSI[1]
rsiMASlope      = weightedRSIMA - weightedRSIMA[1]
rsiSlopeDelta   = rsiSlope - rsiSlope[1]
rsiMASlopeDelta = rsiMASlope - rsiMASlope[1]

// === Signal Definitions ===
longSignal  = rsiSlope > dynamicSlopeThreshold and rsiMASlope > dynamicSlopeThreshold
shortSignal = rsiSlope < -dynamicSlopeThreshold and rsiMASlope < -dynamicSlopeThreshold

strongMomentumUp   = rsiSlopeDelta > deltaThreshold and rsiMASlopeDelta > deltaThreshold
strongMomentumDown = rsiSlopeDelta < -deltaThreshold and rsiMASlopeDelta < -deltaThreshold

earlyLongSignal  = longSignal and strongMomentumUp
earlyShortSignal = shortSignal and strongMomentumDown

// === Risk Module ===
atrValue = ta.atr(atrLength)
atrStop  = math.max(atrValue * atrMultiplier, minATR)
tpDistance = atrStop * 1.5

// === Entry, TP, and SL ===
if (earlyLongSignal)
    strategy.entry("Long", strategy.long)
    strategy.exit("TP Long", from_entry="Long", limit=close + tpDistance)
    strategy.exit("SL Long", from_entry="Long", stop=close - atrStop)

if (earlyShortSignal)
    strategy.entry("Short", strategy.short)
    strategy.exit("TP Short", from_entry="Short", limit=close - tpDistance)
    strategy.exit("SL Short", from_entry="Short", stop=close + atrStop)

// === Re-entry After TP with Momentum Reversal ===
wasLongTP = strategy.opentrades == 0 and strategy.closedtrades > 0 and strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index - 1
wasShortTP = strategy.opentrades == 0 and strategy.closedtrades > 0 and strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1) == bar_index - 1

lastExitBar = strategy.closedtrades.exit_bar_index(strategy.closedtrades - 1)
barsSinceTP = bar_index - lastExitBar
canReenter = barsSinceTP <= tpWindow

if (wasLongTP and earlyShortSignal and canReenter)
    strategy.entry("Short After TP", strategy.short)

if (wasShortTP and earlyLongSignal and canReenter)
    strategy.entry("Long After TP", strategy.long)

// === Plotting ===
plot(weightedRSI, color=color.orange, title="Weighted RSI")
plot(weightedRSIMA, color=color.blue, title="Weighted RSI MA")
plot(rsiSlope, title="RSI Slope", color=color.orange)
plot(rsiMASlope, title="RSI MA Slope", color=color.blue)
plot(rsiSlopeDelta, title="RSI Slope Delta", color=color.purple)
plot(rsiMASlopeDelta, title="RSI MA Slope Delta", color=color.fuchsia)

plotshape(earlyLongSignal, location=location.bottom, color=color.lime, style=shape.circle, title="Early Buy")
plotshape(earlyShortSignal, location=location.top, color=color.fuchsia, style=shape.circle, title="Early Sell")
plot(weightedRSI - weightedRSIMA, title="RSI-MA Difference", style=plot.style_columns, color=(weightedRSI - weightedRSIMA > 0 ? color.green : color.red))

momentumStrength = math.abs(rsiSlopeDelta + rsiMASlopeDelta)
bgcolor(momentumStrength > 0.2 ? color.new(color.green, 90) : momentumStrength < -0.2 ? color.new(color.red, 90) : na)
bgcolor(useHeikinAshi ? color.new(color.blue, 85) : na)