
Ý tưởng cốt lõi của chiến lược này là thực hiện một khung có thể lựa chọn một phạm vi thời gian phản hồi linh hoạt, cho phép người dùng có thể tự động hoặc thủ công đặt thời gian bắt đầu phản hồi theo nhu cầu khác nhau.
Chiến lược cung cấp bốn cách để chọn phạm vi ngày thông qua các tham số nhập: sử dụng toàn bộ dữ liệu lịch sử, ngày gần nhất, tuần gần nhất hoặc thiết lập phạm vi ngày bằng tay. Chiến lược sẽ thiết lập cửa sổ phản hồi động theo phạm vi ngày được chọn, trong khi logic giao dịch không thay đổi, để có thể so sánh sự khác biệt trong hoạt động của chiến lược trong các cửa sổ thời gian khác nhau.
Chiến lược này bao gồm mô-đun lựa chọn phạm vi thời gian và mô-đun chiến lược giao dịch MA kép.
Chiến lược này được sử dụng như một khuôn khổ phạm vi ngày đánh giá chung, có tính linh hoạt, có thể tùy chỉnh, có thể đáp ứng nhu cầu thử nghiệm khác nhau của người dùng. Với logic giao dịch MA đôi đơn giản và hiệu quả, chiến lược có thể được xác minh và so sánh nhanh chóng.
/*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