Strategi Momentum Tren - Sistem Waktu Pita Dinamis Multi-Periode Zigzag

SL TP PH PL
Tanggal Pembuatan: 2025-02-18 13:29:06 Akhirnya memodifikasi: 2025-02-18 13:29:06
menyalin: 1 Jumlah klik: 343
1
fokus pada
1617
Pengikut

Strategi Momentum Tren - Sistem Waktu Pita Dinamis Multi-Periode Zigzag

Ringkasan

Strategi ini merupakan sistem perdagangan multidimensi yang menggabungkan indikator ZigZag dan William (%R). Dengan indikator ZigZag, Anda dapat mengidentifikasi titik tinggi dan rendah yang penting, dan menggunakan William untuk mengkonfirmasi titik masuk saat pasar mencapai overbought atau oversold. Kombinasi ini tidak hanya dapat menangkap titik-titik perubahan tren utama di pasar, tetapi juga meningkatkan akurasi perdagangan dengan mengkonfirmasi momentum.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada dua komponen utama:

  1. Indikator kata-kata mengidentifikasi titik-titik tinggi dan rendah yang signifikan melalui parameter kedalaman dan defisiensi yang ditetapkan, memfilter kebisingan pasar, dan menentukan arah tren. Ketika titik rendah gelombang baru terbentuk, itu menunjukkan awal tren naik, dan titik tinggi gelombang baru menunjukkan awal tren turun.
  2. Indikator William menghitung kondisi dinamika pasar dengan membandingkan harga saat ini dengan harga tertinggi dalam periode tertentu. Ketika nilai indikator melampaui 80 berarti oversold (potensi membeli), dan melampaui 20 berarti oversold (potensi menjual).

Aturan trading strategi adalah sebagai berikut:

  • Kondisi multi: Indikator kata bentuk mengidentifikasi titik terendah baru dan Indikator William melompat dari zona oversold
  • Kondisi kosong: Indikator bentuk kata mengidentifikasi titik tinggi baru dan Indikator William terobosan ke bawah dari zona overbought
  • Stop loss di setelan 1% dan stop loss di setelan 2%

Keunggulan Strategis

  1. Konfirmasi multi-dimensi: meningkatkan keandalan sinyal perdagangan melalui konfirmasi ganda tren dan momentum
  2. Adaptif: Parameter defisiensi indikator bentuk kata dapat disesuaikan dengan dinamika fluktuasi pasar
  3. Pengendalian risiko yang sempurna: Menggunakan strategi stop loss dengan persentase tetap untuk mengontrol risiko setiap transaksi
  4. Efek visualisasi yang baik: menampilkan sinyal perdagangan dengan jelas melalui label dan grafik, untuk memudahkan analisis dan optimalisasi

Risiko Strategis

  1. Risiko pasar yang bergoyang: sinyal palsu yang sering muncul di pasar horizontal
  2. Risiko tergelincir: kemungkinan tergelincir lebih besar dalam kondisi kecepatan tinggi
  3. Sensitivitas parameter: pilihan parameter indikator memiliki pengaruh yang lebih besar terhadap kinerja strategi
  4. Sinyal lag: mungkin kehilangan beberapa sinyal cepat karena perlu mengkonfirmasi pembentukan titik gelombang baru

Arah optimasi strategi

  1. Menambahkan filter kondisi pasar: Anda dapat menambahkan indikator volatilitas untuk mengidentifikasi kondisi pasar, menggunakan pengaturan parameter yang berbeda dalam situasi yang berbeda
  2. Optimasi Stop Loss Dinamis: posisi stop loss dapat disesuaikan secara dinamis berdasarkan ATR atau volatilitas
  3. Masukkan konfirmasi transaksi: Tambahkan verifikasi transaksi saat sinyal dihasilkan
  4. Filter waktu: Anda dapat menambahkan filter periode perdagangan untuk menghindari perdagangan pada periode yang lebih berfluktuasi

Meringkaskan

Ini adalah sistem perdagangan lengkap yang menggabungkan pelacakan tren dan perdagangan dinamis. Dengan sinergi dari beberapa indikator teknis, risiko dapat dikendalikan secara efektif sambil mempertahankan tingkat kemenangan yang tinggi. Meskipun ada beberapa keterbelakangan, namun dengan optimasi parameter dan manajemen risiko yang masuk akal, efek perdagangan yang stabil dapat dicapai.

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