Strategi dagangan penukaran trend kejutan nilai bersih berbilang pergerakan purata

EMA WMA SMA HMA ROC NVO MA TP SL
Tarikh penciptaan: 2025-02-24 10:05:03 Akhirnya diubah suai: 2025-02-27 16:46:30
Salin: 2 Bilangan klik: 352
2
fokus pada
319
Pengikut

Strategi dagangan penukaran trend kejutan nilai bersih berbilang pergerakan purata Strategi dagangan penukaran trend kejutan nilai bersih berbilang pergerakan purata

Gambaran keseluruhan

Strategi ini adalah sistem trend-tracking berdasarkan jumlah dagangan dan perubahan harga untuk meramalkan arah pasaran dengan mengira indikator kejutan jumlah dagangan bersih (NVO). Strategi ini menggabungkan pelbagai jenis purata bergerak (EMA, WMA, SMA, HMA) untuk menilai trend pasaran dengan membandingkan hubungan kedudukan indikator kejutan dengan garis tumpang tindih EMA mereka, dan melakukan perdagangan pada masa yang sesuai.

Prinsip Strategi

Inti strategi ini adalah untuk menilai sentimen pasaran dengan mengira nilai turun naik jumlah dagangan bersih setiap hari. Langkah-langkah pengiraan adalah seperti berikut:

  1. Hitung perkalian julat harga: perkalian antara 0-1 berdasarkan harga tertinggi, terendah dan harga penutupan hari itu
  2. Mengira jumlah dagangan yang naik dan turun secara berkesan: berat kepada jumlah dagangan mengikut arah perubahan harga dan kalikan
  3. Hitung jumlah transaksi bersih: jumlah transaksi yang meningkat secara efektif dikurangkan daripada jumlah transaksi yang menurun secara efektif
  4. Rata-rata bergerak yang dipilih oleh aplikasi: data purata urus niaga bersih untuk pemprosesan yang lancar
  5. Hitung EMA overlay: garis rujukan untuk trend
  6. Mengira kadar perubahan ((ROC): digunakan untuk menilai perubahan kekuatan trend

Sinyal perdagangan dihasilkan berdasarkan peraturan berikut:

  • Buat banyak syarat: memakai EMA overlay pada indikator gegaran
  • Keadaan pengosongan: menembusi garis superposisi EMA di bawah indikator gegaran
  • Hentikan: Hentikan harga berdasarkan peratusan
  • Penutupan: Penutupan berdasarkan peratusan

Kelebihan Strategik

  1. Analisis pelbagai dimensi: maklumat pasaran yang menggabungkan tiga dimensi harga, jumlah transaksi dan kadar perubahan trend
  2. Fleksibiliti tinggi: menyokong pelbagai jenis purata bergerak yang boleh disesuaikan dengan ciri-ciri pasaran yang berbeza
  3. Pengurusan risiko yang baik: termasuk mekanisme penghalang kerugian yang dapat mengawal risiko dengan berkesan
  4. Kesan visual yang kuat: menunjukkan perubahan kekuatan trend melalui grafik lurus, untuk memahami keadaan pasaran
  5. Adaptif: Dengan reka bentuk parameter, ia dapat menyesuaikan diri dengan pelbagai persekitaran pasaran dan jenis perdagangan

Risiko Strategik

  1. Risiko perubahan trend: Isyarat palsu yang sering berlaku dalam pasaran yang bergolak
  2. Risiko keterbelakangan: purata bergerak mempunyai keterbelakangan yang boleh menyebabkan masa masuk dan keluar tidak sesuai
  3. Kepekaan parameter: Kombinasi parameter yang berbeza boleh membawa kepada perbezaan besar dalam prestasi strategi
  4. Ketergantungan kepada keadaan pasaran: mungkin kurang baik dalam keadaan pasaran tertentu
  5. Kekurangan teknologi: hanya bergantung kepada indikator teknikal, tidak mengambil kira faktor asas

Cadangan kawalan risiko:

  • Cadangan untuk mengoptimumkan parameter dalam keadaan pasaran yang berbeza
  • Pengesahan isyarat boleh digabungkan dengan petunjuk teknikal lain
  • Menyesuaikan parameter henti rugi dengan betul untuk menyesuaikan diri dengan turun naik pasaran yang berbeza

Arah pengoptimuman strategi

  1. Mekanisme pengesahan isyarat yang dioptimumkan:

    • Menambah syarat pengesahan jumlah pesanan
    • Tambah Penapis Kekuatan Aliran
    • Memperkenalkan mekanisme penyesuaian turun naik
  2. Pengoptimuman pengurusan risiko:

    • Melaksanakan mekanisme stop loss dinamik
    • Tambah Modul Pengurusan Wang
    • Memperkenalkan mekanisme pembinaan dan pengurangan gudang secara berperingkat
  3. Optimasi parameter:

    • Membangunkan mekanisme penyesuaian parameter adaptasi
    • Membuat pertukaran parameter berdasarkan keadaan pasaran
    • Menambah model pembelajaran mesin untuk pengoptimuman parameter

ringkaskan

Strategi ini membina sistem perdagangan yang lebih lengkap untuk menjejaki trend dengan menganalisis jumlah dan data harga secara komprehensif. Ciri utama strategi ini adalah menggabungkan pelbagai petunjuk teknikal dan menyediakan pilihan konfigurasi parameter yang fleksibel. Walaupun terdapat risiko tertentu, dengan kawalan risiko yang munasabah dan pengoptimuman berterusan, strategi ini dijangka menghasilkan keuntungan yang stabil dalam perdagangan sebenar.

Kod sumber strategi
/*backtest
start: 2024-02-25 00:00:00
end: 2025-02-22 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("EMA-Based Net Volume Oscillator with Trend Change", shorttitle="NVO Trend Change", overlay=false, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input parameters
maType = input.string("WMA", "Moving Average Type", options=["WMA", "EMA", "SMA", "HMA"])
maLength = input.int(21, "MA Length", minval=1)
emaOverlayLength = input.int(9, "EMA Overlay Length", minval=1)
oscillatorMultiplier = input.float(1.0, "Oscillator Multiplier", minval=0.1, step=0.1)
showHistogram = input.bool(true, "Show Histogram")

stopLossPerc = input.float(1.0, "Stop Loss (%)", tooltip="Set 999 to disable")
takeProfitPerc = input.float(2.0, "Take Profit (%)", tooltip="Set 999 to disable")

// Calculate Net Volume Oscillator
priceRange = high - low
multiplier = priceRange > 0 ? (close - low) / priceRange : 0.5
var float effectiveUpVol = 0.0
var float effectiveDownVol = 0.0

if close > close[1]
    effectiveUpVol := volume * multiplier
    effectiveDownVol := volume * (1 - multiplier)
else if close < close[1]
    effectiveUpVol := volume * multiplier
    effectiveDownVol := volume * (1 - multiplier)
else
    effectiveUpVol := 0.0
    effectiveDownVol := 0.0

netVolume = effectiveUpVol - effectiveDownVol
dailyNetOscillator = volume > 0 ? (netVolume / volume) * 100 : 0

// Apply selected Moving Average
var float oscillator = na
if maType == "WMA"
    oscillator := ta.wma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "EMA"
    oscillator := ta.ema(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "SMA"
    oscillator := ta.sma(dailyNetOscillator, maLength) * oscillatorMultiplier
else if maType == "HMA"
    oscillator := ta.hma(dailyNetOscillator, maLength) * oscillatorMultiplier

// EMA Overlay
emaOverlay = ta.ema(oscillator, emaOverlayLength)

// Rate of Change (ROC) for Oscillator
roc = ta.roc(oscillator, 1)  // 1-period rate of change

// Trading logic
longCondition = oscillator > emaOverlay
shortCondition = oscillator < emaOverlay

// Exit conditions
exitLong = oscillator < emaOverlay and strategy.position_size > 0
exitShort = oscillator > emaOverlay and strategy.position_size < 0

// Execute trades
if longCondition and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)
if exitLong
    strategy.close("Long")

if shortCondition and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)
if exitShort
    strategy.close("Short")

// Stop Loss and Take Profit
stopLossLong = stopLossPerc != 999 ? strategy.position_avg_price * (1 - stopLossPerc/100) : na
takeProfitLong = takeProfitPerc != 999 ? strategy.position_avg_price * (1 + takeProfitPerc/100) : na

stopLossShort = stopLossPerc != 999 ? strategy.position_avg_price * (1 + stopLossPerc/100) : na
takeProfitShort = takeProfitPerc != 999 ? strategy.position_avg_price * (1 - takeProfitPerc/100) : na

if (not na(stopLossLong) and not na(takeProfitLong) and strategy.position_size > 0)
    strategy.exit("Long SL/TP", "Long", stop=stopLossLong, limit=takeProfitLong)

if (not na(stopLossShort) and not na(takeProfitShort) and strategy.position_size < 0)
    strategy.exit("Short SL/TP", "Short", stop=stopLossShort, limit=takeProfitShort)

// Plotting
plot(oscillator, "Net Volume Oscillator", color.blue)
plot(emaOverlay, "EMA Overlay", color.orange)
hline(0, "Zero Line", color.gray)

// Histogram with Trend Change Visualization
var color histogramColor = na
if oscillator > 0
    histogramColor := roc >= 0 ? color.new(color.green, 70) : color.new(color.lime, 70)  // Green for bullish, light green for weakening
else if oscillator < 0
    histogramColor := roc >= 0 ? color.new(color.red, 70) : color.new(color.maroon, 70)  // Red for bearish, light red for weakening

plot(showHistogram ? oscillator : na, style=plot.style_histogram, color=histogramColor, title="Histogram")