Strategi Momentum Trend - Sistem Pemasa Jalur Dinamik Zigzag Pelbagai Tempoh

SL TP PH PL
Tarikh penciptaan: 2025-02-18 13:29:06 Akhirnya diubah suai: 2025-02-18 13:29:06
Salin: 1 Bilangan klik: 343
1
fokus pada
1617
Pengikut

Strategi Momentum Trend - Sistem Pemasa Jalur Dinamik Zigzag Pelbagai Tempoh

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan multidimensi yang menggabungkan indikator ZigZag dan William (%R). Dengan indikator ZigZag, anda dapat mengenal pasti ketinggian dan ketinggian gelombang penting, dan menggunakan William untuk mengesahkan titik masuk apabila pasaran mencapai keadaan overbought atau oversold. Kombinasi ini bukan sahaja dapat menangkap titik perubahan trend utama di pasaran, tetapi juga dapat meningkatkan ketepatan perdagangan dengan pengesahan momentum.

Prinsip Strategi

Logik utama strategi ini adalah berdasarkan dua komponen utama:

  1. Penunjuk kata-kata mengenal pasti ketinggian dan ketinggian gelombang yang ketara melalui kedalaman dan parameter penyimpangan yang ditetapkan, menyaring kebisingan pasaran, menentukan arah trend. Apabila titik rendah gelombang baru terbentuk, ia menandakan permulaan trend naik, dan titik tinggi gelombang baru menandakan permulaan trend menurun.
  2. Indeks William mengira keadaan dinamik pasaran dengan membandingkan harga semasa dengan harga tertinggi dalam tempoh tertentu. Apabila nilai indikator menembusi -80 menandakan oversold ((peluang membeli berpotensi), menembusi -20 menandakan oversold ((peluang menjual berpotensi).

Peraturan perdagangan untuk strategi ini adalah seperti berikut:

  • Buat banyak syarat: Indeks bentuk kata mengenal pasti tahap rendah baru dan Indeks William melangkau ke atas dari kawasan oversold
  • Keadaan kosong: Indeks bentuk kata mengenal pasti tahap tinggi baru dan Indeks William melangkau ke bawah dari kawasan overbought
  • Stop loss set kepada 1% dan stop loss set kepada 2%

Kelebihan Strategik

  1. Pengesahan pelbagai dimensi: meningkatkan kebolehpercayaan isyarat perdagangan melalui pengesahan dua hala dan dinamik
  2. Adaptif: parameter defleksinya boleh disesuaikan dengan kadar turun naik pasaran yang dinamik
  3. Pengendalian risiko yang sempurna: menggunakan strategi stop loss dengan peratusan tetap untuk mengawal risiko setiap perdagangan
  4. Kesan visual yang baik: menunjukkan isyarat dagangan dengan jelas melalui label dan grafik untuk memudahkan analisis dan pengoptimuman

Risiko Strategik

  1. Risiko pasaran goyah: Isyarat pecah palsu yang kerap berlaku di pasaran setapak
  2. Risiko tergelincir: kemungkinan tergelincir yang lebih besar dalam keadaan pantas
  3. Sensitiviti parameter: Pilihan parameter penunjuk mempunyai kesan yang lebih besar terhadap prestasi strategi
  4. Laggasi isyarat: mungkin terlepas beberapa pergerakan pantas kerana perlu mengesahkan pembentukan titik gelombang baru

Arah pengoptimuman strategi

  1. Menambah penapis keadaan pasaran: Indikator kadar turun naik boleh ditambah untuk mengenal pasti keadaan pasaran, menggunakan tetapan parameter yang berbeza dalam keadaan yang berbeza
  2. Pengoptimuman hentian dinamik: kedudukan hentian boleh disesuaikan secara dinamik berdasarkan ATR atau kadar turun naik
  3. Memperkenalkan pengesahan jumlah transaksi: menambah pengesahan jumlah transaksi semasa isyarat dihasilkan
  4. Penapisan masa: penapisan masa boleh ditambah untuk mengelakkan dagangan pada masa turun naik

ringkaskan

Ini adalah sistem perdagangan yang lengkap yang menggabungkan trend tracking dan perdagangan dinamik. Dengan kerja sama serentak pelbagai petunjuk teknikal, risiko dapat dikendalikan dengan berkesan sambil mengekalkan kadar kemenangan yang tinggi. Walaupun terdapat beberapa ketinggalan, tetapi dengan pengoptimuman parameter dan pengurusan risiko yang munasabah, kesan perdagangan yang stabil dapat dicapai.

Kod sumber strategi
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-15 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Zig Zag + Williams %R Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=300)

// ====================
// === Parameters
// ====================

// Zig Zag parameters
zigzag_depth = input.int(5, title="Zig Zag Depth", minval=1)
zigzag_deviation = input.float(1.0, title="Zig Zag Deviation (%)", minval=0.1, step=0.1)

// Williams %R parameters
williams_length = input.int(14, title="Williams %R Length", minval=1)
williams_overbought = input.int(-20, title="Williams %R Overbought", minval=-100, maxval=0)
williams_oversold = input.int(-80, title="Williams %R Oversold", minval=-100, maxval=0)

// ====================
// === Zig Zag Calculation
// ====================

// Initialize variables
var float last_pivot_high = na
var float last_pivot_low = na
var int zz_dir = 0  // 1 for uptrend, -1 for downtrend

// Calculate pivots
pivot_high = ta.pivothigh(high, zigzag_depth, zigzag_depth)
pivot_low = ta.pivotlow(low, zigzag_depth, zigzag_depth)

// Update Zig Zag direction and last pivots with deviation
if (not na(pivot_high))
    if (zz_dir != -1)  // Only change to downtrend if not already in downtrend
        if (na(last_pivot_high) or (high[zigzag_depth] > last_pivot_high * (1 + zigzag_deviation / 100)))
            last_pivot_high := high[zigzag_depth]
            zz_dir := -1
            label.new(bar_index[zigzag_depth], high[zigzag_depth], text="PH", color=color.red, style=label.style_label_down)

if (not na(pivot_low))
    if (zz_dir != 1)  // Only change to uptrend if not already in uptrend
        if (na(last_pivot_low) or (low[zigzag_depth] < last_pivot_low * (1 - zigzag_deviation / 100)))
            last_pivot_low := low[zigzag_depth]
            zz_dir := 1
            label.new(bar_index[zigzag_depth], low[zigzag_depth], text="PL", color=color.green, style=label.style_label_up)

// ====================
// === Williams %R Calculation
// ====================

// Calculate Williams %R manually
highest_high = ta.highest(high, williams_length)
lowest_low = ta.lowest(low, williams_length)
williams_r = (highest_high - close) / (highest_high - lowest_low) * -100

// ====================
// === Trade Conditions
// ====================

// Assign crossover and crossunder results to variables
crossover_williams = ta.crossover(williams_r, williams_oversold)
crossunder_williams = ta.crossunder(williams_r, williams_overbought)

// Define trade conditions
longCondition = (zz_dir == 1) and crossover_williams
shortCondition = (zz_dir == -1) and crossunder_williams

// ====================
// === Trading
// ====================

// Enter Long
if (longCondition)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, low, text="BUY", color=color.green, style=label.style_label_up)

// Enter Short
if (shortCondition)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, high, text="SELL", color=color.red, style=label.style_label_down)

// ====================
// === Visualization
// ====================

// Plot Zig Zag pivot shapes
plotshape(series=(not na(pivot_high) and high[zigzag_depth] == last_pivot_high), title="Swing High", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="ZZ High")
plotshape(series=(not na(pivot_low) and low[zigzag_depth] == last_pivot_low), title="Swing Low", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, text="ZZ Low")

// Plot Williams %R
hline(williams_overbought, "Overbought", color=color.red, linestyle=hline.style_dashed)
hline(williams_oversold, "Oversold", color=color.green, linestyle=hline.style_dashed)
plot(williams_r, title="Williams %R", color=color.blue)

// Debug plot for Zig Zag direction
plot(zz_dir, title="Zig Zag Direction", color=color.orange, linewidth=2)

// ====================
// === Risk Management
// ====================

// Risk parameters
stop_loss_perc = input.float(1.0, title="Stop Loss (%)") / 100
take_profit_perc = input.float(2.0, title="Take Profit (%)") / 100

// Stop Loss and Take Profit for Long
if (longCondition)
    strategy.exit("Long Exit", from_entry="Long", stop=close * (1 - stop_loss_perc), limit=close * (1 + take_profit_perc))

// Stop Loss and Take Profit for Short
if (shortCondition)
    strategy.exit("Short Exit", from_entry="Short", stop=close * (1 + stop_loss_perc), limit=close * (1 - take_profit_perc))