
बैकटेस्टिंग सिस्टम में डिबगिंग रणनीतियों के लिए, आमतौर पर केवलLog()समारोह। इस प्रकार की डीबग दक्षता बहुत कम है, और यह उन नौसिखियों के लिए कठिन है जिन्हें प्रोग्राम परीक्षण में बहुत कम अनुभव है। के लिएJavaScriptभाषा की रणनीति डिबगिंगChromeब्राउज़रों का समर्थन बेहतर है। यह बैकटेस्टिंग के दौरान ब्रेकपॉइंट डिबगिंग, सिंगल-स्टेप डिबगिंग, वेरिएबल वैल्यू मॉनिटरिंग, एक्सप्रेशन मॉनिटरिंग आदि को साकार कर सकता है। तो फिर आइए जानें कि FMZ को नियंत्रित करने के लिए इस विधि का उपयोग कैसे करें।Javascriptभाषा में रणनीतियों का बैकटेस्टिंग करते समय DEBUG का प्रयोग करें। ध्यान रखें कि केवल FMZ परJavascriptभाषा की नीतियाँ डिबगिंग के इस दृष्टिकोण का समर्थन करती हैं।
debuggerअनुदेशFMZ पर जावास्क्रिप्ट भाषा का नीति कोड डालेंdebuggerनिर्देश जो बैकटेस्टिंग के दौरान प्रोग्राम निष्पादन को बाधित कर सकता है।
हम निम्नलिखित परीक्षण रणनीति कोड का उपयोग करते हैं:
/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
function main() {
var n = 1
while (true) {
var t = exchange.GetTicker()
debugger
var r = exchange.GetRecords()
if (n == 1) {
// 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性,属性名区分大小写
var id = exchange.Buy(t.buy, 0.1)
var orderBuy = exchange.GetOrder(id)
}
Sleep(500)
}
}
बैकटेस्ट कॉन्फ़िगरेशन कोड से
/*backtest
start: 2022-03-21 09:00:00
end: 2022-06-21 15:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
आप देख सकते हैं कि बैकटेस्ट के दौरान हमने जो एक्सचेंज जोड़ा है वह बिनेंस स्पॉट है, और कॉन्फ़िगरेशन स्क्रीनशॉट में दिखाया गया है:

रणनीति कोड को देखते हुए, हम देख सकते हैं किvar t = exchange.GetTicker()इस वाक्य के अंतर्गत हमने लिखाdebuggerयह निर्देश यहां ब्रेकपॉइंट सेट करने के समतुल्य है, और इस स्थिति पर पहुंचने पर प्रोग्राम रुक जाएगा। रणनीति कोड में एकाधिक नीतियों का उपयोग किया जा सकता है।debugger, लेकिन ऐसा करना अनुशंसित नहीं है। बस एक निश्चित स्थान पर ब्रेकपॉइंट सेट करें। बाद के ब्रेकपॉइंट ब्राउज़र के DevTools डीबगिंग फ़ंक्शन में सेट किए जा सकते हैं।
आपको सबसे पहले क्रोम ब्राउज़र खोलना होगाDevToolsफिर बैकटेस्ट करें, रणनीति कोड सेट करेंdebuggerअन्यथा प्रभावी होगाdebuggerइसे नजरअंदाज कर दिया जाएगा और बैकटेस्ट रणनीति कार्यक्रम को बाधित नहीं किया जा सकेगा तथा ब्रेकपॉइंट पर रोका नहीं जा सकेगा। खुलाDevToolsरणनीति का बैकटेस्टिंग करने के बाद, रणनीति कार्यक्रम पहले सेट पर बाधित हो जाएगाdebuggerजगह,debuggerइसे नीति कोड के वैश्विक दायरे में भी सेट किया जा सकता है।
हम क्रोम ब्राउज़र खोलते हैंDevToolsउपकरण दो प्रकार के होते हैं:

जब हम “निरीक्षण” पर क्लिक करेंगे तो DevTools इंटरफ़ेस प्रदर्शित होगा।
आप इसे खोलने के लिए शॉर्टकट कुंजी का भी उपयोग कर सकते हैं।Command+Option+I (Mac)याControl+Shift+I(Windows、Linux)खुला DevTools。
खुलाDevToolsइसके बाद, जैसा कि चित्र में दिखाया गया है:

उपरोक्त परीक्षण के बाद, जब हम रणनीति का बैकटेस्ट करने के लिए “स्टार्ट बैकटेस्टिंग” बटन पर क्लिक करते हैं, तो कोड में सेटिंग के कारणdebuggerनिर्देश, रणनीति बाधित होती है और संबंधित स्थिति पर प्रतीक्षा करती है। बैकटेस्ट अटका हुआ प्रतीत होता है, जैसा कि नीचे दिखाया गया है:

यह देखा जा सकता है कि रणनीति मेंdebuggerव्यवधान स्थिति को चिह्नित करें। पूरा प्रोग्राम केवल 1 को निर्दिष्ट n और t को निर्दिष्ट निष्पादित करता हैGetTickerफ़ंक्शन द्वारा लौटाया गया बाज़ार डेटा. उपरोक्त चित्र में लाल बॉक्स में, आप विशिष्ट चर मान देख सकते हैं, जो रणनीति चलने पर विभिन्न चर के मूल्यों का निरीक्षण करना बहुत सुविधाजनक बनाता है।
ब्रेकपॉइंट जोड़ने के लिए हम कोड के बाईं ओर स्थित लाइन नंबर पर क्लिक कर सकते हैं।

स्क्रिप्ट निष्पादन को फिर से शुरू करने के लिए “स्क्रिप्ट निष्पादन को फिर से शुरू करें” पर क्लिक करें। प्रोग्राम अगले ब्रेकपॉइंट पर चलेगा। यदि कोई ब्रेकपॉइंट नहीं है या प्रोग्राम में कोई त्रुटि है और अपवाद उत्पन्न होता है, तो बैकटेस्ट समाप्त हो जाएगा।

इसके अलावा कुछ बटन भी हैं जिनका उपयोग निम्नलिखित कार्यों के लिए किया जा सकता है: अगला फ़ंक्शन छोड़ना, अगले फ़ंक्शन कॉल में प्रवेश करना, वर्तमान फ़ंक्शन कॉल से बाहर निकलना, एकल चरण, सभी ब्रेकपॉइंट को अनदेखा करना आदि।


इस बिंदु पर, जब हम निष्पादन जारी रखने के लिए “स्क्रिप्ट निष्पादन फिर से शुरू करें” बटन पर क्लिक करना जारी रखते हैं, तो रणनीति कार्यक्रम में एक अपवाद होगा, बैकटेस्ट समाप्त हो जाएगा, और एक अपवाद त्रुटि संदेश मुद्रित होगा।
main:17:31 - TypeError: Cannot convert "undefined" to double
यह नौसिखियों द्वारा की जाने वाली एक सामान्य गलती है, जो संरचना विशेषता नाम के लिए ऊपरी और निचले केस के बीच अंतर नहीं करते हैं।
var id = exchange.Buy(t.buy, 0.1) // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。
परिणामस्वरूप, कीमत एक्सचेंज में चली गई। खरीदें फ़ंक्शन एक अपरिभाषित चर है, जिसके कारण प्रोग्राम अपवाद उत्पन्न होता है और बैकटेस्ट समाप्त हो जाता है।
जब प्रोग्राम ब्रेकपॉइंट पर रुक जाता है, तो कोड की यह पंक्ति निष्पादित नहीं होती। हम “अगले फ़ंक्शन कॉल में कदम रखें” बटन पर क्लिक करना जारी रखते हैं।

एक्सचेंज पर जाएं.फ़ंक्शन कॉल खरीदें.

ध्यान रखें कि मूल्य एक अपरिभाषित चर है।
उपरोक्त विधि का उपयोग करके, प्रोग्राम बग को चरण दर चरण ढूंढना आसान है। कई गलतियाँ जो नौसिखिए अक्सर करते हैं: उदाहरण के लिए, सरणी अनुक्रमणिकाओं तक सीमा-बाहर पहुंच, अपरिभाषित चरों के संदर्भ, गलत अभिव्यक्ति लेखन, आदि। इस तरह, प्रोग्राम को डीबग करना आसान है।