Strategi Pilihan Julat Tarikh Backtest Berkualiti Berdasarkan MA Berganda

Penulis:ChaoZhang, Tarikh: 2024-01-05 12:12:10
Tag:

img

Ringkasan

Idea teras strategi ini adalah untuk melaksanakan kerangka kerja yang boleh memilih julat tarikh backtest dengan fleksibel untuk memenuhi keperluan pengguna yang berbeza, supaya mereka dapat menetapkan waktu permulaan dan akhir untuk backtest secara automatik atau manual.

Strategi ini menyediakan empat pilihan untuk pemilihan julat tarikh melalui parameter input: menggunakan semua data sejarah, hari tertentu baru-baru ini, minggu tertentu baru-baru ini atau menentukan julat tarikh secara manual.

Prinsip Strategi

Strategi ini terdiri daripada dua modul: pilihan julat tarikh backtest dan strategi perdagangan MA berganda.

Backtest Modul Pilihan Julat Tarikh

  1. Menyediakan empat pilihan untuk pemilihan julat tarikh: semua data sejarah (ALL), hari-hari tertentu baru-baru ini (DAYS), minggu tertentu baru-baru ini (WEEKS), julat tarikh yang ditentukan secara manual (MANUAL).
  2. Secara dinamik menetapkan waktu permulaan dan akhir backtest berdasarkan penukaran timestamp julat yang dipilih.
  3. Menggunakan fungsi tingkap keadaan masa untuk menapis lilin dan hanya melakukan backtest dalam julat tarikh yang dipilih.

Modul Strategi Dagangan MA Ganda

  1. Tempoh MA pantas adalah fastMA, lalai 14; tempoh MA perlahan adalah slowMA, lalai 28.
  2. Long apabila MA pantas melintasi MA perlahan; kedudukan dekat apabila MA pantas melintasi di bawah MA perlahan.
  3. Merangka lengkung MA yang pantas dan perlahan.

Analisis Kelebihan

  1. Fleksibel memilih julat tarikh backtest yang berbeza tanpa had untuk memenuhi keperluan eksperimen yang berbeza.
  2. Boleh menguji kesan parameter tempoh yang berbeza dalam jangka masa yang sama dengan perbandingan hasil.
  3. Mudah untuk mengubah suai logik perdagangan untuk berfungsi sebagai rangka kerja untuk strategi lain.
  4. Sederhana untuk memahami strategi MA berganda, mudah untuk pemula.

Analisis Risiko dan Penyelesaian

  1. Strategi MA berganda adalah mentah dengan masalah membeli / menjual yang kerap.
  2. Menetapkan julat tarikh secara manual perlu berhati-hati untuk mengelakkan kesilapan.
  3. Ujian semula sejarah panjang meningkatkan kitaran ujian. Boleh mempertimbangkan penambahan slippage atau yuran untuk mengurangkan perdagangan yang kerap.

Arahan untuk Pengoptimuman Strategi

  1. Tambah logik stop loss untuk mengurangkan risiko kerugian.
  2. Penapis stok dengan kumpulan stok dengan relevansi indeks yang kuat untuk kestabilan yang lebih tinggi.
  3. Tambah penapis untuk menghilangkan isyarat yang tidak stabil dalam tempoh tertentu untuk mengurangkan perdagangan yang tidak perlu.
  4. Uji prestasi indeks stok untuk mencari jenis terbaik.

Kesimpulan

Sebagai rangka kerja yang fleksibel dan boleh disesuaikan untuk pemilihan julat tarikh, kelebihan memenuhi keperluan ujian pengguna yang berbeza. Digabungkan dengan logik perdagangan MA ganda yang mudah tetapi berkesan, ia dapat dengan cepat mengesahkan dan membandingkan strategi. Pengoptimuman susulan seperti menambahkan penapis atau logik stop loss dapat menjadikan strategi lebih praktikal untuk perdagangan langsung. Ringkasnya, rangka kerja strategi mempunyai skalabiliti dan nilai rujukan yang baik.


/*backtest
start: 2022-12-29 00:00:00
end: 2024-01-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title = "How To Auto Set Date Range", shorttitle = " ", overlay = true)

// Revision:        1
// Author:          @allanster 

// === INPUT MA ===
fastMA = input(defval = 14, title = "FastMA", type = input.integer, minval = 1, step = 1)
slowMA = input(defval = 28, title = "SlowMA", type = input.integer, minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
useRange     = input(defval = "WEEKS", title = "Date Range", type = input.string, confirm = false, options = ["ALL", "DAYS", "WEEKS", "MANUAL"])
nDaysOrWeeks = input(defval = 52, title = "# Days or Weeks", type = input.integer, minval = 1)
FromMonth    = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay      = input(defval = 15, title = "From Day", minval = 1, maxval = 31)
FromYear     = input(defval = 2019, title = "From Year", minval = 2014)
ToMonth      = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay        = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
ToYear       = input(defval = 9999, title = "To Year", minval = 2014)

// === FUNCTION EXAMPLE ===
window() => true

// === LOGIC ===
buy  = crossover(sma(close, fastMA), sma(close, slowMA))         // buy when fastMA crosses over slowMA
sell = crossunder(sma(close, fastMA), sma(close, slowMA))        // sell when fastMA crosses under slowMA

// === EXECUTION ===
strategy.entry("L", strategy.long, when=window() and buy)        // buy long when "within window of time" AND crossover
strategy.close("L", when=window() and sell)                      // sell long when "within window of time" AND crossunder         

// === PLOTTING ===
plot(sma(close, fastMA), title = 'FastMA', color = color.aqua, linewidth = 2, style = plot.style_line)    // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot SlowMA


Lebih lanjut