Strategi Perdagangan Momentum Persentase Volume Relatif

RVPR ATR SL/TP MA EMA SMMA WMA JMA T3
Tanggal Pembuatan: 2025-07-04 11:27:18 Akhirnya memodifikasi: 2025-07-04 11:27:18
menyalin: 9 Jumlah klik: 259
2
fokus pada
319
Pengikut

Strategi Perdagangan Momentum Persentase Volume Relatif Strategi Perdagangan Momentum Persentase Volume Relatif

Ringkasan

Strategi perdagangan persentase dinamika relasi adalah sistem perdagangan komprehensif yang menggabungkan analisis dinamika relasi, penyaringan perilaku harga, deteksi terobosan, dan logika stop loss / stop loss yang dinamis. Inti dari strategi ini adalah untuk mengidentifikasi saat ekspansi atau kontraksi perdagangan dengan menghitung indikator serupa dengan Williams % R dalam perdagangan relatif (RVPR), yang digabungkan dengan filter linier ganda (Fast and Slow Moving Average). Strategi ini lebih lanjut masuk ke dalam kondisi yang tepat dengan filter perilaku harga yang dapat dikonfigurasi, berdasarkan pada berbagai jenis penilaian grafik.

Prinsip Strategi

Prinsip inti dari strategi ini adalah mengubah data volume transaksi menjadi rentang persentase, menggunakan metode perhitungan yang mirip dengan Williams %R untuk menganalisis hubungan volume transaksi saat ini dengan kisaran sejarahnya. Strategi ini menggunakan beberapa komponen kunci untuk menghasilkan sinyal perdagangan:

  1. Relative Transaction %R Oscillator: membandingkan volume transaksi saat ini dengan tingkat tertinggi dan terendah dari volume transaksi historis untuk menghitung posisi relatif. Indikator ini mirip dengan Williams %R di bidang harga, tetapi diterapkan pada data volume transaksi.

  2. Dual Moving Average Filter: Strategi menggunakan dua moving average volume transaksi ((cepat dan lambat), dan beberapa algoritma smoothing dapat dipilih ((SMA, EMA, JMA, T3, Super Smoother, dll). Ketika volume transaksi lebih besar dari rata-rata cepat, dan rata-rata cepat lebih besar dari rata-rata lambat, menunjukkan tren volume transaksi ke atas, mungkin melakukan sinyal ganda; sebaliknya.

  3. Filter perilaku harga: untuk memfilter sinyal perdagangan lebih lanjut berdasarkan bentuk grafik yang berbeda:

    • Model sederhana: kenaikan/turunnya harga dasar
    • Modus penyaringan: Pengesahan intensitas berdasarkan rentang
    • Modus Radikal: Terobosan Berdasarkan Motivasi
    • Internal Mode: Reversed-Cylindrical
  4. Menembus filter: secara selektif mengecualikan perdagangan di dekat titik tinggi / rendah dari 5 pilar untuk menghindari perdagangan dengan risiko yang tidak sebanding dengan pengembalian.

  5. Stop loss dan stop system: mekanisme stop loss / stop yang dinamis berdasarkan ATR (Average True Rate) yang dapat dikonfigurasi dengan perkalian untuk menyesuaikan jarak dari stop loss dan stop loss.

  6. Waktu Keluar: Anda dapat memilih untuk keluar dari perdagangan setelah jumlah taruhan yang ditetapkan.

Kondisi masuk multihead meliputi: volume transaksi lebih besar dari rata-rata bergerak cepat, rata-rata bergerak cepat lebih besar dari rata-rata bergerak lambat, volume transaksi relatif %R lebih besar dari nilai ambang, harga melalui filter arah multihead, dan opsi di bawah titik tinggi terobosan baru-baru ini. Kondisi masuk kosong sebaliknya, dan memicu posisi kosong pada kondisi keluar yang ditetapkan.

Keunggulan Strategis

  1. Analisis multi-dimensi: Strategi ini menggabungkan volume transaksi, perilaku harga, dan dinamika stop loss/stop loss untuk memberikan kerangka analisis pasar yang komprehensif.

  2. Kustomisasi Tinggi: Strategi menyediakan berbagai parameter yang dapat disesuaikan, termasuk kontrol arah perdagangan, pola penyaringan perilaku harga yang berbeda, pilihan jenis rata-rata bergerak volume transaksi, dan lain-lain, yang memungkinkan pedagang menyesuaikan sesuai dengan gaya dan preferensi pasar mereka sendiri.

  3. Filter masuk yang cerdas: Dengan menggabungkan momentum volume dan pola perilaku harga, strategi dapat mengidentifikasi peluang perdagangan dengan probabilitas yang lebih tinggi dan menghindari sinyal perdagangan berkualitas rendah.

  4. Fleksibel mekanisme keluar: Strategi memberikan pilihan keluar berdasarkan waktu dan harga, termasuk keluar bar nomor tetap dan stop loss / stop loss dinamis berbasis ATR, membuat manajemen risiko lebih fleksibel dan efektif.

  5. Adaptasi terhadap berbagai lingkungan pasar: Strategi dapat beradaptasi dengan kondisi pasar yang berbeda, termasuk tren dan segmen pasar, melalui pola perilaku harga yang berbeda (sederhana, filter, agresif, internal).

  6. Integrasi indikator teknologi tinggi: Strategi mengintegrasikan berbagai jenis rata-rata bergerak tinggi, seperti JMA, T3 dan Super Smoother, yang berkinerja baik dalam mengurangi kebisingan dan menangkap tren nyata.

Risiko Strategis

  1. Risiko optimasi parameter: Karena strategi mengandung beberapa parameter yang dapat disesuaikan, ada risiko optimasi berlebihan, yang dapat menyebabkan kinerja historis yang sangat baik tetapi tidak efektif secara langsung. Solusinya adalah menggunakan pengujian ke depan dan analisis robust, memastikan bahwa parameter dapat tetap stabil dalam berbagai kondisi pasar.

  2. Risiko False Breakout: Lonjakan volume tidak selalu disertai dengan pergerakan harga yang berkelanjutan. Strategi dapat menghasilkan sinyal yang salah dalam False Breakout. Risiko ini dapat dikurangi dengan menambahkan indikator konfirmasi tambahan atau penundaan masuk.

  3. Ketergantungan pada kondisi pasar: Strategi ini mungkin tidak konsisten dalam berbagai kondisi pasar (misalnya, volatilitas tinggi vs volatilitas rendah).

  4. Stop loss triggering risk: Stop loss yang menggunakan basis ATR dapat dipicu ketika volatilitas tiba-tiba meluas. Pertimbangkan untuk menggunakan stop loss multiplier yang disesuaikan dengan volatilitas atau mengatur stop loss pada titik support / resistance yang penting mungkin lebih efektif.

  5. Waktu keluar tidak fleksibel: pengunduran diri dari bar yang tetap dapat menutup perdagangan yang menguntungkan terlalu dini atau menutup perdagangan yang merugikan terlalu terlambat. Anda dapat mempertimbangkan untuk menyesuaikan waktu keluar secara dinamis dalam kombinasi dengan tren atau indikator momentum.

  6. Kompleksitas Perhitungan: Strategi menggunakan berbagai algoritma moving average yang rumit dan kombinasi kondisi yang dapat meningkatkan beban perhitungan dan menyebabkan keterlambatan dalam pelaksanaan. Dalam perdagangan real-time, mungkin perlu menyederhanakan beberapa indikator yang intensif dalam perhitungan.

Arah optimasi strategi

  1. Penyesuaian nilai ambang dinamis: Strategi saat ini menggunakan nilai ambang R% dari volume transaksi relatif yang tetap ((27), yang dapat dipertimbangkan untuk mewujudkan penyesuaian nilai ambang yang dapat disesuaikan secara otomatis berdasarkan volatilitas volume transaksi terbaru. Ini akan membuat strategi lebih sesuai dengan kondisi pasar yang berbeda dan perubahan musiman.

  2. Konfirmasi multi-frame waktu: memperkenalkan sinyal konfirmasi pada frame waktu yang lebih tinggi, hanya berdagang di arah tren yang lebih besar, dapat meningkatkan tingkat kemenangan strategi dan tingkat risiko / reward. Misalnya, sinyal multi-head pada garis jam hanya akan dilakukan ketika garis hari berorientasi ke atas.

  3. Analisis kualitas transaksi: Selain volume transaksi relatif, indikator dispersi transaksi atau analisis distribusi volume transaksi dapat ditambahkan untuk menilai kualitas transaksi dan bukan hanya kuantitas. Ini membantu membedakan antara tren yang sehat untuk mengkonfirmasi volume transaksi dan sinyal yang berpotensi kehabisan.

  4. Stop / Stop cerdas: Stop / Stop dasar ATR saat ini dapat ditingkatkan menjadi sistem yang lebih cerdas, misalnya stop yang didasarkan pada posisi support / resistance yang penting, atau stop yang disesuaikan dengan volatilitas, memperketat stop loss pada periode rendah dan melonggarkan stop loss pada periode tinggi.

  5. Integrasi dengan struktur pasar: Integrasi analisis struktur harga (seperti support/resistance, trend line, price channel) ke dalam strategi dapat meningkatkan kualitas entry point dan exit point.

  6. Peningkatan manajemen risiko: melakukan penyesuaian ukuran posisi dinamis, berdasarkan volatilitas pasar saat ini dan kinerja strategi baru-baru ini, meningkatkan posisi di lingkungan dengan tingkat kemenangan tinggi, mengurangi posisi di masa yang tidak pasti.

  7. Integrasi pembelajaran mesin: Menggunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter strategi secara dinamis atau memprediksi filter perilaku harga mana yang paling efektif dalam kondisi pasar saat ini, dapat meningkatkan kinerja strategi lebih lanjut.

Meringkaskan

Strategi perdagangan momentum persentase volume transaksi relatif adalah sistem perdagangan yang komprehensif dan fleksibel, yang menyediakan alat yang kuat bagi pedagang untuk mengidentifikasi peluang pasar potensial dengan menggabungkan analisis volume transaksi, beberapa filter perilaku harga, dan teknologi manajemen risiko dinamis. Keunggulan inti dari strategi ini adalah fleksibilitas dan kustomisasi, yang memungkinkan pedagang untuk menyesuaikan sesuai dengan preferensi pribadi dan kondisi pasar.

Strategi ini sangat cocok untuk pedagang yang mencari sinyal reversal atau perpanjangan tren berdasarkan konfirmasi volume transaksi. Dengan menggunakan indikator volume transaksi relatif gaya Williams %R, strategi ini dapat mengidentifikasi titik-titik lonjakan volume transaksi yang biasanya mewakili pergeseran penting dalam sentimen pasar atau percepatan tren.

Meskipun strategi ini menawarkan banyak keuntungan, pedagang harus waspada terhadap potensi risiko over-optimisasi dan ketergantungan pada kondisi pasar. Dengan pengujian dan penyesuaian yang berkelanjutan, yang dikombinasikan dengan arah optimasi yang disarankan, pedagang dapat meningkatkan lebih lanjut stabilitas dan profitabilitas strategi ini dalam jangka panjang. Akhirnya, seperti semua strategi perdagangan, kunci kesuksesan terletak pada pemahaman mendalam tentang prinsip-prinsipnya, pengelolaan risiko yang bijaksana, dan evaluasi terus menerus terhadap kinerjanya dalam kondisi pasar yang berbeda.

Kode Sumber Strategi
/*backtest
start: 2024-07-04 00:00:00
end: 2025-07-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © GabrielAmadeusLau

//@version=6
strategy("Relative Volume Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === Input: Trade Direction === //
tradeDirection = input.string("Long Only", title="Trade Direction", options=["Long Only", "Short Only", "Both"], group="Strategy Settings")
dirBarModeL     = input.string("Simple", title="Long Directional Bar Mode", options=["Simple", "Filtered", "Aggressive", "Inside", "Filtered & Aggressive", "Filtered & Aggressive & Inside", "Without"], group="Strategy Settings")
dirBarModeS     = input.string("Inside", title="Short Directional Bar Mode", options=["Simple", "Filtered", "Aggressive", "Inside", "Filtered & Aggressive", "Filtered & Aggressive & Inside", "Without"], group="Strategy Settings")
useBreakout  = input.bool(true, "Use Breakout Filter", group="Strategy Settings")
useSLTP = input.bool(false, "Use Stop Loss & Take Profit", group="Strategy Settings")
atrSLMult = input.float(1, "ATR SL Multiplier", step = 0.05, group="Strategy Settings")
atrTPMult = input.float(1.75, "ATR TP Multiplier", step = 0.05, group="Strategy Settings")


// === Input: MA Function Selector === //
// — T3 Moving Average Function —
// src    = input source (e.g. rsi1, close, etc.)
// length = smoothing length (period)
// a      = T3 alpha (commonly between 0.7 and 0.9)
t3(src, length, a) =>
    e1 = ta.ema(src, length)
    e2 = ta.ema(e1, length)
    e3 = ta.ema(e2, length)
    e4 = ta.ema(e3, length)
    e5 = ta.ema(e4, length)
    e6 = ta.ema(e5, length)
    c1 = -a * a * a
    c2 = 3 * a * a + 3 * a * a * a
    c3 = -6 * a * a - 3 * a - 3 * a * a * a
    c4 = 1 + 3 * a + a * a * a + 3 * a * a
    c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3

// == Jurik MA == //
jma(float src, int length, float power, float phase) => 
    phaseRatio = phase < -100 ? 0.5 : phase > 100 ? 2.5 : phase / 100 + 1.5
    beta = 0.45 * (length - 1) / (0.45 * (length - 1) + 2)
    alpha = math.pow(beta, power)
    JMA = 0.0
    e0 = 0.0
    e0 := (1 - alpha) * src + alpha * nz(e0[1])
    e1 = 0.0
    e1 := (src - e0) * (1 - beta) + beta * nz(e1[1])
    e2 = 0.0
    e2 := (e0 + phaseRatio * e1 - nz(JMA[1])) * math.pow(1 - alpha, 2) + math.pow(alpha, 2) * nz(e2[1])
    JMA := e2 + nz(JMA[1])

//===== 2 Pole Super Smoother Filter =====//
superSmoother(float Series, float Period) =>
    var float ALPHA =  math.pi * math.sqrt(2.0) / Period
    var float BETA  =  math.exp(-ALPHA )
    var float COEF2 = -math.pow(BETA, 2)
    var float COEF1 =  math.cos( ALPHA ) * 2.0 * BETA
    var float COEF0 =  1.0 - COEF1 - COEF2
    float sma2   = math.avg(Series, nz(Series[1], Series))
    float smooth = na, smooth := COEF0 *      sma2      +
                                 COEF1 *  nz(smooth[1]) +
                                 COEF2 *  nz(smooth[2])

// === MA Selector === //
ma(source, length, type) =>
    type == "SMA"       ? ta.sma(source, length) :
     type == "EMA"       ? ta.ema(source, length) :
     type == "SMMA (RMA)"? ta.rma(source, length) :
     type == "WMA"       ? ta.wma(source, length) :
     type == "VWMA"      ? ta.vwma(source, length) :
     type == "HMA"       ? ta.hma(source, length) : 
     type == "ALMA"      ? ta.alma(source, length, 0.85, 6) :
     type == "LSMA"      ? ta.linreg(source, length, 0) :
     type == "Optimal MA"? math.avg(ta.alma(source, length, 0.85, 6), ta.rma(source, length), ta.sma(source, length)) :
     type == "JMA"       ? jma(source, length, 2, 50) :        
     type == "Super Smoother" ? superSmoother(source, length) :
     type == "T3"        ? t3(source, length, 0.7) :
                          na

// === Input Parameters === //
rvolRLength       = input.int(112, title="Relative Volume %R Length", minval=1, group="Relative Volume", tooltip="%R used for scaling from 0 to 100, I prefer 73 or 112.")
rvolmaTypeInput   = input.string("Optimal MA" , "Type", options = ["None", "SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA", "HMA", "ALMA", "LSMA", "Optimal MA", "JMA", "Super Smoother", "T3"], group = "Relative Volume")
rvolFastLength    = input.int(7, title="Relative Volume Fast MA", minval=1, group="Relative Volume")
rvolSlowLength    = input.int(161, title="Relative Volume Slow MA", minval=1, group="Relative Volume")
exitBars          = input.int(18, title="Bars Until Exit", group="Strategy Settings", tooltip="Exit trade after N bars")
rvolThreshold = input.int(27, "Minimum Relative Volume %R Threshold", group="Relative Volume")

// === Williams %R for Volume === //
wpr(src, length) =>
    max_ = ta.highest(src, length)
    min_ = ta.lowest(src, length)
    (100 * (src - max_) / (max_ - min_)) * -1

// === Volume MAs === //
rvol      = wpr(volume, rvolRLength)
rvolFast  = ma(volume, rvolFastLength, rvolmaTypeInput)
rvolSlow  = ma(volume, rvolSlowLength, rvolmaTypeInput)

// === Price Action Filters === //
up            = close > open
upRange       = low > low[1] and close > high[1]
upRange_Aggr  = close > close[1] and close > open[1]
insideDayUp   = close < close[1] and close[1] < close[2] and close[2] < close[3] and close[3] < close[4] and close[4] < close[5] //and not (close > close[1])
down          = close < open
downRange     = high < high[1] and close < low[1]
downRange_Aggr= close < close[1] and close < open[1]
insideDayDown = close > close[1] and close[1] > close[2] and close[2] > close[3] and close[3] > close[4] and close[4] > close[5] //and not (close < close[1])
breakoutHigh = ta.highest(high, 5)
breakoutLow  = ta.lowest(low, 5)

// === Mode-Based Filter Logic === //
longBarOK =
     dirBarModeL == "Simple" ? up :
     dirBarModeL == "Filtered"  ? upRange :
     dirBarModeL == "Aggressive"? upRange_Aggr :
     dirBarModeL == "Inside"? insideDayUp : 
     dirBarModeL == "Filtered & Aggressive" ? upRange or upRange_Aggr :
     dirBarModeL == "Filtered & Aggressive & Inside" ? upRange or upRange_Aggr or insideDayUp :
     dirBarModeL == "Without"   ? true : false

shortBarOK =
     dirBarModeS == "Simple" ? down :
     dirBarModeS == "Filtered"  ? downRange :
     dirBarModeS == "Aggressive"? downRange_Aggr :
     dirBarModeS == "Inside"? insideDayDown :
     dirBarModeS == "Filtered & Aggressive"? downRange or downRange_Aggr or insideDayDown :
     dirBarModeS == "Filtered & Aggressive & Inside"? upRange_Aggr or insideDayDown :
     dirBarModeS == "Without"   ? true : false

// === Entry & Exit Logic === //
longCondition  = volume > rvolFast and rvolFast > rvolSlow and longBarOK  and rvol > rvolThreshold and (not useBreakout or close < breakoutHigh)
shortCondition = volume < rvolFast and rvolFast < rvolSlow and shortBarOK and rvol < (100 - rvolThreshold) and (not useBreakout or close > breakoutLow)

exitLongCondition  = strategy.opentrades > 0 and strategy.opentrades.entry_bar_index(0) + exitBars <= bar_index and strategy.opentrades.entry_id(0) == "Long"
exitShortCondition = strategy.opentrades > 0 and strategy.opentrades.entry_bar_index(0) + exitBars <= bar_index and strategy.opentrades.entry_id(0) == "Short"

atr = ta.atr(math.round(math.avg(rvolFastLength, rvolSlowLength)))
longSL = useSLTP ? close - atrSLMult * atr : na
longTP = useSLTP ? close + atrTPMult * atr : na
shortSL = useSLTP ? close + atrSLMult * atr : na
shortTP = useSLTP ? close - atrTPMult * atr : na

// === Strategy Execution === //
if (tradeDirection == "Long Only" or tradeDirection == "Both")
    if (longCondition)
        strategy.entry("Long", strategy.long, stop=longSL, limit=longTP)

if (tradeDirection == "Short Only" or tradeDirection == "Both")
    if (shortCondition)
        strategy.entry("Short", strategy.short, stop=shortSL, limit=shortTP)

if (exitLongCondition)
    strategy.close("Long")

if (exitShortCondition)
    strategy.close("Short")

// === Plotting === //
plot(rvol, title="Relative Volume %R", color=color.orange, style = plot.style_columns, format = format.price)
plot(rvolFast, title="Fast Volume MA", color=color.green, format = format.volume)
plot(rvolSlow, title="Slow Volume MA", color=color.red, format = format.volume)