कनेक्शन में रुकावट और अनुरोध सीमा।
टर्मिनल को API बहाल करे, क्लाइंट को आप संभालें।
Python उदाहरण डाउनलोड करें · PY ↓
चरण-दर-चरण लिखित गाइड
- 0:00
कनेक्शन में रुकावट और अनुरोध सीमा।
इस ट्यूटोरियल में हम MT5 की रुकावटों और अनुरोध सीमा को संभालना सीखेंगे: API की बहाली का इंतज़ार करना, स्ट्रीम फिर शुरू करना और डेटा पढ़ने का अनुरोध सुरक्षित ढंग से दोहराना। हम डेमो खाते के असली जवाब इस्तेमाल करते हैं।
- 0:22
पहले मौजूदा सत्र जाँचें।
mt5.mrpc.pro खोलें। अपनी API कुंजी और सहेजा हुआ टर्मिनल id रखें। रिकॉर्ड किए गए ConnectState जवाब में Connected दिखता है और isConnected, isAlive तथा apiIsAlive, तीनों true हैं। टर्मिनल ठीक है। ब्राउज़र का कनेक्शन टूटने या एक अनुरोध विफल होने का मतलब यह नहीं कि नया टर्मिनल बनाना ज़रूरी है।
- 0:48
अपने आप होने वाली बहाली को समय दें।
MetaRPC टर्मिनल की स्थिति पर नज़र रखता है और योग्य सक्रिय सत्रों को अपने आप बहाल करने की कोशिश करता है। टर्मिनल id वही रहता है। ऐप को प्रभावित काम रोककर सेवा को समय देना चाहिए, न कि बार-बार Reconnect या ConnectEx बुलाना चाहिए। बीच-बीच में स्थिति जाँचें और आगे बढ़ने से पहले AccountSummary से खाते तक पहुँच की पुष्टि करें। बहाली में समय लगता है; हर विफल कॉल के तुरंत बाद यह पूरी नहीं होती।
- 1:22
गलती की वजह के अनुसार कदम उठाएँ।
जानबूझकर डिस्कनेक्ट करना, सत्र समाप्त होना, सेवा निलंबित होना या गलत क्रेडेंशियल—हर स्थिति में सही कार्रवाई चाहिए। बताई गई वजह पढ़ें और ज़रूरत हो तो क्रेडेंशियल बदलें या खाते की समस्या हल करें। Reconnect और ConnectByToken स्पष्ट रूप से बहाली करने के साधन हैं, हर अनुरोध के रीट्राई लूप का हिस्सा नहीं। योग्य सत्र फिर भी उपलब्ध न हो तो काम रोके रखें और सपोर्ट को त्रुटि कोड और समय बताएँ।
- 1:56
ऐप का WebSocket बहाल करें।
टर्मिनल और ऐप का WebSocket दो अलग कनेक्शन हैं। खाते को पढ़ना फिर काम करने लगे तो खराब सॉकेट बंद करें और सहेजे गए id तथा API कुंजी से OnSymbolTick खोलें। अपने सिंबल की सदस्यताएँ फिर शुरू करें। EURUSD के असली संदेशों में bid, ask और समय दिखता है। नया डेटा आने की पुष्टि करें और एक ही स्ट्रीम दो बार न खोलें। ठीक चल रही स्ट्रीम खुली रह सकती है।
- 2:25
असली सीमा वाला जवाब पहचानें।
AccountSummary का यह असली अस्वीकृति जवाब सीमित, केवल पढ़ने वाले परीक्षण से मिला। HTTP Status Code 200 का अर्थ है कि API ने जवाब दिया। error में null के बजाय TERMINAL_RATE_LIMIT_EXCEEDED है और संदेश कहता है कि कॉल नहीं की गई। देखी गई सीमा हर टर्मिनल के लिए पिछली चलती हुई एक मिनट की अवधि में तीन सौ गैर-ट्रेडिंग कॉल थी, जिसे सभी क्लाइंट साझा करते हैं। यह संख्या कोड में स्थायी रखने के बजाय मौजूदा सीमा देखें।
- 3:01
सर्वर के बताए समय तक इंतज़ार करें।
इस जवाब में error.properties के भीतर RetryAfterSeconds नाम की कुंजी और उसका मान 1 है। कम से कम एक सेकंड इंतज़ार करें, फिर थोड़ा यादृच्छिक विलंब जोड़कर पढ़ने का अनुरोध दोहराएँ। उसी टर्मिनल की सीमा साझा करने वाले बाकी वर्कर भी रोकें। फिर अस्वीकृति मिले तो नया प्रतीक्षा समय अपनाएँ। HTTP Status Code 429 में Retry-After हेडर का पालन करें।
- 3:32
काम धीरे-धीरे फिर शुरू करें।
इंतज़ार के बाद असली पढ़ने का अनुरोध सफल हुआ: HTTP Status Code 200, कोई API त्रुटि नहीं और डेमो खाते का डेटा मिला। जमा हुए अनुरोध एक साथ न भेजें। बार-बार चाहिए जानकारी कैश करें, वर्कर के बीच अनुरोध की गति मिलाएँ और लाइव भाव के लिए OnSymbolTick इस्तेमाल करें। अनुरोध सीमा इंतज़ार करने की वजह है, टर्मिनल को फिर कनेक्ट करने की नहीं।
- 4:01
दोहराने के नियम स्पष्ट और सीमित रखें।
साथ दिया Python उदाहरण सिर्फ AccountSummary के लिए है। यह स्पष्ट सीमा या व्यस्त होने वाले जवाब में सही प्रतीक्षा समय मिलने पर ही थोड़ा यादृच्छिक विलंब जोड़कर दोहराता है और तीन कोशिशों के बाद रुकता है। दूसरी त्रुटियाँ कॉल करने वाले को लौटती हैं। क्रेडेंशियल एनवायरनमेंट वेरिएबल में रखें। कनेक्शन रुकने के लिए अलग सीमित नीति रखें; इस रीड हेल्पर को कनेक्शन कमांड या ट्रेडिंग मेथड पर न लगाएँ।
- 4:34
पहले अनिश्चित ट्रेड का परिणाम जानें।
ट्रेडिंग अनुरोध का जवाब खो जाए तो ब्रोकर उसे पहले ही पूरा कर चुका हो सकता है। अपने आप बहाली उस ट्रेड का नतीजा नहीं बताती। पहुँच लौटने पर OpenedOrders और DealsHistory देखें। उपलब्ध ऑर्डर और डील टिकट इस्तेमाल करें और सिंबल, दिशा, मात्रा तथा समय मिलाएँ। मिलते-जुलते ट्रेड भ्रम पैदा कर सकते हैं। अनसुलझा अनुरोध अपने आप फिर भेजने के बजाय रोके रखें।
- 5:05
सत्र सही तरीके से समाप्त करें।
जब जानबूझकर सत्र समाप्त करें, सदस्यताएँ रोकें और Disconnect बुलाएँ। डेमो स्ट्रीम रोक दी गई और टर्मिनल डिस्कनेक्ट हुआ; कोई ट्रेड नहीं बदला गया। याद रखें: योग्य टर्मिनल MetaRPC बहाल करता है, ऐप ज़रूरत पर अपना सॉकेट बहाल करता है, सीमा आने पर इंतज़ार करता है और नया ट्रेड भेजने से पहले अनिश्चित परिणाम स्पष्ट करता है।