पिछले लेखों में, हमने सीखा है कि तथाकथित प्रोग्राम्ड और क्वांटिटेटिव ट्रेडिंग एक स्क्रिप्ट प्रोग्राम है जो ट्रेडिंग के लिए एक्सचेंज खाते को संचालित करने के लिए गणनाओं, निर्णयों और ट्रिगर्स की एक श्रृंखला के बाद एक्सचेंज से प्राप्त डेटा के आधार पर कुछ ऑपरेशन करता है। डेटा प्राप्त करने और खातों को संचालित करने की ये सभी क्रियाएं एक्सचेंज एपीआई इंटरफेस के माध्यम से की जाती हैं। सरल शब्दों में कहें तो यह स्क्रिप्ट प्रोग्राम और एक्सचेंज के बीच की बातचीत है। चूंकि यह एक बातचीत है, इसलिए इसमें सामान्य बातचीत और असामान्य बातचीत होनी चाहिए। जब कोई असामान्य अंतःक्रिया घटित होती है, तो इंटरफ़ेस अपवाद जानकारी लौटाता है।
बेशक, बाजार में उपलब्ध प्रोग्राम्ड और क्वांटिटेटिव ट्रेडिंग सिस्टम या स्वयं-विकसित प्रोग्राम में विभिन्न त्रुटि संकेत और त्रुटि संदेश होंगे। ये त्रुटि संदेश एक्सचेंज API इंटरफ़ेस द्वारा रिपोर्ट किए गए त्रुटि संदेशों तक सीमित नहीं हैं। इसके अलावा कुछ चीजें ऐसी भी हैं जैसे: प्रोग्राम रनटाइम अपवाद त्रुटियाँ, कॉन्फ़िगरेशन त्रुटियाँ, प्रोग्राम सिंटैक्स त्रुटियाँ, आदि।
इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म पर, त्रुटि संदेशों को मोटे तौर पर कई श्रेणियों में विभाजित किया जा सकता है:
कोड में कोष्ठक जैसे वर्णों का अभाव है। इस प्रकार की त्रुटि आमतौर पर नीति संपादन पृष्ठ पर दिखाई देती है, और नीति को चलाया नहीं जा सकता (रनटाइम के दौरान त्रुटि की सीधे रिपोर्ट की जाएगी, जैसा कि नीचे दिए गए चित्र में दिखाया गया है)।
इसलिए रणनीति लिखने के बाद, मैं आदतन प्लेटफ़ॉर्म रणनीति संपादन पृष्ठ पर एक नज़र डालता हूँ, यह देखने के लिए कि क्या कोई छोटा लाल XX है। अगर है, तो कोई स्पष्ट त्रुटि होनी चाहिए।
ऐसी त्रुटियों के कारण प्रोग्राम विफल हो जाएगा और प्रोग्राम चलना बंद हो जाएगा।
FMZ प्लेटफॉर्म पर, ट्रेडिंग जोड़े को समान रूप से परिभाषित किया गया हैX_Y
इस प्रारूप में, X व्यापारिक मुद्रा के नाम का प्रतिनिधित्व करता है, और Y मूल्यवर्गित मुद्रा के नाम का प्रतिनिधित्व करता है (वायदा मुद्रा-आधारित अनुबंध व्यापार जोड़े की मूल्यवर्गित मुद्रा आमतौर पर USD में व्यक्त की जाती है, जिसे पिछले लेखों में पेश किया गया है)। उदाहरण के लिएBTC_USDT
, अगर मैं ट्रेडिंग जोड़ी को यादृच्छिक रूप से लिखता हूं,BTC-USDT
。
FMZ प्लेटफ़ॉर्म बैकटेस्टिंग सिस्टम में त्रुटि रिपोर्ट की गई:
वास्तविक ट्रेडिंग में त्रुटि की रिपोर्ट करें:
इसके अलावा, एक आम गलती जो नये लोग करते हैं:
https://www.fmz.com
इस प्रकार की त्रुटि FMZ प्लेटफ़ॉर्म खाते का पासवर्ड बदलने के कारण होती है, जिसके परिणामस्वरूपAPI KEY
अमान्य (उपयोगकर्ता की API कुंजी ब्राउज़र पर एन्क्रिप्ट की गई है और फिर FMZ प्लेटफ़ॉर्म पर कॉन्फ़िगर की गई है), रणनीति शुरू नहीं की जा सकती है, और एक त्रुटि की सूचना दी जाती है।
रणनीतियों को चलाते समय अक्सर इंटरफ़ेस कॉल त्रुटियाँ सामने आती हैं। पिछले लेखों में, हमने सीखा कि FMZ प्लेटफ़ॉर्म पर इंटरफ़ेस को विभाजित किया गया हैनेटवर्क अनुरोध उत्पन्न करने के लिए इंटरफ़ेस、इंटरफ़ेस जो नेटवर्क अनुरोध उत्पन्न नहीं करता है. इंटरफ़ेस त्रुटियों के कारण नीति कार्यक्रम बंद नहीं होगा। यह आमतौर पर इंटरफ़ेस कॉल अपवाद के कारण होता है, जो गलत डेटा लौटाता है। तब नीति में दोष सहिष्णुता नहीं होती है, और गलत डेटा के कारण होने वाली प्रोग्राम अपवाद त्रुटि के कारण कार्यक्रम बंद हो जाता है (दोष सहनशीलता की अवधारणा पर पिछले लेखों में चर्चा की जा चुकी है)।
यहां कुछ इंटरफ़ेस त्रुटि संदेश दिए गए हैं जो नेटवर्क अनुरोध उत्पन्न करते हैं:
नेटवर्क टाइमआउट
एक त्रुटि संदेश जो नये उपयोगकर्ताओं को अक्सर मिलता है, वह है घरेलू नेटवर्क डिवाइस (अपने स्वयं के कंप्यूटर या घरेलू सर्वर) का उपयोग करना। चूंकि अधिकांश एक्सचेंज अवरुद्ध हैं, इसलिए कई एक्सचेंज मूलतः घरेलू नेटवर्क से पहुंच योग्य नहीं हैं, तथा एक्सेस इंटरफेस टाइमआउट की रिपोर्ट करेगा। (पिछले लेखों में उल्लेखित)
http 429 त्रुटि
https://www.fmz.com
क्लासिक त्रुटि संदेशों में से एक। इसका कारण यह है कि एक्सचेंज इंटरफ़ेस को बहुत बार कॉल किया जाता है, जो एक्सचेंज की आवृत्ति सीमा को पार कर जाता है। (पिछले लेखों में उल्लेखित)
कुछ नये छात्र कह सकते हैं कि, मैं और अधिक आदान-प्रदान के लिए आवेदन करूंगा।API KEY
या फिर मैं कुछ और एक्सचेंज खातों के लिए आवेदन कर सकता हूं। हमें यह जानना होगा कि एक्सचेंज आमतौर पर आईपी पते के आधार पर इंटरफ़ेस एक्सेस आवृत्ति को सीमित करते हैं। सरल शब्दों में कहें तो, जब तक किसी आईपी पते से भेजे गए सभी अनुरोधों को इस आईपी पते पर गिना जाता है, अगर सीमा पार हो जाती है, तो एक्सचेंज सर्वर एक्सेस से इनकार कर देगा। इस आईपी पते द्वारा भेजा गया अनुरोध..
एक्सचेंज इंटरफ़ेस व्यवसाय स्तर पर त्रुटि रिपोर्टिंग
ऊपर उल्लिखित टाइमआउट और 429 नेटवर्क-स्तरीय त्रुटियाँ हैं। यदि एक्सचेंज इंटरफ़ेस व्यवसाय स्तर पर समस्याएँ होती हैं, तो त्रुटियाँ भी रिपोर्ट की जाएँगी। उदाहरण के लिए, मैं स्पॉट कोट प्राप्त करना चाहता हूँ, लेकिन मैंने एक ट्रेडिंग जोड़ी सेट की है जो मौजूद नहीं है। मैंने इसे FMZ प्लेटफ़ॉर्म के डिबगिंग टूल में परीक्षण किया। डिबगिंग टूल एक बहुत ही सुविधाजनक परीक्षण उपकरण है, जो फ़ंक्शन कॉल, डेटा अधिग्रहण और अन्य आवश्यकताओं के वास्तविक समय के परीक्षण के लिए बहुत उपयुक्त है।
डिबगिंग टूल के निष्पादन परिणाम और वास्तविक निष्पादन के बीच कोई अंतर नहीं है।
Huobi 错误 GetTicker: Invalid ticker: {"Info":{"err-code":"invalid-parameter","err-msg":"invalid symbol","status":"error","ts":1620872079355},"High":0,"Low":0,"Sell":0,"Buy":0,"Last":0,"Volume":0,"OpenInterest":0,"Time":0}
यहां त्रुटि संदेश का अर्थ है कि लेनदेन युग्म अमान्य है (जैसा कि यहां देखा जा सकता है)"err-msg":"invalid symbol"
)。
उदाहरण के लिए, इस तरह की कई व्यावसायिक-संबंधित त्रुटियाँ हैं। उदाहरण के लिए, लीवरेज सेट करते समय, कुछ एक्सचेंज दशमलव भागों के साथ लीवरेज मान का समर्थन नहीं करते हैं। इस समय, यदि लीवरेज मान में दशमलव भाग होता है, तो यह भी एक कारण होगा इंटरफ़ेस कॉल त्रुटि.
उस इंटरफ़ेस कॉल की सूची बनाएं जो नेटवर्क अनुरोध उत्पन्न नहीं करता है
वायदा अनुबंध कोड सेट करें कुछ इंटरफेस सिस्टम में केवल कुछ वैश्विक चर सेट करते हैं और नेटवर्क अनुरोध उत्पन्न नहीं करते हैं, उदाहरण के लिए:
हालाँकि, यदि पैरामीटर गलत तरीके से पास किए गए हों या यादृच्छिक रूप से लिखे गए हों तो त्रुटियाँ उत्पन्न होंगी।
हालाँकि, चाहे त्रुटि किसी भी प्रकार की हो, प्रदर्शित त्रुटि संदेश ही समस्या का पता लगाने के लिए महत्वपूर्ण जानकारी है, और समस्या को आमतौर पर त्रुटि संदेश से पहचाना जा सकता है। आप त्रुटि संदेशों का अनुवाद करने और महत्वपूर्ण जानकारी निकालने के लिए अनुवाद टूल का उपयोग कर सकते हैं। उदाहरण के लिए, उपरोक्त उदाहरण में"err-msg":"invalid symbol"
, अनुवाद: “err msg”: “अमान्य प्रतीक”। आप शायद जानते होंगे कि ट्रेडिंग जोड़ी सेटिंग्स गलत हैं, क्योंकि ट्रेडिंग कोड और ट्रेडिंग जोड़े को दर्शाने के लिए आमतौर पर अंग्रेजी प्रतीकों का उपयोग किया जाता है।
हम त्रुटि जानकारी पर संक्षेप में चर्चा करेंगे। एक पोस्ट है जो क्वेरी के लिए सामान्य प्रश्नों को एकत्रित करना जारी रखेगी: https://www.fmz.com/bbs-topic/1427
बैकटेस्टिंग सिस्टम भी क्वांटिटेटिव टूल में एक महत्वपूर्ण बिंदु है। बैकटेस्टिंग सिस्टम रणनीति प्रोटोटाइप का आसानी से परीक्षण कर सकता है और रणनीति में संभावित बग और तार्किक समस्याओं का प्रारंभिक परीक्षण कर सकता है। हमें बैकटेस्टिंग प्रणाली के बारे में तर्कसंगत होना होगा। बैकटेस्टिंग प्रणाली एक निश्चित सीमा तक रणनीति की कुछ समस्याओं को प्रतिबिंबित कर सकती है।
नीचे हम FMZ द्वारा समर्थित विभिन्न रणनीति भाषाओं के परिप्रेक्ष्य से FMZ प्लेटफॉर्म पर बैकटेस्टिंग प्रणाली की संक्षेप में व्याख्या करेंगे। (बैकटेस्टिंग प्रणाली का कुछ परिचय पिछले लेखों में दिया गया था)
ब्राउज़र-साइड बैकटेस्ट स्थानीय हार्डवेयर संसाधनों का उपयोग करता है।
किसी कस्टोडियन पर बैकटेस्टिंग करते समय, आप चुन सकते हैं कि किस कस्टोडियन को आवंटित करना है (या तो आपका अपना कस्टोडियन या FMZ प्लेटफॉर्म का सार्वजनिक कस्टोडियन)। FMZ प्लेटफ़ॉर्म पर सार्वजनिक कस्टोडियन पर भारी लोड को देखते हुए, बैकटेस्टिंग के लिए स्थानीय कस्टोडियन का उपयोग करने की सिफारिश की जाती है (यह तेज़ भी होगा। सार्वजनिक कस्टोडियन के साथ बैकटेस्टिंग करते समय, जब लोड से अधिक कार्य होते हैं, तो कुछ बैकटेस्टिंग कार्य रद्द कर दिए जाएंगे, जिसके परिणामस्वरूप बैकटेस्टिंग (मापन में रुकावट) होगी।
स्क्रिप्टिंग भाषाओं के विपरीत, C++ नीतियों को निष्पादित करने से पहले उन्हें संकलित करने की आवश्यकता होती है। C++ भाषा रणनीति को पहले FMZ प्लेटफॉर्म (सर्वर) पर संकलित किया जाएगा (यदि कोड में कोई समस्या है, तो संकलन विफल हो सकता है और एक त्रुटि संदेश पॉप अप होगा)। संकलन के बाद, FMZ प्लेटफॉर्म (सर्वर) पर बैकटेस्ट करें।
अंतर्निहित कार्यान्वयन जावास्क्रिप्ट है, और बैकटेस्टिंग भी ब्राउज़र की ओर से किया जाता है।
अंतर्निहित कार्यान्वयन जावास्क्रिप्ट है, और बैकटेस्टिंग भी ब्राउज़र की ओर से किया जाता है।
इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म के बैकटेस्टिंग सिस्टम में दो बैकटेस्टिंग मोड हैं (यह एक रणनीति भाषाओं के बीच अंतर नहीं करता है, यह एक बैकटेस्टिंग सेटिंग्स है, और विभिन्न भाषाओं में रणनीति बैकटेस्टिंग समान है)।
बैकटेस्टिंग सिस्टम पर निर्देशों के लिए, कृपया प्लेटफ़ॉर्म ट्यूटोरियल में दी गई जानकारी देखें:
https://www.fmz.com/bbs-topic/4158#%E7%AD%96%E7%95%A5%E5%9B%9E%E6%B5%8B
K线中一根柱子不是有高开低收么,构成了一个价格框架,在这个K线代表的时间范围内,价格都在这个价格框架内,所以只要生成的价格在这个K线高开低收框架范围内,这个模拟出来的价格就是合理的。
चित्र में दिखाए गए अनुकरण की तरह: https://www.fmz.com बेशक, जब वास्तविक बैकटेस्टिंग सिस्टम इस सिमुलेशन को लागू करता है, तो स्थिति चित्र में दिखाए गए से थोड़ी अधिक जटिल होती है। हम यहाँ इस पर विस्तार से नहीं जाएँगे। सिमुलेशन-स्तर बैकटेस्टिंग तंत्र को समझना ही पर्याप्त है। इस सिद्धांत को जानते हुए, हमें सिमुलेशन-स्तर बैकटेस्टिंग के नुकसानों पर ध्यान देने की आवश्यकता है, हालांकि सिमुलेशन-स्तर बैकटेस्टिंग बहुत तेज़ है (क्योंकि सिमुलेशन द्वारा उत्पन्न मूल्य एक-एक सेकंड में जारी वास्तविक मूल्य नहीं हैं)। लेकिन अगर रणनीति फिट बैठती हैनकली टिक परिवर्तन प्रवृत्तिइससे रणनीति बहुत अच्छा प्रदर्शन करेगी (लेकिन वास्तविक स्थितियों में कीमत इस तरह से नहीं बढ़ेगी, हालांकि कीमत इस K-लाइन कॉलम के ढांचे के भीतर है)। नकली टिक डेटा उत्पन्न करने के लिए उपयोग की जाने वाली K-लाइन को अंतर्निहित K-लाइन कहा जाता है, और इस K-लाइन की अवधि को कहा जाता हैनिचला K-लाइन चक्र, इसे नीति सेटिंग पृष्ठ में दिखाए अनुसार सेट करें:
यहां 1 मिनट की सेटिंग का अर्थ है कि 1 मिनट की अवधि वाले K-लाइन डेटा का उपयोग सिम्युलेटेड टिक्स उत्पन्न करने के लिए डेटा स्रोत के रूप में किया जाता है।
एक अन्य बिंदु यह है कि उच्च आवृत्ति रणनीतियों के लिए, सिमुलेशन-स्तरीय बैकटेस्टिंग का उपयोग करना स्पष्ट रूप से उचित नहीं है। हालाँकि, प्रवृत्ति रणनीतियों के लिए, सिमुलेशन-स्तरीय बैकटेस्टिंग का उपयोग अभी भी एक निश्चित सीमा तक रणनीति के प्रदर्शन को प्रतिबिंबित कर सकता है।
इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म बैकटेस्टिंग सिस्टम के लिए डेटा कहां से आता है? बैकटेस्टिंग सिस्टम डिफ़ॉल्ट रूप से FMZ प्लेटफ़ॉर्म के डेटा सेंटर से डेटा का उपयोग करता है। FMZ प्लेटफ़ॉर्म का डेटा सेंटर स्वचालित रूप से प्रत्येक एक्सचेंज से प्रत्येक मुद्रा का बाज़ार डेटा एकत्र करता है और इसे प्लेटफ़ॉर्म पर बैकटेस्टिंग सिस्टम को प्रदान करता है।
FMZ API दस्तावेज़ में कस्टम डेटा स्रोतों के बारे में कुछ निर्देश भी दिए गए हैं: https://www.fmz.com/api#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%95%B0%E6%8D%AE%E6%BA%90
FMZ लाइब्रेरी में कुछ समाधान भी हैं:
जो नये लोग इसमें रुचि रखते हैं वे इसका अध्ययन कर सकते हैं और इसका संदर्भ ले सकते हैं।
प्रोग्रामेटिक और क्वांटिटेटिव ट्रेडिंग अविभाज्य हैअध्ययन、परीक्षा、सोचना。 आप शून्य में समस्याओं के बारे में नहीं सोच सकते, यह अकुशल होगा। समस्याओं को सुलझाने और उनके बारे में सोचने का सबसे प्रभावी तरीका हैसूचना पाओ,तबखुद कोशिश करना、सोच विश्लेषणयदि समस्या हल नहीं होती है तो कृपया उपरोक्त चरणों को दोहराएं।
लेकिन आमतौर पर जब किसी नौसिखिये को कोई समस्या आती है, तो वह महसूस करता है:
“ओह~ प्रोग्रामिंग, क्वांटिफिकेशन और रणनीति लेखन बहुत कठिन हैं।” “मैं इसे काफी समय से देख रहा हूं, लेकिन मैं अभी भी उलझन में हूं!” “मैंने अभी तक शुरुआत नहीं की है और मैं हार मानना चाहता हूँ!” ….
FMZ प्लेटफॉर्म पर शुरुआत करना वास्तव में बहुत आसान है। सबसे पहले, आपको जानकारी खोजने में कुशल होना चाहिए। इन्वेंटर क्वांटिटेटिव ट्रेडिंग प्लेटफॉर्म स्ट्रैटेजी प्लाजा, समुदाय और लाइब्रेरी में संदर्भ के लिए बहुत सारी जानकारी उपलब्ध है।
फिर व्यावहारिक क्षमता है। बैकटेस्टिंग सिस्टम और डिबगिंग टूल का उपयोग करके परीक्षण को सुविधाजनक बनाया जा सकता है। इसका मतलब पूरी रणनीति का परीक्षण करना नहीं है। वास्तव में, यदि आपके पास बिल्कुल भी बुनियादी ज्ञान नहीं है, तो आप FMZ मात्रात्मक बैकटेस्टिंग सिस्टम पर जावास्क्रिप्ट प्रोग्रामिंग की मूल बातें भी सीख सकते हैं।
यह ट्यूटोरियल वेबसाइट है जहां मैं अक्सर JS सीखता हूं: https://www.runoob.com/js/js-loop-for.html यह JS तक सीमित नहीं है, सभी प्रकार के आईटी ज्ञान को यहां खोजा और सीखा जा सकता है। उदाहरण के लिए, मुझे नहीं पता कि JS की नियमित अभिव्यक्ति का उपयोग कैसे किया जाए, मुझे क्या करना चाहिए? बेशक, पहले जानकारी की जांच करें, और फिर इसे आज़माएं~
मैंने ऐसा एक उदाहरण देखा:
मैं इसका परीक्षण करना चाहता हूं, और परीक्षण करने और सीखने के लिए मैं FMZ प्लेटफॉर्म की बैकटेस्टिंग प्रणाली का भी उपयोग कर सकता हूं।
बैकटेस्ट सिस्टम पर यादृच्छिक रूप से एक्सचेंज सेट करें
निम्नलिखित कोड का परीक्षण करें:
function IsEmail(str) {
var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
return reg.test(str);
}
function main() {
var strEmailAddress1 = "13512345678"
Log(strEmailAddress1, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress1))
var strEmailAddress2 = "123456789@qq.com"
Log(strEmailAddress2, " 是邮件地址么 ? ", " 回答:", IsEmail(strEmailAddress2))
}
देखो, यह कितना बढ़िया शिक्षण उपकरण है! उदाहरण के लिए, मैं सीखना चाहता हूं कि जावास्क्रिप्ट में लूप लॉजिक कैसे लिखा जाता है, तो चलिए इसे आज़माते हैं:
सरणी चर के तत्वों को उस क्रम में लूप करें जिस क्रम में वे सरणी में दिखाई देते हैं:
function main() {
var arr = [{coinName: "BTC", price: 10000}, {coinName: "LTC", price: 100}, {coinName: "ETH", price: 2000}, {coinName: "ETC", price: 500}]
for (var i = 0 ; i < arr.length ; i++) {
Log(arr[i])
}
}
क्या आप तुरंत अध्ययन करने के लिए प्रेरित महसूस करते हैं? वास्तव में, FMZ पर, आप बैकटेस्टिंग सिस्टम पर जावास्क्रिप्ट की मूल बातें सीखते समय जावास्क्रिप्ट ट्यूटोरियल देख सकते हैं। जावास्क्रिप्ट सिंटैक्स में लगभग महारत हासिल है। अगले चरण में प्रवेश करने के लिए, आपको परीक्षण के लिए डेटा प्राप्त करने के लिए एक्सचेंज इंटरफ़ेस का उपयोग करना होगा। आप FMZ प्लेटफ़ॉर्म का भी उपयोग कर सकते हैंडिबगिंग उपकरणवास्तविक इंटरफ़ेस परीक्षण करें.
फिर आपको अधिक सोचने, एक उदाहरण से निष्कर्ष निकालने, परीक्षण और सत्यापन करने, तुलना और विश्लेषण आदि करने की आवश्यकता होती है। इस तरह आप बहुत जल्दी काम शुरू कर सकते हैं।