सामान्य तौर पर, यह केवल एक बार है जब आप अपने डिवाइस को रीसेट करने के लिए अपने डिवाइस को रीसेट करते हैं।Log()
इस प्रकार का डीईबीयूजी बहुत कम कुशल होता है, और प्रोग्राम टेस्टिंग में कम अनुभव वाले नए लोगों के लिए कुछ कठिनाई होती है।JavaScript
भाषा के लिए रणनीतिक डीबगिंगChrome
ब्राउज़रों में बेहतर समर्थन है. आप रिट्रीट के समय ब्रेक-पॉइंट डिबगिंग, एकल-चरण डिबगिंग, चर-मूल्य निगरानी, अभिव्यक्ति निगरानी आदि कर सकते हैं. तो चलिए हम एक साथ सीखते हैं कि FMZ पर इस तरह का उपयोग कैसे किया जाए।Javascript
भाषा की नीति को पुनः परीक्षण करते समय DEBUG करें. ध्यान दें, FMZ पर केवलJavascript
भाषा की रणनीतियाँ इस तरह के डिबगिंग के तरीके का समर्थन करती हैं।
debugger
निर्देशएफएमजेड पर जावास्क्रिप्ट भाषा के लिए नीति कोड में सम्मिलित करें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"}]
*/
जैसा कि आप देख सकते हैं कि हमने जो एक्सचेंज जोड़े हैं, वे बिनेंस (Binance) हैं, जो स्क्रीनशॉट के रूप में कॉन्फ़िगर किए गए हैंः
और हम देख सकते हैं कि क्या हम कर रहे हैं.var t = exchange.GetTicker()
इस वाक्य के नीचे हम लिखते हैंdebugger
एक निर्देश, यहाँ एक विराम चिह्न लगाने के बराबर है, और कार्यक्रम को इस स्थान पर निष्पादित करने के लिए बंद कर दिया जाएगा।debugger
हालाँकि, यह अनुशंसा नहीं की जाती है कि आप ऐसा करें, बस एक स्थान पर एक ब्रेक डालें, और बाद के ब्रेक को ब्राउज़र के DevTools डिबगिंग फ़ंक्शन में सेट किया जा सकता है।
पहले क्रोम ब्राउज़र खोलें।DevTools
फिर से परीक्षण करें, नीति कोड में सेटdebugger
अगर यह लागू नहीं होता है, तो यह बहुत बुरा होगा।debugger
अनदेखा किया जाएगा, और पुनः परीक्षण की गई नीति कार्यक्रम को रोक नहीं सकता है; ब्रेक के स्थान पर रोकें; खोलें।DevTools
एक बार नीति को रीसेट करने के बाद, नीति कार्यक्रम को पहले सेट पर रोक दिया जाता हैdebugger
स्थान,debugger
यह रणनीति कोड के वैश्विक दायरे में भी सेट किया जा सकता है।
हम इसे खोलते हैं, क्रोम ब्राउज़रDevTools
यह दो तरह का उपकरण है:
एक, हम पेज के पॉपअप मेनू को खोलने के लिए दाएं क्लिक करें
हम "जाँचें" पर क्लिक करते हैं और DevTools इंटरफ़ेस दिखाई देता है।
2. शॉर्टकट का उपयोग करें
आप इसे खोलने के लिए एक शॉर्टकट का उपयोग कर सकते हैं।Command+Option+I (Mac)
याControl+Shift+I(Windows、Linux)
खोलेंDevTools
。
खोलेंDevTools
इसके बाद कुछ ऐसा हुआः
फिर ऊपर दिए गए परीक्षण में, जब हम क्लिक करते हैं "प्रारंभ रीसेट" बटन रीसेट नीति के कारण कोड में सेट हैdebugger
आदेश, नीति के लिए एक उचित स्थान पर रुकावट का इंतजार करें. पुनः परीक्षण एक तरह से अटक गया है, जैसा कि नीचे चित्रित किया गया हैः
आप देख सकते हैं, रणनीतियों मेंdebugger
विराम के स्थान को चिह्नित करें, पूरे कार्यक्रम ने केवल n असाइनमेंट को 1 के रूप में निष्पादित किया, t असाइनमेंट को 1 के रूप मेंGetTicker
फ़ंक्शन द्वारा लौटाए जाने वाले लेनदेन डेटा. ऊपर दिए गए चित्र में लाल बॉक्स में विशिष्ट चर के मान देखे जा सकते हैं, जिससे यह देखना आसान हो जाता है कि प्रत्येक चर का मूल्य क्या है जब नीति चल रही है.
हम कोड के बाईं ओर पंक्ति संख्या पर क्लिक कर सकते हैं और विराम चिह्न जोड़ सकते हैं।
"resume script execution" पर क्लिक करके स्क्रिप्ट को फिर से चलाएं, प्रोग्राम अगले ब्रेक तक चलेगा, और यदि कोई ब्रेक नहीं है या प्रोग्राम में कोई त्रुटि है जो असामान्यता का कारण बनती है, तो पुनः परीक्षण समाप्त हो जाएगा।
इसके अलावा, कुछ बटन भी लागू किए जा सकते हैंः अगले फ़ंक्शन को छोड़ें, अगले फ़ंक्शन कॉल पर जाएं, वर्तमान फ़ंक्शन कॉल को छोड़ दें, एक-चरण निष्पादित करें, सभी विराम चिह्नों को अनदेखा करें आदि।
इस समय, जब हम "resume script execution" बटन पर क्लिक करते रहते हैं, तो नीति कार्यक्रम में एक असामान्य घटना होती है, जो एक असामान्य त्रुटि संदेश प्रिंट करती है।
main:17:31 - TypeError: Cannot convert "undefined" to double
यह एक आम गलती है जो नए लोगों द्वारा की जाती है, एक संरचनात्मक विशेषता के नाम के लिए बड़े आकार का कोई अंतर नहीं है।
var id = exchange.Buy(t.buy, 0.1) // 下买单,此处有错误,会报错,返回null,GetTicker返回数据t,只有Buy属性,没有buy属性。
导致传入exchange.Buy函数的价格是一个undefined变量,引起程序异常,回测结束。
जब प्रोग्राम ब्रेक पॉजिशन पर रुकता है, तो इस लाइन का कोड निष्पादित नहीं होता है. हम "step into next function call" बटन पर क्लिक करते हैं.
跳转到exchange.Buy函数调用中。
कीमत को एक अपरिभाषित चर के रूप में देखें।
उपरोक्त विधि का उपयोग करके, प्रोग्राम BUG का पता लगाने के लिए कदम-दर-चरण करना आसान है। कई शुरुआती लोग अक्सर गलतियाँ करते हैंः जैसे कि सरणी के सूचकांक का उपयोग सीमा पार करना, अपरिभाषित चर का हवाला देना, अभिव्यक्ति लेखन में त्रुटि, आदि। इस तरह से प्रोग्राम को डीबग करना आसान है।
fmzeroबेडरूम, क्या यह काम करता है, 666?