
この戦略の核心となる考えは,回測時間帯を柔軟に選択できるフレームワークを実現し,ユーザーが異なるニーズに応じて,自動または手動で回測の開始時間を設定できるようにすることです.
戦略は,入力パラメータによって4つの日付範囲選択方法を提供します.全履歴データ,最近指定された日数,最近指定された週数,または手動指定された日付範囲を使用します.戦略は,選択された日付範囲に応じて反測ウィンドウを動的に設定し,取引ロジックは変わらないまま,異なる時間ウィンドウの下での戦略のパフォーマンスの違いを比較することができます.
この戦略は,回帰日程範囲選択モジュールと双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