Strategi perdagangan kuantitatif penyesuaian pangsi sokongan dinamik

ATR Pivot
Tarikh penciptaan: 2025-01-10 15:08:24 Akhirnya diubah suai: 2025-01-10 15:08:24
Salin: 3 Bilangan klik: 416
1
fokus pada
1617
Pengikut

Strategi perdagangan kuantitatif penyesuaian pangsi sokongan dinamik

Gambaran keseluruhan

Strategi ini ialah sistem perdagangan adaptif yang mengenal pasti tahap sokongan dan rintangan secara dinamik berdasarkan titik pangsi harga. Ia menentukan tahap harga utama dengan mengira tinggi dan rendah tempatan dalam masa nyata dan melaksanakan dagangan berdasarkan itu. Teras strategi ini terletak pada sifatnya yang dinamik, yang boleh melaraskan parameter dagangan dalam masa mengikut perubahan dalam keadaan pasaran dan sesuai untuk pasaran trend dan tidak menentu.

Prinsip Strategi

Logik teras strategi adalah berdasarkan elemen utama berikut:

  1. Pengiraan Titik Pangsi Dinamik: Menggunakan parameter panjang pangsi boleh laras (lalai ialah 2) untuk mengenal pasti tinggi dan rendah tempatan
  2. Julat sokongan dan rintangan: Tetapkan julat peratusan (lalai 0.4%) berdasarkan titik pangsi untuk menentukan kawasan dagangan yang berkesan
  3. Penjanaan isyarat dagangan: Apabila harga menembusi tahap sokongan dari bawah, isyarat panjang dijana, dan apabila ia menembusi tahap rintangan dari atas, isyarat pendek dijana.
  4. Kawalan risiko: Tetapan henti rugi dinamik (10%) dan untung (27%) diterima pakai, dan saiz kedudukan diselaraskan secara automatik mengikut ekuiti akaun

Kelebihan Strategik

  1. Kebolehsuaian yang kuat: Strategi boleh melaraskan kedudukan sokongan dan rintangan secara dinamik mengikut status pasaran untuk mengelakkan ketinggalan yang disebabkan oleh tahap statik
  2. Risiko boleh dikawal: Melalui peratusan henti rugi yang ketat dan pengurusan kedudukan dinamik, risiko setiap transaksi dikawal dalam julat yang munasabah
  3. Kebolehskalaan: Menyokong berbilang tempoh masa dan kombinasi parameter untuk memudahkan pengoptimuman mengikut persekitaran pasaran yang berbeza
  4. Ketelusan yang tinggi: Logik dagangan adalah jelas, dan semua isyarat serta tahap harga boleh dipaparkan secara intuitif pada carta

Risiko Strategik

  1. Risiko pecahan palsu: Isyarat pecahan palsu yang kerap mungkin berlaku dalam pasaran yang tidak menentu, yang perlu dikurangkan dengan melaraskan parameter selang sokongan dan rintangan.
  2. Kesan gelinciran: Dalam persekitaran pasaran dengan kecairan yang lemah, harga urus niaga sebenar mungkin menyimpang dengan ketara daripada harga isyarat.
  3. Kebergantungan arah aliran: Strategi ini berprestasi lebih baik dalam pasaran arah aliran yang kukuh, tetapi mungkin menjana terlalu banyak isyarat dagangan dalam fasa sisi
  4. Kepekaan parameter: Prestasi strategi adalah sensitif kepada tetapan parameter, dan ujian belakang diperlukan untuk menentukan gabungan parameter yang optimum.

Arah pengoptimuman strategi

  1. Menambah modul pengecaman persekitaran pasaran untuk melaraskan parameter secara automatik mengikut turun naik
  2. Memperkenalkan kelantangan dan penunjuk teknikal lain sebagai isyarat pengesahan tambahan
  3. Optimumkan algoritma pengurusan kedudukan dan buat pelarasan dinamik berdasarkan turun naik pasaran
  4. Tambah penapis masa untuk mengelakkan menjana isyarat dagangan semasa tempoh yang tidak menguntungkan
  5. Bangunkan algoritma henti rugi adaptif untuk melaraskan kedudukan henti rugi secara dinamik mengikut turun naik pasaran

ringkaskan

Strategi ini menyediakan rangka kerja yang kukuh untuk perdagangan mengikut aliran dan pembalikan dengan mengenal pasti tahap harga utama secara dinamik digabungkan dengan kawalan risiko yang ketat. Walaupun terdapat tahap tertentu sensitiviti parameter dan pergantungan persekitaran pasaran, melalui pengoptimuman dan penambahbaikan berterusan, ia boleh mengekalkan prestasi yang stabil dalam persekitaran pasaran yang berbeza. Kejayaan operasi strategi memerlukan pedagang untuk mempunyai pemahaman yang mendalam tentang prinsipnya dan membuat pelarasan parameter yang sesuai berdasarkan keadaan pasaran tertentu.

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