मैटलैब - subplot स्थिति आकार में विदेशी मुद्रा


नोट: यह समस्या मेरे मामले में 2016b में होती है। मैं 3x4 सबप्लॉट्स के साथ एक आंकड़ा बनाने की कोशिश करता हूं, केवल बाएं और नीचे सबप्लॉट पर टिक लेबल के साथ। हालांकि, जब मैं नीचे कोड चलाता हूं, पहली साजिश का आकार बदलने लगता है: ध्यान दें कि मैं मुद्रण स्थिति में हूं पहले सबप्लॉट के लिए आउटपुट है, लेकिन जब मैं पहली बार सबप्लॉट की स्थिति को दोहराता हूं। इसके अलावा, मैंने बाद में पहले सबप्लॉट की स्थिति में हेरफेर करने की कोशिश की है, लेकिन यह केवल इसे और भी बदतर बनाता है, नीचे देखें: सभी मदद की सराहना की है मेटाट्रेडर 5 - उदाहरण मेटाट्रेडर 5 और मैटलप इंटरेक्शन परिचय मेरी पहली आलेख मेटाट्रेडर 4 और मैटैब इंजन (वर्चुअल MATLAB) के बीच इंटरेक्शन मशीन) एमक्यूएल समुदाय द्वारा देखा गया था कुछ पाठकों (1Q2W3E4R5T) भी इस परियोजना को Borland से VS2008 तक ले जाने में सक्षम थे। लेकिन समय समय पर निरंतर आगे बढ़ता है और (दुख की बात है लेकिन सच है) मेटाट्रेडर 4 गायब हो रहा है, इसके उत्तराधिकारी मेटाट्रेडर 5 को MQL5 के साथ दिया गया है, जो कि शुरू की गई पॉइंटर्स और डायनामिक मेमोरी है। इन नवाचारों के लिए धन्यवाद, हमारे पास MATLAB इंजन आभासी मशीन के साथ इंटरैक्शन की एक सार्वभौमिक पुस्तकालय, और मेटाट्रेड 5 के साथ, पुस्तकालयों को सीधे लिंक करने का अवसर है। यह लेख इस तरह की कार्यक्षमता को शामिल करता है। यह लेख तार्किक रूप से पिछले और अधिक अच्छी तरह से जारी रहता है मेटाटैपर 5 और MATLAB के बीच बातचीत की समस्या को पूरी तरह से कवर करता है। अप्रभावी पाठकों के लिए इस लेख का दायरा अधिक समझ में आता है, हम इसे तीन भागों में विभाजित करेंगे: सिद्धांत, संदर्भ और अभ्यास सिद्धांत MQL5 और MATLAB में उपयोग किए गए डेटा के प्रकार, साथ ही साथ उनके पारस्परिक रूपांतरण को कवर करेगा। संदर्भ में आप भाषाई संरचनाओं और कार्यों के वाक्यविन्यास सीखेंगे, जो एक DLL बनाने के लिए आवश्यक है। और अभ्यास में हम इस बातचीत के नुकसान का विश्लेषण करेंगे। अनुभवी पाठक सिद्धांत और संदर्भ को छोड़ सकते हैं, और अभ्यास से शुरू कर सकते हैं। दूसरों को थ्योरी और संदर्भ पढ़ने का आग्रह किया जाता है, और केवल तभी प्रैक्टिस करना जारी रखें। इसके अलावा साहित्य विभाग में उल्लेखित पुस्तकों को पढ़ने के लिए इसके लायक है। 1.1 MATLAB और MQL5 में डेटा प्रकार 1.1.1 सरल डेटा प्रकार सबसे पहले, हमें MQL5 और MATLAB के भीतर की दुनिया से परिचित होने की आवश्यकता है। चर प्रकारों के perfunctory निरीक्षण के बाद, हम निष्कर्ष निकालते हैं कि वे लगभग समान हैं: तालिका 1. MATLAB और MQL5 में डेटा प्रकार एक बड़ा अंतर है: MQL5 में चर सरल या समग्र (जटिल) हो सकते हैं, और MATLAB में सभी चर बहुआयामी हैं (जटिल) - अर्थात मैट्रिक्स आपको इस अंतर के बारे में हमेशा याद रखना चाहिए 1.1.2 कॉम्प्लेक्स डेटा प्रकार इन MQL5 में 4 जटिल प्रकार के डेटा हैं: सरणियां, स्ट्रिंग्स, संरचनाएं और कक्षाएं। जटिल डेटा प्रकार कई सरल डेटा प्रकारों का सेट होता है, जो कुछ निश्चित लंबाई के स्मृति ब्लॉक में जोड़ता है। जब आप इस तरह के डेटा से निपटते हैं तो आपको हमेशा बाइट्स में स्मृति ब्लॉक आकार, या तत्वों की संख्या (कक्षाओं को छोड़कर) को जानने की आवश्यकता होती है। हम केवल सरणियों और तारों में रुचि रखते हैं क्योंकि MATLAB को कक्षाओं और MQL5 संरचनाओं को प्रस्तुत करना कोई मतलब नहीं है। जब किसी भी प्रकार के सरणियों को गुजरते हुए आपको पता होना चाहिए: प्रकार (आयाम) और अर्रेसिज़ () फ़ंक्शन का उपयोग करने वाले तत्वों की संख्या मेटाट्रेडर 5 में इंडेक्सिंग के लिए विशेष ध्यान दिया जाना चाहिए - आमतौर पर यह पीछे की ओर है (यानी पहला एलील अगले डेटा की तुलना में अधिक हालिया होता है)। ArrayIsSeries () फ़ंक्शन का उपयोग करके इसे जांचें। और MATLAB में निम्नलिखित इंडेक्सिंग है: प्रथम तत्व में अगले डेटा की तुलना में पुराने डेटा शामिल है - इसलिए आपको अपने एआरएर् को MATLAB में भेजने से पहले रिवर्स करना चाहिए, यदि फ़्लैग एसेरीज़ TRUE है। उपर्युक्त के आधार पर, निम्नलिखित से सहमत हो सकता है: MQL5-प्रोग्राम्स के लिए अदृश्य रूप से रिवर्स एरे, चार प्रकार के एरे और 2-आयामी arrays को छोड़कर - उन्हें अपरिवर्तित छोड़ दें। MATLAB से अदृश्य रूप से सभी सरणियों को रिवर्स करें और एआरईईआरआईआई ध्वज को सच के साथ आवंटित करें, इसके अलावा चार प्रकार के कक्षों और 2-आयामी arrays को छोड़ दें - उन्हें अपरिवर्तित छोड़ दें। पीछे की इंडेक्सेशन के अनुसार बनाई गई MQL5-program में प्रत्येक सरणी में, एसरिएज फ्लैग सच होना चाहिए, इसके अलावा चार प्रकार के कक्षों और 2-आयामी arrays को छोड़कर - उन्हें अपरिवर्तित छोड़ दें। लेकिन सरणी के साथ काम करते समय यह केवल एकमात्र सीमा नहीं है। जब आप बहुआयामी arrays के साथ काम करते हैं, या अधिक सटीक होने के लिए मैट्रिक्स, विशेष रूप से MATLAB से, हम 2 से अधिक आयामी arrays के लिए प्रतिबंध का परिचय देते हैं। यहां ASSERIES झंडा सही नहीं हो सकता, और इसलिए ऐसे एरेज़ उलट नहीं किए जाते हैं। भूल न रखें कि MQL5 में तार चार प्रकार के तत्वों का सरणु नहीं हैं। तो जब स्ट्रिंग गुजरती है तो थोड़ी समस्या आती है: एमक्यूएल 5 तार में यूनिकोड का इस्तेमाल करते हुए एनकोड किया जाता है, और MATLAB ANSI एन्कोडिंग का उपयोग करता है। इससे पहले कि आप एक स्ट्रिंग पास करें, इसे स्ट्रिंगटोचाअरा () फ़ंक्शन का उपयोग करके एएनएसआई अक्षरों के सरणी में परिवर्तित किया जाना चाहिए। और इसके विपरीत, जब आप MATLAB से अक्षरों का सरणी प्राप्त करते हैं, तो उसे चारअरे टॉस्ट्रिंग () फ़ंक्शन (तालिका 2 देखें) का उपयोग करके परिवर्तित करें। भ्रम से बचने के लिए, सहमति दें: यूनिकोड के उपयोग से MQL5 कार्यक्रमों में सभी तारों को स्टोर करें, चार प्रकार के कोई सरणियों का उपयोग नहीं करें। 1.2 MQL5 और MATLAB डेटा प्रकार की तुलना कार्य की मात्रा को कम करने और पुस्तकालय एल्गोरिदम को सरल बनाने के लिए, हम स्वचालित रूपांतरण के माध्यम से प्रकार की मात्रा को कम कर देंगे, जो डेटा की अखंडता को प्रभावित नहीं करना चाहिए। निम्न तालिका MQL5 से MATLAB में डेटा प्रकार रूपांतरण का नियम दिखाती है: इस प्रकार के रूपांतरण के साथ सटीकता की हानि होती है। हम इसका उपयोग नहीं करेंगे, लेकिन आप अपने कार्यक्रमों में ऐसे रूपांतरण का उपयोग कर सकते हैं। तालिका 2. MQL5 और MATLAB डेटा प्रकार की तुलना अब आप MQL5 और MATLAB में प्रयुक्त डेटा प्रकार से परिचित हैं। आप जानते हैं कि डेटा से गुज़रने में क्या नुकसान हो रहे हैं और उन्हें कैसे दक्षतापूर्वक बायपास करना है आपको अभी भी MATLAB इंजन एपीआई को जानना होगा और MATLAB कंपाइलर 4 से परिचित होना होगा। 2. MATLAB इंजन एपीआई संदर्भ, MATLAB कंपाइलर 4 संदर्भ और सी इनपुट आउटपुट लाइब्रेरी संदर्भ यह खंड आपको MATLAB इंजन एपीआई के सबसे महत्वपूर्ण कार्यों के लिए परिचय देता है, MATLAB कंपाइलर की सुविधाएँ 4 और सी मानक इनपुटआउटपुट पुस्तकालय के उपयोगी कार्यों की संख्या। तो, शुरू करना शुरू करें 2.1 MATLAB इंजन एपीआई और एमसीआर फ़ंक्शन MATLAB इंजन - बाहरी इंटरफ़ेस है जो मैटैट डेस्कटॉप का उपयोग करने के लिए अन्य कार्यक्रमों को सक्षम करता है। यह बिना किसी प्रतिबंध के सभी MATLAB पैकेजों का एक पूर्ण कार्यात्मक कार्य प्रदान करता है। यद्यपि यह दस्तावेज़ीकरण में नहीं कहा गया है, बल्कि सिस्टम प्रोग्रामर के संदर्भ में - यह सिर्फ वर्चुअल मशीन है, जैसे कि PHP, MySQL, आदि, जो कि मेटाट्रेडर 45 और मैटलबैबल के बीच डेटा एक्सचेंज करने के लिए सरल और अपेक्षाकृत त्वरित तरीके का समर्थन करता है। मैटैब पैकेज के साथ बाहरी कार्यक्रमों को जोड़ने का यह तरीका डेवलपर्स द्वारा अनुशंसित है। इंटरफ़ेस में छह फ़ंक्शन होते हैं: इंजिन पिंग इंगओपन (नल) इस फ़ंक्शन को MATLAB डेस्कटॉप कहते हैं, पैरामीटर हमेशा नल है, डेस्कटॉप डिस्क्रिप्टर के लिए एक सूचक देता है इंट एक्स्टेक्टेड कोड्स एग्क्लोज़ (इंजिन पिंग) यह फ़ंक्शन डेस्कटॉप बंद कर देता है, MATLAB डेस्कटॉप के शेष उपयोगकर्ताओं की संख्या देता है, जहां: इंजन डिस्क्रिप्टर को पॉइंट सूचक इंजन MxArray mxVector mxCreateDoubleMatrix (int m, int n, int ComplexFlag) यह फ़ंक्शन MATLAB डेस्कटॉप का एक चर (मैट्रिक्स) बनाता है, चर (मैट्रिक्स) के लिए एक सूचक देता है, जहां: मैक्सट्रेटर एमएक्सएक्वेक्टर पॉइंटर से मैट्रिक्स वैरिएबल। पंक्तियों की संख्या int int n कॉलम की संख्या मेटाट्रेडर 45 मैक्स्रेल के लिए कॉम्प्लेक्स फ्लैग टाइप ऑफ कॉम्प्लेक्स नंबर शून्य mxDestroyArray (mxArray mxVector) यह फ़ंक्शन MATLAB मैट्रिक्स को नष्ट कर देता है, यह मेमोरी को रिक्त करने के लिए आवश्यक है, जहां: मैक्सट्रेटर mxVector पॉइंटर से मैट्रिक्स वैरिएबल। int engPutVariable (इंजन पिंग, चार नाम, MxArray mxVector) यह फ़ंक्शन डेस्कटॉप को वैरिएबल भेजता है। आपको न केवल एमएक्सएरे प्रकार के चर बनाने चाहिए, बल्कि उन्हें MATLAB को भी भेजना चाहिए, जहां: इंजन डिस्क्रिप्टर को पॉइंट सूचक इंजन। char MATLAB डेस्कटॉप में चार प्रकार के नाम का चर नाम। MxArray mxVector पॉइंटर मैट्रिक्स चर में। MxArray mxVector engGetVariable (इंजन पिंग, चार नाम) यह फ़ंक्शन डेस्कटॉप से ​​चर हो जाता है - पिछले फ़ंक्शन के व्युत्क्रम। MxArray प्रकार के केवल चर स्वीकार किए जाते हैं, जहां: MxArray mxVector पॉइंटर से मैट्रिक्स वैरिएबल। इंजन सूचक विवरणकर्ता को पॉइंट सूचक। char MATLAB डेस्कटॉप में चार प्रकार के नाम का चर नाम। डबल पी एमएक्सगेटपीआर (एमएक्सएआरआरए एमएक्सएक्टक्टर) इस फ़ंक्शन को सरणी के सरणी के सूचक होते हैं, इसका इस्तेमाल मेम्कपी () () के साथ डेटा को कॉपी करने के लिए किया जाता है (2.3 सी मानक इनपुट आउटपुट लाइब्रेरी देखें), जहां: दोहरे प्रकार के सरणी के लिए डबल पी पॉइंटर। MxArray mxVector पॉइंटर मैट्रिक्स चर में। int engEvalString (इंजन पिंग, चार कमांड) यह फ़ंक्शन मैटलॉग डेस्कटॉप पर कमांड भेजता है, जहां: इंजन डिस्क्रिप्टर को पॉइंट सूचक इंजन। MAT MATLAB के लिए कमांड कमांड, चार प्रकार की स्ट्रिंग आपने शायद देखा कि MATLAB इंजन एपीआई आपको केवल डबल प्रकार के लिए एमएक्सएरेरे संरचना बनाने की अनुमति देता है। लेकिन यह प्रतिबंध आपकी संभावनाओं को प्रभावित नहीं करता है, लेकिन आपके पुस्तकालय के एल्गोरिथ्म को प्रभावित करेगा। एमसीआर (एमसीआर उदाहरण) मैटलप पैकेज की विशेष पुस्तकालय है, जो किसी भी कंप्यूटर पर मैटलॉग पर्यावरण द्वारा उत्पन्न स्टैंडअलोन अनुप्रयोगों सार्वजनिक पुस्तकालयों को चलाने में सक्षम बनाता है। ध्यान दें, भले ही आपके पास एक पूर्ण MATLAB पैकेज है, तो आपको अभी भी MCRnstaller. exe फ़ाइल चलाने के द्वारा एमसीआर पुस्तकालय स्थापित करने की आवश्यकता है, जो कि ltMATLABgtToolboxcompilerdeploywin32 फ़ोल्डर में स्थित है। इसलिए, MATLAB पर्यावरण के द्वारा बनाई गई किसी भी सार्वजनिक पुस्तकालय फ़ंक्शन को कॉल करने से पहले, आपको एमसीआर आरंभीकरण फ़ंक्शन कॉल करना होगा: bool mclInitializeApplication (const char विकल्प, int count) यदि TRUE सफल होता है, तो अन्यथा गलत, जहां: const char विकल्प स्ट्रिंग विकल्प, जैसे एमसीसी - आर में आम तौर पर नल इंटेग साइज विकल्प स्ट्रिंग, आमतौर पर 0. सार्वजनिक पुस्तकालय काम समाप्त होने पर आपको कॉल करना होगा: bool mclTerminateApplication (शून्य) TRUE देता है यदि MCR सफलतापूर्वक बंद हो जाता है 2.2 MATLAB कंपाइलर 4 MATLAB कम्पाइलर आपको एम-फ़ंक्शन से निम्नलिखित बनाने की सुविधा देता है: MATLAB स्थापित नहीं होने पर भी चलने वाले स्टैंडअलोन अनुप्रयोग। सीसी शेयर लाइब्रेरीज़, जो अंत उपयोगकर्ता प्रणालियों पर MATLAB के बिना इस्तेमाल किया जा सकता है। कंपाइलर MATLAB के अधिकांश आदेशों और संकुलों का समर्थन करता है, लेकिन सभी नहीं। प्रतिबंधों की पूरी सूची MATLAB वेबसाइट पर पाई जा सकती है। इस पद्धति से आपको मेटाट्रेडर 5 और मैटलबॉफ्ट के सॉफ्टवेयर-स्वतंत्र बंडल बनाने की सुविधा मिलती है, लेकिन MATLAB इंजन के विपरीत, एक अच्छी तरह से प्रशिक्षित प्रोग्रामर और संकलन के गहन ज्ञान की आवश्यकता होती है। MATLAB कंपाइलर को निम्न सीसी कम्पाइलर में से कम से कम एक की आवश्यकता है: एलसीसी सी (आमतौर पर MATLAB के साथ आता है) इसकी केवल सी संकलक बोर्लैंड सी संस्करण 5.3, 5.4, 5.5, 5.6। माइक्रोसॉफ्ट विज़ुअल सीसी संस्करण 6.0, 7.0, 7.1 MATLAB कंपाइलर 4, अपने पूर्ववर्तियों के विपरीत, केवल इंटरफ़ेस कोड (रैपर) उत्पन्न करता है, यानी एम-फ़ंक्शन को बाइनरी या सीसी कोड में नहीं अनुवाद करता है, लेकिन यह घटक प्रौद्योगिकी फ़ाइल (सीटीएफ) तकनीक पर आधारित एक विशेष फ़ाइल बनाता है, जिसमें शामिल है एम-फ़ंक्शंस का समर्थन करने के लिए आवश्यक विभिन्न संकुलों का एकीकरण MATLAB कंपाइलर इस फ़ाइल को अनन्य (अपरिवर्तित) 1024-बिट कुंजी के साथ भी एन्क्रिप्ट करता है। अब MATLAB कंपाइलर 4 के एल्गोरिथ्म पर विचार करें, क्योंकि इस विषय की अज्ञानता को संकलन समय पर कई बेवकूफ गलतियां मिलेंगी: इस स्तर पर निर्भरता विश्लेषण सभी कार्यों, मेक्स-फाइलों और पी-फाइलों को निर्धारित करता है, जो संकलित एम-फ़ंक्शंस पर निर्भर होते हैं । संग्रह बनाना - सीटीएफ-फाइल बनाई गई है, इसे एन्क्रिप्टेड और संपीड़ित किया गया है। इस स्तर पर ऑब्जेक्ट कोड आवरण का निर्माण सभी स्रोत कोड बनते हैं, घटक के लिए आवश्यक: कमांड लाइन (NameFilemain. c) में निर्दिष्ट एम-फ़ंक्शन के लिए सीसी इंटरफ़ेस कोड। घटक फ़ाइल (NameFilecomponent. dat), जिसमें एम-कोड (एन्क्रिप्शन कुंजी और पथ, जिसमें सीटीएफ-फाइल में संग्रहीत है) को लागू करने के लिए आवश्यक सभी जानकारी शामिल है। सीसी अनुवाद इस स्तर पर सीसी स्रोत कोड फ़ाइलों को ऑब्जेक्ट फाइलों में संकलित किया जाता है। लिंक करना। परियोजना के निर्माण का अंतिम चरण अब, जब आप MATLAB कम्पाइलर एल्गोरिदम व्यवहार से परिचित होते हैं, तो आप कम्पाइलर (एमसीसी) का उपयोग करते समय कार्यों की एक विस्तृत योजना बनाने के लिए चाबियाँ के बारे में अधिक जानने के लिए होते हैं: तालिका 4. मेटलैब एमबिल्ड लिंकर (संस्करण 4) कुंजी तालिका 4 सूचियां मुख्य चाबियाँ अधिक जानकारी के लिए मदद mbuild या doc mbuild कमांड का उपयोग करें 2.3 सी मानक इनपुट आउटपुट लाइब्रेरी मानक इनपुट आउटपुट लाइब्रेरी के उपयोग से सही डेटा प्रतिलिपि प्रदान करता है। इसका उपयोग आपको बेवकूफ त्रुटियों से बचाएगा जो प्रोग्राम डिज़ाइन चरण के दौरान उठता है (उदाहरण के लिए: कई नौसिखिया प्रोग्रामर पूरे मेमोरी ब्लॉक की प्रतिलिपि बनाने के बजाय केवल मेमोरी ब्लॉक में पॉइंटर कॉपी करते हैं)। संपूर्ण इनपुट आउटपुट लाइब्रेरी से हम केवल एक फ़ंक्शन में दिलचस्पी रखते हैं: शून्य पीआईएन मेम्क्पी (शून्य पिन, शून्य पॉएट, इंट एनएसइज़बाइट) इस फंक्शन की प्रतियां (क्लोन) एनरिज्यूइट बाइट्स के आकार के साथ पीओयूटी से पीएआई के लिए, कॉपी करने के लिए कहां शून्य को पॉइंट को सरणी में, जिसमें से कॉपी किया जाता है। इंट नोड कॉपी किए गए डेटा का आकार, पीएआई सरणी के आकार से अधिक नहीं होना चाहिए, अन्यथा मेमोरी एक्सेस त्रुटि हो जाएगी। 3. अभ्यास करें अब हम सिद्धांत के साथ काम कर रहे हैं और हम मेटाट्रेडर 5 एएमपी MATLAB इंटरैक्शन की प्राप्ति के साथ आगे बढ़ सकते हैं। जैसा कि आपने शायद अनुमान लगाया, यह दो तरीकों से किया जाएगा: MATLAB इंजन आभासी मशीन का उपयोग करना और MATLAB कंपाइलर द्वारा उत्पन्न पुस्तकालयों का उपयोग करना। सबसे पहले, MATLAB इंजन के माध्यम से एक साधारण, तेज और बहुमुखी तरीके से बातचीत का विचार करें। आलेख के इस भाग को शुरू से अंत तक पढ़ा जाना चाहिए, जैसा कि, बातचीत के तरीकों के बीच में अंतर होने के बावजूद, उनके पास एक दर्शन और भाषा निर्माण के परिचित सिंटैक्स हैं और सरल उदाहरणों के साथ कुछ नया सीखना आसान है। 3.1 मेटाट्रेडर 5 एपी के यूनिवर्सल लाइब्रेरी का विकास करना एमटीएलपी इंटरेक्शन इंटरैक्शन इस इंटरैक्शन की पद्धति को तेज और तेज कहा जा सकता है, लेकिन यह सबसे विश्वसनीय है और संपूर्ण मैटलप पैकेज को कवर करता है। बेशक, हमें अंतिम मॉडल विकास की गति का उल्लेख करना चाहिए। विकास का सार मेटा ट्रेडर 45 amp के लिए सार्वभौमिक लाइब्रेरी-आवरण लिखना है MATLAB इंजन इंटरैक्शन। मेटाट्रेडर 45 स्क्रिप्ट इंडिकेटर एक्सपेरट के बाद मैटल वर्चुअल डेस्कटॉप का प्रबंधन कर सकते हैं। और पूरे गणितीय एल्गोरिथ्म को MQL-program में स्ट्रिंग के रूप में संग्रहित किया जा सकता है, इसलिए आप अपनी बौद्धिक संपदा की रक्षा के लिए इसका उपयोग कर सकते हैं (अधिक जानकारी के लिए खुद को सुरक्षित रखें, डेवलपर्स लेख देखें) इसे एम-फ़ंक्शंस या पी-फ़ंक्शन में अलग-अलग फाइलों को लेफ्टमैट ट्रेडर 5gtMQL5 लाइब्रेरीज़ फ़ोल्डर में संग्रहीत किया जा सकता है। इस तरह के इंटरैक्शन के आवेदन के संभावित क्षेत्र: जटिल कार्यक्रम लिखने के बिना गणितीय मॉडलिदैस का परीक्षण या प्रदर्शित करने के लिए (बौद्धिक संपदा की सुरक्षा को एमक्यूएल कार्यक्रम के रूप में और पी-फ़ंक्शन का उपयोग करके MATLAB पैकेज के माध्यम से व्यवस्थित किया जा सकता है)। MATLAB की सभी विशेषताओं का उपयोग करके जटिल गणितीय मॉडल लिखने के लिए उन सभी के लिए जो अपनी स्क्रिप्ट इंडिकेटरएक्सार्ट्स को वितरित नहीं करने जा रहे हैं आगे बढ़ें मुझे आशा है कि आपने MATLAB और MQL5 में 1.1 डेटा प्रकार पढ़े हैं। 1.2 MQL5 और MATLAB डाटा प्रकार की तुलना। 2.1 MATLAB इंजन एपीआई और एमसीआर कार्य और 2.3 सी मानक इनपुट आउटपुट लाइब्रेरी अनुभाग, क्योंकि हम उन्हें और नहीं रोकेंगे और उनका विश्लेषण करेंगे। निम्नलिखित ब्लॉक-स्कीम को सावधानीपूर्वक पढ़ें, जो कि भविष्य की पुस्तकालय के एल्गोरिदम को दर्शाता है: चित्रा 1। पुस्तकालय एल्गोरिथ्म की ब्लॉक-योजना जैसा कि चित्र 1 में देखा गया है, पुस्तकालय में तीन मुख्य ब्लॉकों होते हैं उनके उद्देश्यों पर विचार करें: MQL5 ब्लॉक, प्रेषित डेटा की प्रारंभिक तैयारी: रिवर्स एरेज़ प्रकार रूपांतरण तार एन्कोडिंग रूपांतरण सीसी ब्लॉक: एमएक्सएरेरे संरचना में सरणी परिवर्तित करता है। MATLAB इंजन कमांड पास करता है MATLAB इंजन ब्लॉक गणना प्रणाली अब, एल्गोरिदम के साथ सौदा करने देता है। अच्छी तरह से MQL5 ब्लॉक के साथ शुरू सावधानीपूर्वक पाठक ने पहले ही गौर किया है कि यह MATLAB और MQL5 अनुभाग में डेटा प्रकारों में लिखा गया था के कार्यान्वयन पर ध्यान केंद्रित करेगा। यदि आप इसे भूल गए हैं, तो आप शायद ही समझ पाएंगे कि यह सब क्यों आवश्यक है MlInput ltvariabletypegt फ़ंक्शन का एल्गोरिथ्म लगभग समान है। MlInputDouble () फ़ंक्शन जो MATLAB वर्चुअल मशीन में डबल प्रकार के चर का इनपुट प्रदान करता है का उपयोग करके उसके कार्य पर चर्चा करें। bool mlInputDouble (डबल amparray, int sizeArray, स्ट्रिंग NameArray)। जहां: डबल प्रकार के चर या सरणी के लिए सरणी संदर्भ। आकार अर्रे सरणी आकार (तत्वों की संख्या, बाइट्स नहीं)। नामअरे स्ट्रिंग, जिसमें MATLAB वर्चुअल मशीन के लिए अद्वितीय चर नाम है (नाम MATLAB आवश्यकताओं के अनुरूप होना चाहिए)। StringToCharArray () फ़ंक्शन का उपयोग करके चार सरणी के लिए नामअरेरे स्ट्रिंग को कनवर्ट करें। ArrayIsSeries () फ़ंक्शन का उपयोग करके अनुक्रमण के प्रकार की जांच करें। यदि अनुक्रमण का प्रकार mlxInputDouble () फ़ंक्शन के लिए सामान्य पास मान है I टाइमरीज सरणी के ELSE अनुक्रमण: रिवर्स सरणी और पास मान को mlxInputDouble () फ़ंक्शन। समापन समारोह, वापस लौटाए गए मान को mlxInputDouble () फ़ंक्शन पर रखें। एमएलजीटी एलटीवायरियलेबल टाइप की फंक्शन का एल्गोरिदम भी लगभग समान है। MlGetDouble () फ़ंक्शन का उपयोग करके इसके कार्य पर चर्चा करें, जो MATLAB वर्चुअल मशीन से दोहरे प्रकार के चर को देता है। int mlGetDouble (डबल amparray, int sizeArray, स्ट्रिंग NameArray)। जहां: डबल प्रकार के चर या सरणी के लिए सरणी संदर्भ। आकार अर्रे सरणी आकार (तत्वों की संख्या, बाइट्स नहीं)। NameArray स्ट्रिंग, जिसमें MATLAB वर्चुअल मशीन के लिए अनन्य चर नाम है। StringToCharArray () फ़ंक्शन का उपयोग करके चार सरणी के लिए नामअरेरे स्ट्रिंग को कनवर्ट करें। MlxGetSizeOfName () फ़ंक्शन का उपयोग करके सरणी का आकार ढूंढें। अगर आकार शून्य से अधिक है ArrayResize () फ़ंक्शन का उपयोग करके आवश्यक आकार के प्राप्तकर्ता सरणी को आवंटित करें, mlxGetDouble () का डेटा प्राप्त करें रिटर्न सरणी आकार यदि आकार शून्य है। वापसी त्रुटि, अर्थात् शून्य मान। यह है कि mlGetInt () और mlGetLogical () फ़ंक्शंस दो प्रकार के रूपांतरण के लिए - gt intbool का उत्पादन करते हैं। इस प्रयोजन के लिए ये कार्य उनके शरीर में एक अस्थायी स्मृति बफर बनाते हैं। यह एक मजबूर उपाय है, क्योंकि दुर्भाग्यवश MATLAB API दोहरे के अलावा अन्य डेटा प्रकारों के लिए mxArray संरचनाओं को बनाने की अनुमति नहीं देता है हालांकि, इसका यह अर्थ नहीं है कि MATLAB केवल दो प्रकार के प्रकारों को संचालित करता है। सीसी ब्लॉक काफी आसान है - इसे दो प्रकार से डेटा अनुवाद को एमएक्सएरेरे संरचना में प्रदान करना चाहिए। यह mxCreateDoubleMatrix () का उपयोग करके किया जाता है mxGetPr () और memcpy () कार्य इसके बाद, एंप्लिपिवरीबल () फ़ंक्शन का उपयोग करके यह डेटा MATLAB वर्चुअल मशीन से गुजरता है, और डेटा को निकालने के लिए इसे एंजेगेटिवारायबल () फ़ंक्शन का उपयोग करता है। दोबारा, ब्लॉक-स्कीम में दिखने वाले उपसर्गों के साथ कार्य करने पर ध्यान देना, वे सीधे MATLAB के साथ बातचीत नहीं करते हैं, लेकिन mlxInputDoublemlxGetDouble और mlxInputChar () कार्यों का उपयोग करते हैं उनके व्यवहार का एल्गोरिथ्म सरल है: mlxInputDoublemlxGetDouble फ़ंक्शन इनपुटआउटपुट मान को डबल () के रूप में कॉल करें और mlxInputChar () फ़ंक्शन के माध्यम से डेटा प्रकार को कनवर्ट करने के लिए छाया MATLAB कमांड भेजें। MATLAB इंजन ब्लॉक भी आसान है। यह केवल गणितीय फ़ंक्शन प्रदान करता है। इसका व्यवहार आपके आदेशों और आपके एमपी फ़ंक्शंस पर निर्भर करता है। अब, जब परियोजना के सभी विवरण स्पष्ट होते हैं, परियोजना के निर्माण से निपटने के लिए इसका समय। ऐसा कोई निर्माण हमारे मामले में मुख्य पुस्तकालय के निर्माण से शुरू होता है, यह सीसी ब्लॉक है इस प्रयोजन के लिए, किसी भी एएनएसआई-टेक्स्ट एडिटर (नोटपैड, ब्रेड, आदि) में डीईएफ एक्सटेंशन के साथ एक फाइल बनाइए। यह वांछनीय है कि इस फ़ाइल का नाम में कोई रिक्त स्थान और विराम चिह्न नहीं है, अन्यथा आप अपने कंपाइलर से कई चापलूसी शब्द सुनेंगे। यह फ़ाइल आपके कार्यों की स्थायित्व प्रदान करती है अगर यह फाइल अनुपस्थित है, तो सीसी संकलक कार्यों को निर्यात करने के लिए अपने विदेशी नामों का आविष्कार करेगा। इस फ़ाइल में शामिल हैं: लाइब्रेरी कंट्रोल वर्ड, लाइब्रेरी का लिबिलएजिन नाम, और एक्सपोर्ट्स दूसरे कंट्रोल शब्द, फिर फ़ंक्शन के नाम आते हैं। जैसा कि आप शायद जानते थे, निर्यात कार्यों के नामों में रिक्त स्थान और विराम चिह्न नहीं होते हैं। MATLABEngine. zip संग्रह से DllUnit. def फ़ाइल का टेक्स्ट यहां दिया गया है: LIBRARY LibMlEngine EXPORTS mlxClose mlxInputChar mlxInputDouble mlxInputInt mlxInputLogical mlxGetDouble mlxGetInt mlxGetLogical mlxGetSizeOfName mlxOpen इसलिए, हमारे पास परियोजना की पहली फ़ाइल है। अब विंडोज एक्सप्लोरर खोलें और ltMATLABgtExterninclude फ़ोल्डर में जाएं। फ़ोल्डर में engine. h फ़ाइल (MATLAB वर्चुअल मशीन की हेडर फाइल) की प्रतिलिपि बनाएँ, जहां आप प्रोजेक्ट बनाया गया है (यदि आप ऐसा नहीं करते हैं, तो आपको संकलन के स्तर पर फ़ाइल को मैन्युअल रूप से निर्दिष्ट करने के लिए पथ निर्दिष्ट करना होगा)। अब सीसी ब्लॉक बनाने का समय है हम लेख में पूरे स्रोत कोड प्रोग्राम को शामिल नहीं करेंगे, क्योंकि यह फ़ाइल MATLABEngine. zip में DllUnit. cpp के रूप में पाई जा सकती है और यह अच्छी तरह से टिप्पणी की गई है। ध्यान दें कि stdcall कन्वेंशन का उपयोग कर कार्यों को बेहतर बनाने के लिए, i. e. मानकों को स्टैक के माध्यम से पारित किया जाता है, और फ़ंक्शन स्टैक को साफ करता है। यह मानक Win3264 API के लिए मूल है। कैसे एक समारोह घोषित करने पर विचार करें: extern सी declspec (dllexport) ltvariabletypegt stdcall फ़ंक्शन (lttypegt ltnamegt) extern सी declspec (dllexport) सी संकलक बताता है कि फ़ंक्शन बाहरी है। लौटी चर के ltvariabletypegt प्रकार, हो सकता है: शून्य, बूल, इंट, डबल संमिश्र प्रकार (केवल डीएलएल के लिए नहीं, बल्कि कॉलिंग कार्यक्रम के लिए भी जाना जाता है) और पॉइंटर्स। फ़ंक्शन और वापस करने के लिए मानकों को पारित करने के बारे में stdcall घोषणा, यह Win3264 API के लिए एक मानक है। Funcion अपने फ़ंक्शन का नाम Lttypegt ltnamegt प्रकार और इनपुट चर का नाम, अधिक संख्या में चर 64 है। सीसी ब्लॉक निर्माण: इसके लिए आपको मानक इनपुटआउटपुट पुस्तकालय शामिल करने और निम्नलिखित फाइलों को प्रोजेक्ट करने की आवश्यकता है (अपने कंपाइलर में: प्रोजेक्ट - gtAdd प्रोजेक्ट): DllUnit. def LtMATLABgtExternlibltwin3264gtltcompilergt फ़ोल्डर में, जहां: ltMATLABgt MATLAB मुख्य फ़ोल्डर। ltwin3264gt या तो 32-बिट OS के लिए Win32 फ़ोल्डर, या 64-बिट ओएस के लिए win64 Borland सीसी देखें के लिए Borland फ़ोल्डर ltcompilergt। 5-6, माइक्रोसॉफ्ट विज़ुअल सी के लिए माइक्रोसॉफ्ट फ़ोल्डर: libeng. lib libmx. lib इस तरह से एक सामान्य प्रश्न उत्पन्न हो सकता है: मेरे पास संकलक का अलग संस्करण है या सूची में ऐसा कोई संकलक नहीं है (बहुत कम ही ऐसी कोई फ़ाइलें नहीं हैं)। देखते हैं कि मैन्युअल रूप से सार्वजनिक लाइब्रेरी कैसे बनाएं। हम विचार करेंगे कि इसके दृश्य सी में और बोरेलैंड सी में क्या किया गया है: एफएआर ओपन एलटीएमटब्लैगब्लंटविंडो 3264 जीटी फ़ोल्डर में, जहां: एलटीएमएटीएलएलगैग MATLAB मुख्य फ़ोल्डर। ltwin3264gt या तो 32-बिट OS के लिए Win32 फ़ोल्डर, या 64-बिट ओएस के लिए win64 Borland सी के लिए दर्ज करें: implib libeng. lib libeng. dll। Libmx. dll के लिए एक ही है विजुअल सी के लिए दर्ज करें: lib libeng. dll। Libmx. dll के लिए एक ही है यदि अन्य कंपाइलर किसी भी प्रोग्रामिंग भाषा के किसी भी कंपाइलर में यह उपयोगिता होनी चाहिए - लाइब्रेरी प्रबंधक, आमतौर पर यह एक कंसोल प्रोग्राम ltcompiler foldergtbinlib. exe है। वैसे, मैं आपको चेतावनी देने में भूल गया - 32-बिट कंपाइलर के लिए 64-बिट LIB बनाने की कोशिश न करें सबसे पहले, पता करें कि क्या संकलक सहायता में 64-बिट एड्रेसिंग समर्थन है। यदि नहीं, तो 32-बिट MATLAB DLL की तलाश में या किसी अन्य सीसी संकलक का चयन करें। संकलन करने के लिए नीचे जा रहे हैं, इसके बाद हमें एक लाइब्रेरी मिलती है, जिसे टर्मिनलफ़ोल्डर MQL5 लाइब्रेरीज़ फ़ोल्डर में रखा जाना चाहिए। अब एमक्यूएल ब्लॉक से शुरु करें। मेटाएडिट चलाएं, नया क्लिक करें और निम्नलिखित आंकड़ों के अनुसार करें: चित्रा 2. MQL5 विज़ार्ड: लाइब्रेरी बनाएं चित्रा 3. MQL5 विज़ार्ड: लाइब्रेरी के सामान्य गुण अब, जब विज़ार्ड MQL5 ने एक टेम्पलेट बनाया है, तो उसके संपादन के लिए आगे बढ़ें: नोट करें कि MQL 5 आप पॉइंटर्स दो तरीकों से पारित कर सकते हैं: शून्य नामअरेरे सरणी से गुजरने की यह विधि केवल डेटा को पढ़ने के लिए अनुमति देता है। हालांकि, अगर आप अपनी सामग्री को संपादित करने के लिए इस संदर्भ का उपयोग करने की कोशिश करते हैं, तो आपको मेमोरी एक्सेस त्रुटि मिलेगी (आपके लिए सबसे अच्छे मामले में, मेटाट्रेडर 5 चुपचाप सीएच-फ्रेम में त्रुटि को संभाल देगा, लेकिन हमने एक एसईएच फ़्रेम लिखना है, इसलिए हम भी त्रुटि के कारण याद कर सकते हैं)। voidamp NameArray पासिंग की यह विधि आपको सरणी सामग्री को पढ़ने और संपादित करने की अनुमति देती है, लेकिन आपको सरणी आकार को बनाए रखना होगा। यदि फ़ंक्शन पैरामीटर स्वीकार या नहीं करता है, तो हमेशा शून्य प्रकार निर्दिष्ट करें। 2. हम MQL ब्लॉक के सभी कार्यों का वर्णन नहीं करते, क्योंकि आप MATLABEngine. zip में MatlabEngine. mq5 स्रोत कोड पा सकते हैं। इसलिए, MQL5 में बाह्य कार्यों की घोषणा और परिभाषा के विवरण पर अच्छी तरह से विचार करें: उदाहरण में देखा गया है, समारोह की घोषणा और परिभाषा संयुक्त है। इस मामले में, हम mlInputChar नामक समारोह को बाह्य (निर्यात) के रूप में घोषित करते हैं, जो bool प्रकार का मान देता है और पैरामीटर के रूप में सरणी स्ट्रिंग को स्वीकार करता है। अब संकलन करें अब जब हमने पुस्तकालय के अंतिम ब्लॉक को पूरा कर लिया है और इसे संकलित किया है, तो वास्तविक समय में इसका परीक्षण करने का समय है। ऐसा करने के लिए, एक साधारण परीक्षण स्क्रिप्ट लिखें (या इसे MATLABEngine. zip से लें, फ़ाइल: TestMlegngine. mq5)। स्क्रिप्ट कोड सरल और अच्छी तरह से टिप्पणी की गई है: जैसा कि स्क्रिप्ट से देखा गया है, हम मूल्यों को दर्ज कर रहे हैं, और फिर मूल्य प्राप्त करें। हालांकि, मेटाट्रेडर 4 के विपरीत, जहां हमें डिज़ाइन चरण में बफर के आकार को जानने की जरूरत थी, मेटाट्रेडर 5 में इसकी आवश्यकता नहीं है, क्योंकि हम गतिशील बफ़र्स का उपयोग करते हैं। अब जब आप MATLAB वर्चुअल मशीन को समझते हैं, तो आप मैटलप पर्यावरण में निर्मित DLL का इस्तेमाल कर सकते हैं। 3.2 MATLAB कंपाइलर द्वारा उत्पन्न डीएलएल के निर्माण के तकनीकी दिशानिर्देश पिछले अनुभाग में आपने सीखा है कि MATLAB पैकेज के साथ सार्वभौमिक संपर्क के लिए एक पुस्तकालय कैसे बनाया जाए। हालांकि, इस विधि में एक खामी है - इसे अंतिम उपयोगकर्ता से MATLAB पैकेज की आवश्यकता है। यह प्रतिबंध समाप्त सॉफ़्टवेयर उत्पाद के वितरण में कई कठिनाइयों का निर्माण करता है। यही वजह है कि MATLAB गणितीय पैकेज में एक अंतर्निर्मित कंपाइलर है, जो आपको मल्टीपल एप्लीकेशन से स्वतंत्र मल्टीपल एप्लीकेशन बनाने की अनुमति देता है। चलो इसे देखो। उदाहरण के लिए, एक साधारण सूचक-चलती औसत (एसएमए) पर विचार करें। एक न्यूरल नेटवर्क फ़िल्टर (जीआरएनएन) को जोड़कर इसे थोड़ा-सा नवीनीकृत करें, जो सफेद शोर (बेतरतीब फटने) को चिकना करने की अनुमति देता है। नए सूचक को NeoSMA के रूप में नाम दें, और GRNNFilter के रूप में फ़िल्टर करें। इस प्रकार हमारे पास दो एम-फ़ंक्शन हैं, जिनमें से हम एक डीएलएल बनाना चाहते हैं, जिसे मेटाट्रेडर 5 से कहा जा सकता है। अब याद रखें कि निम्नलिखित फ़ोल्डर्स में मेटाट्रेडर 5 खोजों से फोल DLLs: ltterminaldirgtMQL5Libraries ltterminaldirgt वर्तमान फ़ोल्डर सिस्टम फ़ोल्डर ltwindowsdirgtSYSTEM32 ltwindowsdirgt निर्देशिका में सूचीबद्ध सिस्टम वातावरण चर PATH इसलिए, इन निर्देशिकाओं में से किसी एक में दो एम-फ़ंक्शन (NeoSMA. m और GRNNFilter. m) को रखें, जहां हम डीएलएल का निर्माण करेंगे। मैं नियुक्ति के इस तथ्य पर अपना ध्यान आकर्षित करता हूं, क्योंकि यह दुर्घटना से नहीं किया जाता है। सावधानीपूर्वक पाठक पहले से ही MATLAB संकलक सुविधा को जानता है - यह संकलन करते समय पथ को संरक्षित करता है (देखें 2.2 MATLAB संकलक 4)। इससे पहले कि आप प्रोजेक्ट संकलित करना शुरू करें, आपको कंपाइलर को कॉन्फ़िगर करना होगा ऐसा करने के लिए, इन चरणों का पालन करें: MATLAB कमांड लाइन में दर्ज करें: mbuild - setup प्रेस को अपने सिस्टम में स्थापित सीसी संगत कंपाइलर्स की खोज की पुष्टि करें। मानक Lcc-win32 C संकलक चुनें चयनित कंपाइलर की पुष्टि करने के लिए y दबाएं चित्रा 4. परियोजना प्रसंस्करण अब हम एम-फ़ंक्शंस संकलन प्रक्रिया में जाने के लिए तैयार हैं। mcc - n - w lib: NeoSMA - T लिंक: lib NeoSMA. m GRNNFilter. m कुंजी को समझाओ: - N सभी अनावश्यक पथ को छोड़ने के लिए - W lib: NeoSMA कंपाइलर कहता है कि NeoSMA लाइब्रेरी- T लिंक का नाम है: lib बताता है संकलक, NeoSMA. m और GRNNFilter. m m-functions नामों को जोड़ने के साथ सार्वजनिक पुस्तकालय बनाने के लिए अब, देखें कि कंपाइलर ने क्या बनाया है: mccExcludedFiles. log लॉग-फाइल जिसमें कंपाइलर कार्रवाइयां होती हैं, लाइब्रेरी के NeoSMA. c सी संस्करण में (आवरण का कोड) NeoSMA. ctf CTF फ़ाइल (2.2 MATLAB संकलक 4 देखें) खंड NeoSMA. H हैडर फ़ाइल (लाइब्रेरीज़, फ़ंक्शंस, स्थिरांक की घोषणाएं) NeoSMA. obj ऑब्जेक्ट फ़ाइल (मशीन और छद्म कोड वाले स्रोत फ़ाइल) NeoSMA. exports निर्यात किए गए कार्य नामों NeoSMA। डीओएल डीएलएल को सीओ परियोजनाओं में उपयोग करने के लिए आगे NeoSMA. lib Dll को जोड़ने के लिए घटक (सीटीएफ-फाइल के अनुपालन के लिए प्रयोग किया जाता है, पथ, आदि शामिल हैं) NeoSMAmcccomponentdata. c सी संस्करण घटक के NeoSMAmcccomponentdata. obj ऑब्जेक्ट संस्करण (मशीन और छद्म युक्त स्रोत फ़ाइल कोड) तो बुद्धि को संभाल देता है एच डीएलएल, ठीक इसके आंतरिक संरचना के साथ। इसमें (मूल कार्य केवल) से होते हैं: किसी भी DLL का मुख्य कार्य - BOOL WINAPI DllMain ()। जो (माइक्रोसॉफ्ट विनिर्देश के मुताबिक) डीएलएल में होने वाली घटनाओं का संचालन करता है: डीएलएल लोड हो रहा है, प्रक्रिया के स्थान में लोड हो रहा है, एक नई स्ट्रीम बना रहा है, धारा को हटाने और डीएलएल को स्मृति से अनलोड करता है। डीएलएल आरंभीकरण के कार्यान्वयन के कार्य सेवा पुस्तकालय कार्यों का उपयोग करने से पहले और उनके उपयोग के अंत में मॉल कार्य वातावरण शुरू करने के लिए BOOL ltNameLibgtInitialize (शून्य) शून्य एलटीएनमलिबगटटिर्नेट (शून्य) की आवश्यकता होती है। निर्यात किए गए एम-फ़ंक्शन शून्य mlfltNameMfilegt (int ltnumberofreturnvaluesgt, mxArray ltreturnvaluesgt, mxArray ltinputvaluesgt।), जहां: लौटा चर की संख्या एलटीएनम्बरओफ़रेटर्नव्यूल्ट (सरणी आकार, आदि के साथ भ्रमित न करें)। MxArray ltreturnvaluesgt mxArray संरचना का पता है जहां m - फ़ंक्शन के परिणाम वापस आयेगा। mxArray ltinputvaluesgt mxArray m-function इनपुट चर की संरचना के लिए संकेतक जैसा कि आप देख सकते हैं, निर्यात एम-फ़ंक्शंस में एमएक्सएरेरे संरचना के पते और पॉइंटर्स होते हैं, और आप सीधे मेटा ट्रेडर 5 से इन कार्यों को कॉल नहीं कर सकते, क्योंकि यह इस प्रकार के डेटा को नहीं समझेगा। हम मेटाट्रेडर 5 में एमएक्सएरेरे संरचना का वर्णन नहीं करते, क्योंकि MATLAB डेवलपर्स यह गारंटी नहीं देते हैं कि यह समय के साथ उत्पाद के एक ही संस्करण के भीतर भी नहीं बदलेगा, इसलिए आपको एक सरल DLL-adapter लिखना होगा। इसकी ब्लॉक-स्कीम नीचे दिखायी गई है: चित्रा 5. डीएलएल-एडेप्टर ब्लॉक-स्कीम यह मैटलॉग इंजिन के लिए डीएलएल के दाहिने हिस्से के समान है, इसलिए हम इसके एल्गोरिदम को पार्स नहीं करेंगे और सीधे कोड पर आगे बढ़ेंगे। ऐसा करने के लिए, अपने सीसी संकलक में दो छोटी फाइलें बनाएं: nSMA. cpp (DllMatlab. zip से): nSMA. def (DllMatlab. zip से): लाइब्रेरी एनएनएसएमए एक्सचेंज IsStartSMA एनएसएमए आपके सीसी संकलक में प्रोजेक्ट बनाएं: इसके लिए आपको आवश्यकता है मानक इनपुटआउटपुट पुस्तकालय को शामिल करने के लिए और निम्न फाइलों को प्रोजेक्ट करने के लिए जोड़ें (आपके कंपाइलर में: प्रोजेक्ट - gtAdd प्रोजेक्ट): nSMA. def ltMATLABgtExternlibltwin3264gtltcompilergt फ़ोल्डर में, जहां: ltMATLABgt MATLAB मुख्य फ़ोल्डर। ltwin3264gt या तो 32-बिट OS के लिए Win32 फ़ोल्डर, या 64-बिट ओएस के लिए win64 Borland सीसी देखें के लिए Borland फ़ोल्डर ltcompilergt। 5-6, माइक्रोसॉफ्ट विज़ुअल सी के लिए माइक्रोसॉफ्ट फ़ोल्डर (मेरे पास संस्करण 6 के लिए फ़ाइलें हैं): libmx. lib mclmcr. lib NeoSMA. lib मैन्युअल रूप से तैयार करें (देखें 3.1 मेटाट्रेडर 5 amp की यूनिवर्सल लाइब्रेरी का विकास करना। आखिरकार, मैं आपको इस खंड में बताना चाहता हूं, इस बारे में फाइलों की आवश्यकता है, जहां परियोजना को दूसरे कंप्यूटर पर ले जाया जा रहा है, जहां कोई मैटैब स्थापित नहीं है। यहां लक्ष्य मशीन पर फ़ाइलें और पथ की एक सूची है: MCRInstaller. exe किसी भी फ़ोल्डर (एमसीआर इंस्टॉलर) extractCTF. exe किसी भी फ़ोल्डर (एमसीआर इंस्टॉलर के लिए) MCRRegCOMComponent. exe किसी भी फ़ोल्डर (एमसीआर इंस्टॉलर के लिए) unzip. exe किसी भी फ़ोल्डर (एमसीआर के लिए) इंस्टॉलर) NeoSMA. dll ltterminirgtMQL5 लाइब्रेरीज़ NeoSMA. ctf ltterminaldirgtMQL5 लाइब्रेरीज़ nnSMA. dll ltterminaldirgtMQL5 लाइब्रेरीज़ कई उन्नत प्रोग्रामर पहले ही अनुमान लगा चुके हैं, कि यह एक इंस्टॉलर प्रोग्राम (एसईईटीयूपी) का उपयोग करने के लिए उचित है। उनमें से कई इंटरनेट पर मुफ्त उत्पादों सहित हैं। अब हमें मेटाट्रेडर 5 में इस DLL का परीक्षण करना होगा। ऐसा करने के लिए हम एक साधारण लिपि (DllMatlab. zip से TestDllMatlab. mq5) लिखेंगे: निष्कर्ष तो आप मेटा ट्रेडर 5 amp MATLAB इंटरैक्शन के लिए एक सार्वभौमिक पुस्तकालय कैसे बना सकते हैं, और कैसे MATLAB वातावरण में निर्मित DLL कनेक्ट करने के लिए लेकिन फिर भी मेटाट्रेडर 5 एपी MATLAB इंटरैक्शन के इंटरफेस का वर्णन किया जा सकता है, लेकिन यह इस आलेख के दायरे से परे है। इस लेख का विषय विवरण में शामिल है। Ive ने सबसे प्रभावी तरीके से संपर्क करने का विकल्प चुना है, विशेष प्रकार के एडाप्टर की आवश्यकता नहीं है हालांकि आप किसी अन्य तरीके से जा सकते हैं, जैसे प्रौद्योगिकी - कैसे मेटाट्रेडर 5 से उद्धरण WCF सेवाओं का उपयोग करने के लिए एप्लिकेशन को निर्यात करना। कई पाठकों में एक प्रश्न हो सकता है: चुनने के लिए कौन सी विधि है जवाब आसान है - दोनों, क्योंकि गणितीय मॉडल के designdebugging के दौरान गति की आवश्यकता नहीं है। लेकिन आपको प्रोग्रामिंग के लिए विशेष उत्पादन लागत के बिना MATLAB की पूर्ण शक्ति की आवश्यकता होगी। MATLAB Engine will help here, of course. However, when the mathematical model is debugged and ready to use, youll need speed, multitasking (work of indicator andor trade system at several price charts) - here without a doubt youll need a DLL, built in MATLAB environment. But all this does not oblige you to follow it. Everybody will give the answer to this question himself, relying primarily on the proportion of programming cost to the scale of the project (number of indicator andor trade system users). It makes no sense to create Dll in the MATLAB environment for one or two users (its easier to install MATLAB on two computers). Many readers, who are unfamiliar with MATLAB, probably have a question: why all of this MQL5 has already mathematical functions The answer is that use of MATLAB enables you to effortlessly implement your mathematical ideas, here is just a partial list of possibilities: dynamic algorithm of fuzzy logic in the indicator andor mechanical trade system dynamic genetic algorithm in mechanical trade system (dynamic strategy tester) dynamic neural network algorithm in the indicator andor mechanical trade system three dimensional indicators simulation of nonlinear management systems So, all in your hands, and do not forget: Mathematics has always been the queen of sciences, and MATLAB package is your scientific calculator. Literature Translated from Russian by MetaQuotes Software Corp. Original article: mql5ruarticles44

Comments