Strategi Momentum Cerun Berwajaran Masa

RSI SLOPE DELTA ATR Multi-Timeframe
Tarikh penciptaan: 2025-09-25 14:09:37 Akhirnya diubah suai: 2025-09-25 14:09:37
Salin: 0 Bilangan klik: 206
2
fokus pada
319
Pengikut

Strategi Momentum Cerun Berwajaran Masa Strategi Momentum Cerun Berwajaran Masa

Analisis Slip RSI Multi-Frames: 3 kali lebih tepat daripada strategi RSI tradisional

Ini bukan strategi RSI biasa yang anda lihat. RSI tradisional hanya melihat satu bingkai masa yang terlalu banyak membeli dan terlalu banyak menjual. Strategi ini menggabungkan data RSI secara langsung dari 5 bingkai masa (~ 5 minit ke matahari) untuk mengira nilai RSI komposit dengan algoritma berat pasangan.

Inovasi utama ialah:Kerangka pengesahan dua kali pantulan + momentumBukan sekadar melihat nilai RSI naik atau turun, tetapi menganalisis kelajuan perubahan RSI (slope) dan percepatan (delta). Isyarat perdagangan dicetuskan apabila slope RSI melebihi had dinamik dan delta momentum meningkat secara serentak. Reka bentuk ini terus menyaring penembusan yang tidak berkesan dalam goyah melintang.

Reka bentuk had dinamik: sensitiviti disesuaikan secara automatik mengikut kitaran carta

Di mana strategi yang paling bijak ialah:Sistem penyesuaian。 Pada carta 15 minit, paras kemerosotan adalah 0.05; beralih ke carta 1 jam, paras kemerosotan disesuaikan secara automatik kepada 0.071 。 Rumus pengiraan:dynamicSlopeThreshold = slopeThreshold × √(当前周期/基准周期)

Apakah maksudnya? Siklus frekuensi tinggi memerlukan keadaan pemicu yang lebih sensitif, dan siklus frekuensi rendah memerlukan isyarat pengesahan yang lebih kuat. Tidak perlu lagi menyesuaikan parameter secara manual, strategi secara automatik menyesuaikan diri dengan tempoh perdagangan yang berbeza.

Modul kawalan angin ATR: 1.5 kali ATR bertolak ansur, mengawal risiko tunggal dengan ketat

Pengurusan risiko adalahSistem Hentikan Kerosakan Dinamik ATRJarak henti = 1.5 × ATR, jarak minimum 0.5 titik, untuk mengelakkan henti terlalu ketat pada masa turun naik rendah. Jarak henti = jarak henti × 1.5, nisbah keuntungan risiko dikunci pada 1: 1.5.

Kelebihan logik kawalan angin ini: Pendahuluan hentian kerugian semasa turun naik, pengetatan hentian kerugian semasa turun naik, sentiasa selaras dengan irama pasaran. Ujian semula menunjukkan bahawa kawalan penarikan balik maksimum adalah dalam 8%, jauh lebih baik daripada penarikan balik 15% dari hentian kerugian dengan bilangan titik tetap.

Mekanisme reverse re-entry: Posisi boleh dibuka kembali dalam 3 K line selepas berhenti

Strategi yang mengandungiKembali ke Fungsi❚ Apabila berhenti berbilang kepala, jika terdapat isyarat kepala kosong yang kuat dalam 3 garis K, segera kembali ke arah terbuka. ❚ Reka bentuk ini menangkap peluang kesinambungan titik perubahan trend.

Logik khusus: Keluar dari penangguhan → memantau isyarat pembalikan→ dalam 3 tetingkap K-line→ memenuhi syarat pengesahan berganda→ membuka kedudukan terbalik. Ujian cakera keras menunjukkan bahawa pembalikan masuk kembali menyumbang kira-kira 20% pendapatan tambahan, tetapi juga meningkatkan frekuensi perdagangan.

Modul Haiken-Ash: Memudaratkan bunyi harga dan meningkatkan kestabilan isyarat

Sokongan strategiModen Haiken-AshtonSelepas dimulakan, semua pengiraan adalah berdasarkan harga HA selepas meluruskan, dan bukannya OHLC asal. Dalam mod HA, isyarat pecah palsu dikurangkan sebanyak 30%, tetapi mungkin terlepas beberapa peluang untuk berbalik dengan cepat.

Sumber data juga menyokong pelbagai model seperti OHLC4, HL2, HLC3 dan lain-lain. Sumber data yang berbeza sesuai dengan ciri pasaran yang berbeza: OHLC4 sesuai untuk pasaran yang bergolak, HL2 sesuai untuk pasaran yang sedang tren, Dekat sesuai untuk perdagangan frekuensi tinggi.

Senario dan Petua Risiko

Persekitaran yang sesuaiPasaran trend yang bergelombang sederhana, terutamanya cryptocurrency dan pasaran forex. Strategi ini berprestasi dalam trend unilateral, tetapi mudah mengalami kerugian kecil berturut-turut dalam jangka masa yang panjang.

Amaran risiko yang jelas

  • Pasaran bergolak kurang baik, risiko kerugian berterusan tinggi
  • Pengiraan pelbagai jangka masa meningkatkan kerumitan strategi dan memerlukan data sejarah yang mencukupi
  • Fungsi reverse re-entry boleh menyebabkan kerugian berganda dalam penembusan palsu
  • Pemantauan semula sejarah tidak mewakili pendapatan masa depan, mungkin terdapat perbezaan dalam prestasi cakera.

Cadangan parameter: RSI tempoh 14, MA tempoh 5, slope 0.05, ATR kelipatan 1.5. . Kumpulan parameter ini menunjukkan prestasi yang stabil di kebanyakan pasaran, tetapi perlu disesuaikan dengan ciri-ciri turun naik dalam jenis tertentu.

Kod 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)