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.
Strategi ini terdiri daripada dua modul: pilihan julat tarikh backtest dan strategi perdagangan MA berganda.
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