Strategi perdagangan kuantitatif adaptif pivot dukungan resistensi dinamis

ATR Pivot
Tanggal Pembuatan: 2025-01-10 15:08:24 Akhirnya memodifikasi: 2025-01-10 15:08:24
menyalin: 3 Jumlah klik: 416
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif adaptif pivot dukungan resistensi dinamis

Ringkasan

Strategi ini adalah sistem perdagangan adaptif yang secara dinamis mengidentifikasi tingkat dukungan dan perlawanan berdasarkan titik poros harga. Ia menentukan tingkat harga utama dengan menghitung harga tertinggi dan terendah setempat secara real-time dan mengeksekusi perdagangan berdasarkan perhitungan tersebut. Inti dari strategi ini terletak pada sifatnya yang dinamis, yang dapat menyesuaikan parameter perdagangan tepat waktu sesuai dengan perubahan kondisi pasar dan cocok untuk pasar yang sedang tren dan bergejolak.

Prinsip Strategi

Logika inti dari strategi ini didasarkan pada elemen-elemen kunci berikut:

  1. Perhitungan Titik Pivot Dinamis: Menggunakan parameter panjang pivot yang dapat disesuaikan (default adalah 2) untuk mengidentifikasi titik tertinggi dan terendah lokal
  2. Rentang support dan resistance: Tetapkan rentang persentase (default 0,4%) berdasarkan titik pivot untuk menentukan area perdagangan yang efektif
  3. Pembuatan sinyal perdagangan: Ketika harga menembus level dukungan dari bawah, sinyal panjang dibuat, dan ketika harga menembus level resistensi dari atas, sinyal pendek dibuat.
  4. Kontrol risiko: Pengaturan stop loss dinamis (10%) dan profit (27%) digunakan, dan ukuran posisi secara otomatis disesuaikan dengan ekuitas akun

Keunggulan Strategis

  1. Kemampuan beradaptasi yang kuat: Strategi ini dapat secara dinamis menyesuaikan posisi support dan resistance sesuai dengan status pasar untuk menghindari kelambatan yang disebabkan oleh level statis
  2. Risiko dapat dikendalikan: Melalui persentase stop loss yang ketat dan manajemen posisi yang dinamis, risiko setiap transaksi dikendalikan dalam kisaran yang wajar
  3. Skalabilitas: Mendukung beberapa periode waktu dan kombinasi parameter untuk memfasilitasi pengoptimalan sesuai dengan lingkungan pasar yang berbeda
  4. Transparansi tinggi: Logika perdagangan jelas, dan semua sinyal dan level harga dapat ditampilkan secara intuitif pada grafik

Risiko Strategis

  1. Risiko breakout palsu: Sinyal breakout palsu sering terjadi dalam pasar yang fluktuatif, yang perlu dikurangi dengan menyesuaikan parameter interval support dan resistance.
  2. Dampak pergeseran: Dalam lingkungan pasar dengan likuiditas yang buruk, harga transaksi aktual dapat sangat menyimpang dari harga sinyal.
  3. Ketergantungan tren: Strategi ini berkinerja lebih baik di pasar tren yang kuat, tetapi dapat menghasilkan terlalu banyak sinyal perdagangan dalam fase menyamping
  4. Sensitivitas parameter: Kinerja strategi sensitif terhadap pengaturan parameter, dan pengujian ulang diperlukan untuk menentukan kombinasi parameter yang optimal.

Arah optimasi strategi

  1. Menambahkan modul pengenalan lingkungan pasar untuk secara otomatis menyesuaikan parameter sesuai dengan volatilitas
  2. Perkenalkan volume dan indikator teknis lainnya sebagai sinyal konfirmasi tambahan
  3. Optimalkan algoritma manajemen posisi dan buat penyesuaian dinamis berdasarkan volatilitas pasar
  4. Tambahkan filter waktu untuk menghindari pembuatan sinyal perdagangan selama periode yang tidak menguntungkan
  5. Mengembangkan algoritma stop loss adaptif untuk menyesuaikan posisi stop loss secara dinamis sesuai dengan volatilitas pasar

Meringkaskan

Strategi ini menyediakan kerangka kerja yang solid untuk mengikuti tren dan perdagangan pembalikan dengan mengidentifikasi tingkat harga utama secara dinamis dikombinasikan dengan pengendalian risiko yang ketat. Meskipun ada tingkat sensitivitas parameter dan ketergantungan lingkungan pasar tertentu, melalui pengoptimalan dan peningkatan berkelanjutan, ia dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar. Agar strategi ini berhasil, para pedagang harus memiliki pemahaman mendalam tentang prinsip-prinsipnya dan membuat penyesuaian parameter yang tepat berdasarkan kondisi pasar tertentu.

Kode Sumber Strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

//@version=6
strategy("Dynamic Support and Resistance Pivot Strategy ", overlay=true)

// Strategy parameters
pivot_length = input.int(2, title="Pivot Length", tooltip="Pivot size to identify peaks and troughs")
support_resistance_distance = input.float(0.4, title="Support/Resistance Distance %", tooltip="Distance to consider a support or resistance level in %")

// Stop Loss and Take Profit parameters
stop_loss_pct = input.float(10.0, title="Stop Loss %", tooltip="Stop loss percentage", minval=0.1) / 100
take_profit_pct = input.float(26.0, title="Take Profit %", tooltip="Take profit percentage", minval=0.1) / 100

// Functions to identify high and low pivots
pivot_high = ta.pivothigh(high, pivot_length, pivot_length)
pivot_low = ta.pivotlow(low, pivot_length, pivot_length)

// Storing support and resistance levels
var float resistance_level = na
var float support_level = na
var float last_pivot_high = na
var float last_pivot_low = na

// Updating support and resistance based on pivots
if (not na(pivot_high))
    resistance_level := high[pivot_length]
    last_pivot_high := high[pivot_length]

if (not na(pivot_low))
    support_level := low[pivot_length]
    last_pivot_low := low[pivot_length]

// Function to check if the current price is near a support or resistance level
is_near_resistance = (not na(resistance_level)) and (close >= resistance_level * (1 - support_resistance_distance / 100)) and (close <= resistance_level * (1 + support_resistance_distance / 100))
is_near_support = (not na(support_level)) and (close >= support_level * (1 - support_resistance_distance / 100)) and (close <= support_level * (1 + support_resistance_distance / 100))

// Cross conditions variables
long_cross = ta.crossover(close, support_level) and not na(support_level)
short_cross = ta.crossunder(close, resistance_level) and not na(resistance_level)

// Entry conditions
long_condition = is_near_support and long_cross  // Buy when crossing support from below
short_condition = is_near_resistance and short_cross  // Sell when crossing resistance from above

// Order execution
if (long_condition)
    strategy.entry("Long", strategy.long)

if (short_condition)
    strategy.entry("Short", strategy.short)

// Stop Loss and Take Profit
if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // For long position
        avg_price_long = strategy.position_avg_price
        long_stop_level = avg_price_long * (1 - stop_loss_pct)
        long_take_profit_level = avg_price_long * (1 + take_profit_pct)
        strategy.exit("Exit Long", from_entry="Long", stop=long_stop_level, limit=long_take_profit_level)

    if (strategy.position_size < 0)  // For short position
        avg_price_short = strategy.position_avg_price
        short_stop_level = avg_price_short * (1 + stop_loss_pct)
        short_take_profit_level = avg_price_short * (1 - take_profit_pct)
        strategy.exit("Exit Short", from_entry="Short", stop=short_stop_level, limit=short_take_profit_level)

// Plotting support and resistance levels on the chart
plot(support_level, title="Support", color=color.green, linewidth=2, style=plot.style_line)
plot(resistance_level, title="Resistance", color=color.red, linewidth=2, style=plot.style_line)

// Adding labels to show pivot values
if (long_condition and not na(support_level))
    label.new(bar_index, low[pivot_length], str.tostring(low[pivot_length]), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

if (short_condition and not na(resistance_level))
    label.new(bar_index, high[pivot_length], str.tostring(high[pivot_length]), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)