
इस रणनीति का मुख्य विचार एक फ्रेमवर्क को लागू करना है जो समय सीमा को चुनने के लिए लचीला है, जिससे उपयोगकर्ता को विभिन्न आवश्यकताओं के अनुसार स्वचालित या मैन्युअल रूप से समय निर्धारित करने की अनुमति मिलती है।
चार प्रकार की दिनांक सीमा चयन विकल्प प्रदान करता है, जो रणनीतियों को इनपुट पैरामीटर के माध्यम से प्रदान करता हैः पूर्ण इतिहास डेटा का उपयोग करना, हाल ही में निर्दिष्ट दिन, हाल ही में निर्दिष्ट सप्ताह या मैन्युअल रूप से निर्दिष्ट दिनांक सीमा। रणनीति गतिशील रूप से चयनित दिनांक सीमा के आधार पर प्रतिक्रिया विंडो सेट करती है, जबकि व्यापारिक तर्क अपरिवर्तित रहता है, ताकि विभिन्न समय विंडो के तहत रणनीति के प्रदर्शन में अंतर की तुलना की जा सके।
इस रणनीति में रिटर्न्स डेट रेंज सिलेक्शन मॉड्यूल और डबल एमए ट्रेडिंग रणनीति मॉड्यूल शामिल हैं।
रणनीति एक सामान्य फीडबैक डेट रेंज फ्रेमवर्क के रूप में है, इसका लाभ यह है कि यह लचीला और अनुकूलन योग्य है, जो उपयोगकर्ताओं की विभिन्न परीक्षण आवश्यकताओं को पूरा कर सकता है। सरल और प्रभावी डबल एमए ट्रेडिंग लॉजिक के साथ, रणनीति को जल्दी से सत्यापित और तुलना की जा सकती है। बाद में फ़िल्टर, स्टॉपलॉस लॉजिक आदि को जोड़कर अनुकूलित किया जा सकता है, जिससे रणनीति को वास्तविक दुनिया में लागू करने के लिए एक कदम आगे बढ़ाया जा सकता है। कुल मिलाकर, रणनीति फ्रेमवर्क में अच्छी विस्तारशीलता और संदर्भ मूल्य है।
/*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