Adaptive Backtest Strategi Pilihan Jangkauan Tanggal Berdasarkan Double MA

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

img

Gambaran umum

Ide inti dari strategi ini adalah untuk menerapkan kerangka kerja yang dapat secara fleksibel memilih rentang tanggal backtest untuk memenuhi kebutuhan pengguna yang berbeda, sehingga mereka dapat secara otomatis atau manual mengatur waktu awal dan akhir untuk backtest.

Strategi ini menyediakan empat pilihan untuk pemilihan rentang tanggal melalui parameter input: menggunakan semua data riwayat, hari-hari tertentu baru-baru ini, minggu-minggu tertentu baru-baru ini atau secara manual menentukan rentang tanggal. Strategi ini akan secara dinamis mengatur jendela backtest berdasarkan rentang tanggal yang dipilih, sambil menjaga logika perdagangan tidak berubah, sehingga perbedaan kinerja di bawah jendela waktu yang berbeda dapat dibandingkan.

Prinsip Strategi

Strategi ini terdiri dari dua modul: pemilihan rentang tanggal backtest dan strategi perdagangan MA ganda.

Backtest Modul Pilihan Jangkauan Tanggal

  1. Memberikan empat pilihan untuk pemilihan kisaran tanggal: semua data riwayat (ALL), hari-hari tertentu baru-baru ini (DAYS), minggu tertentu baru-baru ini (WEEKS), kisaran tanggal yang ditentukan secara manual (MANUAL).
  2. Secara dinamis menetapkan waktu awal dan akhir backtest berdasarkan konversi timestamp dari kisaran yang dipilih.
  3. Menggunakan jendela kondisi waktu untuk menyaring lilin dan hanya melakukan backtest dalam kisaran tanggal yang dipilih.

Modul Strategi Perdagangan Double MA

  1. Periode MA cepat adalah fastMA, default 14; periode MA lambat adalah slowMA, default 28.
  2. Long ketika MA cepat melintasi MA lambat; posisi dekat ketika MA cepat melintasi MA lambat.
  3. Merangkai kurva MA cepat dan lambat.

Analisis Keuntungan

  1. Fleksibel memilih rentang tanggal backtest yang berbeda tanpa batasan untuk memenuhi kebutuhan eksperimen yang berbeda.
  2. Dapat menguji efek dari parameter periode yang berbeda dalam kerangka waktu yang sama dengan perbandingan hasil.
  3. Mudah untuk memodifikasi logika perdagangan untuk berfungsi sebagai kerangka untuk strategi lain.
  4. Sederhana untuk memahami strategi MA ganda, mudah untuk pemula.

Analisis Risiko dan Solusi

  1. Strategi Double MA adalah mentah dengan masalah pembelian / penjualan yang sering. Pertimbangkan untuk menambahkan stop loss dll untuk optimasi.
  2. Mengatur rentang tanggal secara manual perlu hati-hati untuk menghindari kesalahan.
  3. Sejarah panjang backtest meningkatkan siklus tes. dapat mempertimbangkan menambahkan slippage atau biaya untuk mengurangi perdagangan sering.

Arahan untuk Optimasi Strategi

  1. Tambahkan logika stop loss untuk mengurangi risiko kerugian.
  2. Filter saham dengan saham kumpulan dengan relevansi indeks yang kuat untuk stabilitas yang lebih tinggi.
  3. Tambahkan filter untuk menghilangkan sinyal tidak stabil dalam periode tertentu untuk mengurangi perdagangan yang tidak perlu.
  4. Uji kinerja indeks stok untuk menemukan varietas terbaik.

Kesimpulan

Sebagai kerangka kerja yang fleksibel dan dapat disesuaikan untuk pemilihan rentang tanggal, kelebihannya adalah memenuhi kebutuhan pengujian yang berbeda dari pengguna. Dikombinasikan dengan logika perdagangan double MA yang sederhana namun efektif, ini dapat dengan cepat memverifikasi dan membandingkan strategi. Optimasi tindak lanjut seperti menambahkan filter atau logika stop loss dapat membuat strategi lebih praktis untuk perdagangan langsung. Singkatnya, kerangka kerja strategi memiliki skalabilitas dan nilai referensi 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 banyak