
Idea utama strategi ini adalah untuk mewujudkan rangka kerja yang fleksibel untuk memilih julat masa pengesanan, yang membolehkan pengguna menetapkan masa permulaan pengesanan secara automatik atau secara manual mengikut keperluan yang berbeza.
Strategi menyediakan empat pilihan julat tarikh melalui parameter input: menggunakan semua data sejarah, hari yang paling baru ditetapkan, minggu yang paling baru ditetapkan atau julat tarikh yang ditetapkan secara manual. Strategi akan secara dinamik menetapkan tetingkap pengembalian mengikut julat tarikh yang dipilih, sementara logik perdagangan kekal tidak berubah, sehingga dapat membandingkan perbezaan prestasi strategi di bawah tetingkap masa yang berbeza.
Strategi ini terdiri daripada modul pilihan jangka tarikh yang dikesan dan modul strategi perdagangan MA ganda.
Strategi ini berfungsi sebagai kerangka jangka tarikh pengukuran semula umum, dengan kelebihan fleksibiliti dan penyesuaian yang dapat memenuhi keperluan ujian pengguna yang berbeza. Dengan logik perdagangan MA ganda yang mudah dan berkesan, strategi dapat disahkan dan dibandingkan dengan cepat.
/*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