Strategi Persilangan Purata Pergerakan Berbilang Tempoh Fleksibel Edisi Lanjutan

MA SMA EMA WMA HMA SMMA
Tarikh penciptaan: 2024-11-28 15:18:47 Akhirnya diubah suai: 2024-11-28 15:18:47
Salin: 0 Bilangan klik: 516
1
fokus pada
1617
Pengikut

Strategi Persilangan Purata Pergerakan Berbilang Tempoh Fleksibel Edisi Lanjutan

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan kuantitatif yang tinggi berdasarkan pelbagai garis rata dan beberapa tempoh masa. Ia membolehkan pedagang untuk memilih jenis rata-rata bergerak yang berbeza (termasuk SMA, EMA, WMA, HMA, dan SMMA) dan boleh bertukar secara bebas dalam pelbagai tempoh masa, seperti garis matahari, garis minggu atau garis bulan, mengikut keadaan pasaran. Logik teras strategi ini adalah untuk menentukan isyarat jual beli dengan membandingkan hubungan kedudukan harga tutup dengan garis rata yang dipilih, sambil menggabungkan pemeriksaan kitaran berulang yang berbeza untuk meningkatkan ketepatan perdagangan.

Prinsip Strategi

Strategi ini menggunakan reka bentuk modular, dan terdiri daripada empat komponen utama: modul pilihan jenis garis rata, modul pilihan kitaran masa, modul penjanaan isyarat dan modul pengurusan kedudukan. Apabila anda melewati garis rata yang dipilih di atas harga penyingkiran, sistem akan mengeluarkan banyak isyarat pada permulaan kitaran perdagangan seterusnya; apabila anda melewati garis rata di bawah harga penyingkiran, sistem akan mengeluarkan isyarat kedudukan kosong pada permulaan kitaran perdagangan seterusnya.

Kelebihan Strategik

  1. Fleksibiliti yang tinggi: menyokong pelbagai jenis garis purata dan kombinasi jangka masa untuk menyesuaikan diri dengan keadaan pasaran yang berbeza
  2. Pengendalian risiko yang sempurna: Mengelakkan kebocoran dan kehilangan peluang melalui mekanisme pemeriksaan automatik pada akhir kitaran
  3. Pengurusan dana yang munasabah: Menggunakan peratusan pengurusan kedudukan, mengawal risiko dengan berkesan
  4. Stabiliti isyarat yang kuat: mengurangkan kesan isyarat palsu melalui mekanisme pengesahan berganda
  5. Kebolehpasangan yang luas: boleh digunakan dalam pelbagai jenis perdagangan dan persekitaran pasaran

Risiko Strategik

  1. Risiko keterlambatan: Indeks garis rata sendiri mempunyai keterlambatan tertentu, yang boleh menyebabkan kelewatan masa masuk dan keluar
  2. Risiko pasaran goyah: Isyarat pecah palsu yang sering berlaku dalam pasaran goyah.
  3. Risiko lintas kitaran: isyarat dari kitaran masa yang berbeza mungkin bertentangan, memerlukan keutamaan isyarat yang berkesan
  4. Risiko pengurusan wang: Posisi peratusan tetap mungkin terlalu radikal dalam keadaan pasaran tertentu

Arah pengoptimuman strategi

  1. Pengenalan penunjuk turun naik: disyorkan untuk menambah penunjuk turun naik seperti ATR atau Bollinger Bands untuk menyesuaikan saiz kedudukan secara dinamik
  2. Tambah penapis trend: mekanisme penilaian trend jangka panjang boleh ditambahkan, hanya membuka posisi di arah trend utama
  3. Mekanisme pengesahan isyarat yang dioptimumkan: pertimbangkan untuk memperkenalkan petunjuk tambahan seperti jumlah trafik, meningkatkan kebolehpercayaan isyarat
  4. Peningkatan mekanisme henti kerugian: cadangan untuk menambah fungsi henti kerugian untuk melindungi keuntungan dengan lebih baik
  5. Menambah indikator sentimen pasaran: Cadangan untuk memperkenalkan indikator seperti RSI atau MACD untuk menilai keadaan pasaran yang berlebihan

ringkaskan

Strategi ini adalah sistem perdagangan yang dirancang dengan baik dan logik yang jelas, yang menyediakan pedagang dengan alat perdagangan yang boleh dipercayai melalui tetapan parameter yang fleksibel dan mekanisme pengesahan berganda. Reka bentuk modular strategi ini menjadikannya dapat diperluas dengan kuat, dan prestasi dapat ditingkatkan lagi dengan pengoptimuman berterusan.

Kod sumber strategi
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Flexible Moving Average Strategy", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input to select the review frequency (Daily, Weekly, Monthly)
check_frequency = input.string("Weekly", title="Review Frequency", options=["Daily", "Weekly", "Monthly"])

// Input to select the Moving Average method (SMA, EMA, WMA, HMA, SMMA)
ma_method = input.string("EMA", title="Moving Average Method", options=["SMA", "EMA", "WMA", "HMA", "SMMA"])

// Input to select the length of the Moving Average
ma_length = input.int(30, title="Moving Average Length", minval=1)

// Input to select the timeframe for Moving Average calculation
ma_timeframe = input.string("W", title="Moving Average Timeframe", options=["D", "W", "M"])

// Calculate all Moving Averages on the selected timeframe
sma_value = request.security(syminfo.tickerid, ma_timeframe, ta.sma(close, ma_length), lookahead=barmerge.lookahead_off)
ema_value = request.security(syminfo.tickerid, ma_timeframe, ta.ema(close, ma_length), lookahead=barmerge.lookahead_off)
wma_value = request.security(syminfo.tickerid, ma_timeframe, ta.wma(close, ma_length), lookahead=barmerge.lookahead_off)
hma_value = request.security(syminfo.tickerid, ma_timeframe, ta.hma(close, ma_length), lookahead=barmerge.lookahead_off)
smma_value = request.security(syminfo.tickerid, ma_timeframe, ta.rma(close, ma_length), lookahead=barmerge.lookahead_off) // Smoothed Moving Average (SMMA)

// Select the appropriate Moving Average based on user input
ma = ma_method == "SMA" ? sma_value : 
     ma_method == "EMA" ? ema_value :
     ma_method == "WMA" ? wma_value :
     ma_method == "HMA" ? hma_value :
     smma_value  // Default to SMMA

// Variable initialization
var float previous_close = na
var float previous_ma = na
var float close_to_compare = na
var float ma_to_compare = na

// Detect the end of the period (Daily, Weekly, or Monthly) based on the selected frequency
var bool is_period_end = false

if check_frequency == "Daily"
    is_period_end := ta.change(time('D')) != 0
else if check_frequency == "Weekly"
    is_period_end := ta.change(time('W')) != 0
else if check_frequency == "Monthly"
    is_period_end := ta.change(time('M')) != 0

// Store the close and Moving Average values at the end of the period
if is_period_end
    previous_close := close[0]  // Closing price of the last day of the period
    previous_ma := ma[0]  // Moving Average value at the end of the period

// Strategy logic
is_period_start = is_period_end

// Check if this is the first bar of the backtest
is_first_bar = barstate.isfirst

if (is_period_start or is_first_bar)
    // If the previous period values are not available, use current values
    close_to_compare := not na(previous_close) ? previous_close : close[0]
    ma_to_compare := not na(previous_ma) ? previous_ma : ma[0]
    
    if close_to_compare < ma_to_compare
        // Close price below the MA -> Sell
        if strategy.position_size > 0
            strategy.close("Long")
    else
        // Close price above the MA -> Buy/Hold
        if strategy.position_size == 0
            strategy.entry("Long", strategy.long)

// Close all positions at the end of the backtest period
if barstate.islastconfirmedhistory
    strategy.close_all(comment="Backtest End")

// Plot the previous period's close price for comparison
plot(previous_close, color=color.red, title="Previous Period Close", style=plot.style_stepline)
plot(close_to_compare, color=color.blue, title="Close to Compare", style=plot.style_line)

// Plot the selected Moving Average
plot(ma, color=color.white, title="Moving Average", style=plot.style_line, linewidth=3)