이 전략의 핵심 아이디어는 사용자들의 다양한 요구를 충족시키기 위해 백테스트 날짜 범위를 유연하게 선택할 수 있는 프레임워크를 구현하는 것입니다. 그래서 그들은 자동 또는 수동으로 백테스트의 시작 및 종료 시간을 설정할 수 있습니다.
이 전략은 입력 매개 변수를 통해 날짜 범위 선택에 대한 네 가지 옵션을 제공합니다: 모든 역사 데이터, 최근 지정된 날, 최근 지정된 주 또는 날짜 범위를 수동으로 지정합니다. 이 전략은 선택된 날짜 범위에 따라 역동적으로 백테스트 창을 설정하면서 거래 논리를 변경하지 않으므로 다른 시간 창에서 성능 차이를 비교 할 수 있습니다.
이 전략은 두 개의 모듈으로 구성됩니다: 백테스트 날짜 범위 선택 및 이중 MA 거래 전략.
유연하고 사용자 정의 가능한 날짜 범위 선택의 프레임워크로서, 장점은 사용자의 다양한 테스트 요구를 충족시키고 있습니다. 간단하지만 효과적인 이중 MA 거래 논리와 결합하여 전략을 신속하게 확인하고 비교 할 수 있습니다. 필터 또는 스톱 로스 로직을 추가하는 것과 같은 후속 최적화는 라이브 거래에 전략을 더 실용적으로 만들 수 있습니다. 요약하자면 전략 프레임워크는 좋은 확장성과 참조 가치를 가지고 있습니다.
/*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