Thursday 8 February 2018

ماتلاب مؤشرات التداول


ميتاترادر ​​4 - أمثلة التفاعل بين متاتريد 4 و ماتلاب إنجين (آلة ماتلاب الظاهرية) مقدمة اكتسبت ميتاترادر ​​4 والحزمة الرياضية ماتلاب شعبية عالية بين المستخدمين بسبب خصائصها الإيجابية، بما في ذلك المرونة في إنشاء أنظمة حسابية معقدة. هناك ثلاث طرق رئيسية للاتصال ماتلاب مع التطبيقات الخارجية، ولكن واحد فقط من المستحسن - استخدام سطح المكتب الظاهري ماتلاب المحرك. هذا الأسلوب يضمن التوافق الكامل مع حزمة ماتلاب كله. العديد من المبرمجين تجنب هذه الطريقة لأسباب أدناه: العديد من المستخدمين يجدون أنه بطيء. هذا صحيح، إذا ما قورنت مع استدعاء الدالة المباشرة من مكتبات دل من ماتلاب. يحدث التأخير الرئيسي في بداية التشغيل، عندما يتم استدعاء الجهاز الظاهري بسبب دعوة العديد من المكتبات التي يتم تحميلها في الفضاء الظاهري لعملية الدعوة (في حالتنا ميتاتريدر 4). إمكانية نقل المشروع. صحيح، عند نقل مشروع إلى كمبيوتر آخر يجب أيضا نقل مكتبات ماتلاب دل، على الرغم من وكذلك عندما يتم استخدام المكالمة المباشرة، لمعرفة علاقات تلك الأخيرة، أي بدء قائمة الانتظار إلزامية المعرفة C أو فورتران. حسنا، إذا كنت تعرف MQL4، يمكنك بسهولة معرفة C والعكس بالعكس. لماذا أوصي هذا الأسلوب: هذا هو الأكثر موثوقية ومستقلة من طريقة إصدار ماتلاب للاتصال مع البرامج الخارجية. يمكنك تغيير إصدار ماتلاب والمؤشرات الخاصة بك أو الخبراء المستشارين لن تلاحظ ذلك. هذه هي أهم ميزة. لديها طريقة تطور سريع نسبيا. أنها لا تتطلب مصحح الأخطاء، وسوف تجعل أي صعوبات لكتابة المجمع دل. سطح المكتب المشترك لعدة مؤشرات أندور الخبراء المستشارين. وأرى أن هذه الطريقة مفيدة عندما نحتاج إلى اتخاذ قرار يستند إلى بيانات عدة مؤشرات أو في تنفيذ تجارة هرم. توضح هذه المقالة طريقة ربط ميتاتريدر 4 و ماتلاب الإصدار. 7.4.0 (R2007a) من خلال دل-ورابر مكتوب في بورلاند C بيلدر 6. المبرمجين الذين يفضلون منتجات ميكروسوفت سوف تضطر إلى تكييف الأمثلة على مترجمهم (حظا سعيدا لكم في هذه المسألة المعقدة). I. تحديد المهمة أولا وقبل كل شيء نحن بحاجة إلى تحديد ما ينبغي أن نبدأ المشروع من. يتيح تقسيم عملية التنمية إلى ثلاثة أجزاء: تطوير وظيفة M في ماتلاب الذي ينفذ حساب مؤشر. تطوير دل-ورابر لتوصيل ماتلاب و ميتاترادر ​​4. تطوير برنامج مقل. II. تطوير M-فونكتيون هذا هو على الأرجح العملية الأكثر إثارة للاهتمام وطويلة الأمد التي تتضمن الإجراءات التالية: 1. قبل تصدير البيانات من ميتاتريدر 4 إلى ماتلاب. وتظهر الأرقام عملية تصدير البيانات اليدوية إلى ماتلاب. عند انتهاء التصدير، سيتم إنشاء متغيرات في سطح المكتب ماتلاب. 2. البحث عن الصيغ الصحيحة، ومجموعة من المعلمات الصيغة، وما إلى ذلك هذه العملية هي خلاقة ومهمة جدا، ولكن تطوير خوارزمية رياضية للمؤشر أندور خبير مستشار ليست موضوع مقالنا. يمكنك العثور على معلومات حول هذا الموضوع في الأدب عن ماتلاب. 3. خلق وظيفة M في ماتلاب. مبرمج الذي يعرف C أندور MQL4 لن يكون لها أي صعوبات خلق وظيفة - وعلاوة على ذلك جميع المتغيرات لديها نوع البيانات عاقل - مصفوفة. أي. ليس من المهم تحديد متغير بشكل واضح كمصفيف أو صفيف متعدد الأبعاد - فإن اللغة ستفعل ذلك بنفسها. وأنا لا أجد عملية اختيار نوع البيانات كبيرة. أما بالنسبة لي، وأنا دائما استخدام مكسريل. حسنا، ربما يتم استخدام المزيد من الذاكرة، ولكن ليس هناك أي التباس في مثل هذه الحالة. ويمكن الاطلاع على مزيد من التفاصيل في المراجع 1، 2. وفي المثال المعين، يتم تطبيق مرشاح الترددات العالية. III. تطوير دل-ورابر يتيح يسكن على هذه النقطة في تفاصيل الأم، لأنه هو أساسي كما الهواء. لذلك، يجب على كل مكتبة دل من الربط في وقت متأخر تلبية الشروط التالية: يجب أن يكون وظائف داخلية لجمع النفايات وتطهير الذاكرة بعد عملها. يجب أن يكون من الممكن أن يكون متعدد الخيوط، أي دعم تشغيل أكثر من مؤشر ترابط واحد في نفس الوقت. يجب أن يكون موجودا في أدلة معينة، انظر أيضا: موقع ملفات المشروع. الوظائف الخارجية الرئيسية لل دل-ورابر هي واجهة أبي لمحرك ماتلاب ووظيفة واحدة من مكتبة إنتوتبوت C القياسية. واجهة أبي من ماتلاب المحرك بسيطة ومدمجة يحتوي فقط 8 وظائف: محرك بينغ إنغوبين (نول) وظيفة استدعاء سطح المكتب ماتلاب، المعلمة دائما نول، فإنه يعود المؤشر إلى واصف سطح المكتب، هو مطلوب لتشغيل أخرى وظائف، ويتكون المتغير العالمي. i نكت إكسيتكود إنغكلوس (محرك بينغ) وظيفة إغلاق سطح المكتب، مؤشر بينغ إلى واصف سطح المكتب، وإرجاع القيمة التي هي على الرغم من غير مهم، لأنه يتم استدعاء هذه الدالة في دل إغلاق وليس المهم، إرجاع عدد مستخدمي سطح المكتب ماتلاب. مكساراي مكسفيكتور مسريتدوبلماتريكس (إنت m، إنت n، إنت كومبلكسفلاغ) الدالة بإنشاء مصفوفة لسطح المكتب ماتلاب، إرجاع مؤشر إلى مصفوفة متغير. فمن الضروري لإنشاء متغير متوافق مع ماتلاب. لا يمكن إرسال صفائف البيانات المعتادة وأنواع البيانات البسيطة إلى ماتلاب مكساراي مكسفيكتور مؤشر إلى متغير مصفوفة إنت عدد m من الصفوف عدد n عدد الأعمدة كومبلكسفلاغ نوع عدد معقدة ودائما مكسريل للتشغيل الصحيح مع ميتاتريدر 4. الفراغ مكسديستروياراي (مكساراي مكسفيكتور) وظيفة يمحو مصفوفة ماتلاب، اللازمة لتطهير الذاكرة. دائما حذف البيانات عندما لا تكون هناك حاجة أكثر، وإلا سيكون هناك مشاكل مع الذاكرة أو تداخل النتائج. مكساري مؤشر مكفيكتور إلى مصفوفة متغير. إنت إنغبوتفاريابل (محرك بينغ، شار اسم، مكساراي مكسفيكتور) وظيفة إرسال متغير إلى سطح المكتب. لا يجب إنشاء متغيرات نوع مكساراي فقط، ولكن أيضا إرسالها إلى ماتلاب. محرك مؤشر بينغ إلى سطح المكتب واصف تشار اسم اسم المتغير في سطح المكتب ماتلاب، نوع - شار مكساراي مؤشر مكسفكتور إلى مصفوفة متغير. مكساراي مكسفيكتور إنجيتفاريابل (محرك بينغ، شار اسم) وظيفة المتغير تلقي من سطح المكتب، وظيفة مقابل سابقتها. متغيرات نوع مكساراي يمكن استقبالها. مكساراي مؤشر مكفاريكتور إلى مصفوفة متغيرة مؤشر مؤشر بينغ المحرك لوصف سطح المكتب شار اسم المتغير اسم في سطح المكتب ماتلاب، نوع - شار. مضاعفة p مكسيتبر (مكساراي مكسفيكتور) الدالة يتلقى مؤشر إلى صفيف البيانات يتم استخدامه لنسخ البيانات جنبا إلى جنب مع ممكبي (). استخدم هذه الدالة عند استقبال متغير من نوع مكساراي، لاستخلاص متغير من نوع بسيط (إنت، مزدوج). مؤشر P مزدوجة إلى مجموعة من نوع مزدوج مكساري مؤشر مكسفيكتور إلى مصفوفة متغير. إنت إنغفالسترينغ (محرك بينغ، شار الأوامر) وظيفة يرسل الأمر إلى سطح المكتب. سيتم تنفيذ الأمر في سطر الأوامر بواسطة سطح المكتب ماتلاب. محرك مؤشر بينغ إلى سطح المكتب واصف تشار الأمر الأمر ل ماتلاب، خط نوع شار. هناك وظيفة واحدة فقط للعمل مع الذاكرة: فواد p ممكبي (باطلة p، فواد بوت، إنت نسيزيبيت) نسخ وظيفة (الاستنساخ) متغير (صفيف) بوت في متغير p من نزيزيبيت بايت الحجم. تنبيه: مشاهدة ديمنزيوناليتي الصفيف. يجب أن تكون إما متساوية، أو p يجب أن تكون صفيف أكبر من بوت. متطلبات وظائف التصدير من دل-ورابر لميتاتريدر 4 لتكون قادرة على استخدام ماتلاب، يجب أن تكون مكتوبة وظائف المرسلات. يتيح عرض متطلبات إسقاط هذه الوظائف. يجب أن تكون الدالة التي سيتم استدعاؤها من ميتاتريدر 4 ستدكال بمعنى أن المعلمات تنتقل عبر المكدس، تقوم الدالة بمسح المكدس. هذه هي الطريقة التي يتم الإعلان عن الدالة: إكسترنال C ديكلسبيك (دليكسبورت) لتفاريابلتيبتي ستدكال فونسيون (لتيبيغت لتنامغت) إكسترن C ديكلسبيك (دلكسبورت) - يبلغ المترجم C أن الدالة خارجية، هو مكتوب في جدول التصدير. لوتفاريابلتيبيغت - نوع متغير للعودة يمكن أن يكون: باطل، بول، إنت، مزدوج، وأنواع المركب ومؤشرات لا يمكن أن تنتقل رؤية المزيد من اتفاق ستدكال على المعلمات انتقال إلى وظيفة وظهر وظيفة اسم وظيفتك لتيبيغت لتنامغت - نوع واسم المتغير المدخلات العدد الأقصى للمتغيرات - 64. هنا هو النموذج الأولي من وظيفة تحديد، كما تولي اهتماما ل ستكال بجانب هذا، يجب إنشاء ملف مع امتداد التمديد. عادة هذا هو ملف نصي يصف اسم المكتبة وأسماء وظائف التصدير. إذا لم يكن هذا الملف موجودا، فإن الملف الخاص بك سوف تفكر أسماء الدالة مشوهة الخاصة التي سوف تعقد استخدام دل. هنا مثال الملف: ليبراري أتسسوري ورد، يشير إلى اسم دل. كلمة إكسبورتس التبعي يقول أنه سيتم تعداد أسماء الدالة أدناه. نيمفونكتيونا أسماء نيمفونكتيونب دالات دل. ولكن هناك قيود تفرضها مقل: بما أن هذه اللغة ليس لديها مؤشرات، فإنه لا يوجد لديه ذاكرة ديناميكية، لذلك لا يمكن تمرير المصفوفات والهياكل وما إلى ذلك من مكتبة دل. ولكن في البيانات ميتاتريدر يمكن أن تكون مكتوبة في صفائف تمريرها من قبل وظيفة عن طريق المرجع. يمكن كتابة النتيجة في صفيف تم إنشاؤه بواسطة ميتاترادر، المؤشر الذي حصل دل عليه. ولكن يجب أن تكون المصفوفة ذات أبعاد معينة ولا يمكن أن تكون خط مؤشر (ربما يكون هذا التقييد متصلا بترتيب الذاكرة المحدد في ميتاتريدر 4). الآن، ومعرفة كيفية الكتابة وما هي وظائف للاتصال، يتيح عرض خوارزمية نموذجية من المجمع دل: 1. بدء تشغيل محرك ماتلاب باستخدام الدالة إنغوبين () أثناء المكالمة الأولى من دل 2. الحصول على البيانات من ميتاتريدر وإرسال مرة أخرى، دل وظيفة 2.1. إنشاء المتغيرات من قبل مسريتدوبلوماتريكس () وظيفة 2.2. نسخ البيانات إلى متغير مكفيكتور، وظائف ممكبي () و مسيتر () 2.3. تمرير المتغيرات إلى سطح المكتب ماتلاب، إنغبوتفاريابل () وظيفة 2.4. تمرير فورمولاكود إلى سطح المكتب ماتلاب، إنجيفالسترينغ () دالة 2.5. تلقي استجابة من سطح المكتب ماتلاب، إنجيتفاريابل () وظيفة 2.6. القيمة المعادة إلى ميتاتريدر، وظائف ممكبي () و مكجيتبر () 3. إغلاق ماتلاب باستخدام الدالة إنغلوس ()، وحذف كافة المتغيرات مكسديستروياراي () عند تحميل دل من منطقة عنوان عملية ميتاتريدر. الآن يتيح إنشاء هيكل عظمي دل-ورابر: بروجيكت أسمبلي يوضح الشكل التالي كيفية إضافة المكتبات و ملفات. def إلى المشروع: فيما يلي قائمة بالملفات الضرورية لمشروع دل-ورابر: libeng. lib الموجود في: بروغرام FileMATLABR2007aexternlibwin32borland libmx. lib الموجود في: Programme FilesMATLABR2007aexternlibwin32borland libmex. lib الموجود في: Programme FilesMATLABR2007aexternlibwin32borland. def يجب إنشاء هذا الملف في المفكرة كما هو موضح أعلاه. يجب نسخ الملف engine. h من بروغرام FilesMATLABR2007aexterninclude في المجلد ProgramB FilesBorlandCBuilder6Include - وبالتالي لم يكن لديك للإشارة إلى مسار مترجم في كل مرة. تنبيه: يتم إعطاء هذه التعليمات لتجميع المشروع في بورلاند C باني 6 فقط الرابع. تطوير برنامج MQL4 سوف نقوم بعرض الأسئلة المتصلة فقط مع إعلان وظائف التفاف دل وتمرير المعلمات. لذلك، من أجل الإعلان عن وظيفة مطلوب بناء اللغة أدناه: استيراد كلمة رئيسية HighPass. dll واسم مكتبة دل باطلة ماكيبوفيلتر (إنت نسيزي) - اسم الوظيفة ونوع قيمة ليتم إرجاعها واسم ونوع قيمة تم تمريرها. يتم استخدام نب عند تمرير المصفوفات، أمبرساند حرف أمبير ضروري إذا دلل يكتب أسفل استجابة في هذه مصفوفة البيانات لا توجد طرق أخرى من مجموعة يمر من البرامج الخارجية في مقل 4 المصفوفة التي يجب تمرير يجب أن يكون من أبعاد معينة و لا يمكن أن يكون صفيف مؤشر V. موقع الملفات بعد بناء المشروع يجب أن تكون كافة ملفات المشروع بشكل صحيح:.dll و. م - ملفات المكتبة و m - وظائف في الكتالوج فلسميتراديركسيرتسليبرتس. كتالوج تقع في مكانها المعتاد. أي إذا كان هذا مؤشر - في مجلد المؤشرات، إذا كان إي - في الخبراء، إذا كان البرنامج النصي - في مجلد البرامج النصية. تنبيه: عند بدء مؤشر أو مستشار خبير تحذير حول ملقم مشغول يمكن أن تظهر: في مثل هذه الحالة الانتظار 5-10 ثوان حتى يظهر وحدة التحكم ماتلاب في شريط المهام ثم انقر فوق كرر. ملاحظة لدي جهاز كمبيوتر محمول مع 512 رام، سيليرون M 2100 أنا لم تواجه أي تأخير في عملية التصفية، وعدد من الرسوم البيانية - 5 مع إجمالي المخزن المؤقت 500 8 5 20 000 بايت. لذا، فإن الخيار متروك لكم بالنسبة لي، لقد جعلت ذلك بالفعل. في حالة حدوث تأخيرات، يمكن تنفيذ نظام حساب موزعة بسهولة في ماتلاب، أي أنه يمكن بدء العديد من أجهزة الكمبيوتر المكتبية على أجهزة كمبيوتر مختلفة متصلة بشبكة محلية. قائمة مرجعية المدمج في مساعدة ماتلاب. ماتلاب 5. الحسابات، التصور، برمجة N. N. مارتينوف. C باني 6. المرجع المرجعي A. Y. Arkhangelski. المدمج في MQL4 مساعدة. الخلاصة ناقشنا في هذه المقالة أساسيات تطوير دل-ورابر لربط ميتاترادر ​​4 مع حزمة ماتلاب الرياضية. لقد تطرقنا إلى الأسئلة المتعلقة بتوفير عمل العديد من المؤشرات أندور الخبراء المستشارين - سيتم مناقشتها في المادة التالية. الملف المرفق يحتوي على ماسد تحسن بسبب استخدام فلتر عالية التردد. ماتلاب و MT4 ماتلاب إلى ميتاتريدر، بعض النصائح اللازمة في الآونة الأخيرة لقد تعلمت كيفية جعل نظام التداول كاملة في ماتلاب التي تتكيف مع الذات، وأنا لن يزعجك مع تفاصيل الآن، أنا فقط بحاجة الى بعض النصائح. باسيكلي ما أحتاجه هو الحصول على تدفق البيانات بين ميتاتريدر و ماتلاب، أو على الأقل جعل دل التي يمكنني استخدامها في مؤشر أو خبير المستشار. نظام التداول الخاص بي يحسن داخل ماتلاب، ويقول كل 6 ساعات أو نحو ذلك. لقد قرأت، وتابعت المقالة ددي على MQL4، لكنه لا يعمل بالنسبة لي، والغريب بما فيه الكفاية، فإنه لا يعطي أي أخطاء، ولكن لا توجد بيانات سواء، في حين أن كل ددي قيد التشغيل في ميتاتريدر، كما أنها تذهب فقط في اتجاه واحد. أي نصيحة بشأن الخيارات والنهج الأخرى هي أكثر من موضع ترحيب شكرا مقدما الحوسبة المتوازية و غبوس في ماتلاب تطبيق سلسلة الوقت تحليل ماتلاب. تحليل سلسلة زمنية تطبيقية كمحاضرات قابلة للتحميل ومخطوطات ماتلاب (بيانات الفوركس هي في جوهرها بيانات سلسلة زمنية كلاسيكية حتى لا يتم الخلط بينها وبين حقيقة أن هذه لا تتعامل مباشرة مع بيانات الفوركس) تحليل سلسلة الوقت التطبيقيةمتترادر ​​5 - أمثلة ميتاتريدر 5 و ماتلاب التفاعل مقدمة مقالتي الأولى تم ملاحظة التفاعل بين ميتاتريدر 4 و ماتلاب المحرك (آلة ماتلاب الظاهري) من قبل مقل المجتمع. وكان بعض القراء (1Q2W3E4R5T) حتى قادرة على نقل هذا المشروع من بورلاند إلى VS2008. ولكن الوقت يمضي دون هوادة، و (حزين ولكن صحيح) ميتاترادر ​​4 تختفي، وإفساح المجال لخليفتها ميتاتريدر 5 مع MQL5، التي أدخلت المؤشرات والذاكرة الحيوية. وبفضل هذه الابتكارات، لدينا الفرصة لكتابة مكتبة عالمية من التفاعل مع الجهاز الظاهري ماتلاب المحرك، وربط مباشرة المكتبات، التي تم إنشاؤها بواسطة ماتلاب، مع ميتاتريدر 5. تغطي هذه المقالة مثل هذه الوظيفة. تستمر هذه المقالة منطقيا السابقة وأكثر شمولا يغطي مشكلة التفاعل بين ميتاتريدر 5 و ماتلاب. لجعل نطاق هذه المادة أكثر مفهومة للقراء غير مهيأ، ونحن سوف تقسيمه إلى ثلاثة أجزاء: النظرية والمرجعية والممارسة. سوف تغطي نظرية أنواع البيانات المستخدمة في MQL5 و ماتلاب، فضلا عن تحويل المتبادل. في إشارة سوف تتعلم الهياكل اللغوية وبناء الجملة من الوظائف، اللازمة لإنشاء دل. وفي الممارسة سوف نقوم بتحليل المزالق من هذا التفاعل. يمكن للقراء ذوي الخبرة تخطي النظرية والمرجعية، والبدء مع الممارسة. ويحث البعض الآخر على قراءة النظرية والمرجعية، وبعد ذلك فقط المضي قدما في الممارسة. أيضا قيمتها لقراءة الكتب المذكورة في قسم الأدب. 1.1 أنواع البيانات في ماتلاب و MQL5 1.1.1 أنواع البيانات البسيطة أولا وقبل كل شيء، نحن بحاجة إلى التعرف على العالمين الداخلي MQL5 و ماتلاب. بعد إجراء فحص روتيني لأنواع متغيرة، نخلص إلى أنهما متطابقان تقريبا: الجدول 1. أنواع البيانات في ماتلاب و MQL5 هناك فرق رئيسي واحد: يمكن أن تكون المتغيرات في MQL5 بسيطة أو مركبة (معقدة)، وفي متاتلاب جميع المتغيرات متعددة الأبعاد (معقدة) - أي المصفوفة. يجب أن تتذكر دائما عن هذا الاختلاف 1.1.2 أنواع البيانات المعقدة في MQL5 هناك 4 أنواع معقدة من البيانات: المصفوفات والسلاسل والهياكل والطبقات. يتم تعيين نوع البيانات المعقدة من عدة أنواع البيانات البسيطة، جنبا إلى جنب في كتلة الذاكرة من طول معين. عند التعامل مع مثل هذه البيانات تحتاج دائما إلى معرفة إما حجم كتلة الذاكرة في بايت، أو عدد من العناصر (باستثناء الطبقات). نحن مهتمون فقط في المصفوفات والسلاسل، لأن تقديم الطبقات والهياكل MQL5 ل ماتلاب لا معنى له. عند تمرير صفائف من أي نوع تحتاج إلى معرفته: نوع (البعد) وعدد العناصر باستخدام الدالة أريسيزي (). وينبغي إيلاء اهتمام خاص للفهرسة في ميتاتريدر 5 - وعادة ما يكون إلى الوراء (أي أن العنصر الأول يحتوي على بيانات أحدث من التالي). تحقق من ذلك باستخدام الدالة أرييسريز (). و ماتلاب يحتوي على الفهرسة التالية: العنصر الأول يحتوي على البيانات القديمة من المقبل - لذلك يجب عليك عكس المصفوفات الخاصة بك قبل إرسالها إلى ماتلاب، إذا علم العلم ترو. استنادا إلى ما سبق، يتيح الاتفاق على ما يلي: صفائف عكسية بشكل خفي ل MQL5-برامج، باستثناء صفائف من نوع شار والمصفوفات ثنائية الأبعاد - تركها دون تغيير. عكس بشكل غير ظاهر جميع المصفوفات من ماتلاب، وتعيين علم أسيريز مع ترو، باستثناء صفائف من نوع شار والمصفوفات ثنائية الأبعاد - تركها دون تغيير. في كل صفيف في MQL5-البرنامج، التي تم إنشاؤها وفقا إلى الفهرسة إلى الوراء، يجب أن يكون العلم أسيريز ترو، باستثناء صفائف من نوع شار والمصفوفات ثنائية الأبعاد - تركها دون تغيير. ولكن هذا ليس القيد الوحيد عند العمل مع المصفوفات. عند العمل مع صفائف متعددة الأبعاد، أو المصفوفات لتكون أكثر صحة، وخاصة من ماتلاب، ونحن نقدم تقييد لا يزيد عن 2 صفائف الأبعاد. هنا لا يمكن أن تكون العلامة أسيريز ترو، وبالتالي لا يتم عكس هذه المصفوفات. لا تنسى أن السلاسل في MQL5 ليست صفائف من عناصر نوع شار. لذلك عندما تمر السلاسل يأتي مشكلة طفيفة: في سلاسل MQL5 ترميز باستخدام ونيكود، و ماتلاب يستخدم ترميز أنسي. لذلك قبل تمرير سلسلة، يجب أن يتم تحويلها إلى صفيف من أحرف أنسي باستخدام الدالة سترينتوشاراراي (). والعكس بالعكس، عندما تحصل على صفيف الأحرف من ماتلاب، وتحويله باستخدام الدالة تشارارايتوسترينغ () انظر الجدول 2). لتجنب الارتباك، توافق: تخزين جميع السلاسل في MQL5-برامج باستخدام ونيكود، لا صفائف من نوع شار. 1.2 مقارنة أنواع البيانات MQL5 و ماتلاب من أجل تقليل كمية الوظائف وتبسيط خوارزمية المكتبة، سنخفض كمية الأنواع عن طريق التحويل التلقائي، والتي لا ينبغي أن تؤثر على سلامة البيانات. يوضح الجدول التالي قاعدة تحويل نوع البيانات من MQL5 إلى ماتلاب: مع هذا النوع من التحويل هناك فقدان للدقة. لن نستخدمه، ولكن يمكنك استخدام هذا التحويل في برامجك. جدول 2. مقارنة MQL5 و ماتلاب أنواع البيانات الآن كنت معتادا على أنواع البيانات المستخدمة في MQL5 و ماتلاب. أنت تعرف ما المزالق تنتظر في مرور البيانات وكيفية تجاوزها بكفاءة. لا يزال لديك لمعرفة ماتلاب المحرك أبي وتصبح مألوفة مع ماتلاب كومبيلر 4. 2. ماتلاب المحرك أبي مرجع، ماتلاب كومبيلر 4 مرجع و C إنبوتوتبوت مكتبة المراجع هذا القسم يقدم لك أهم وظائف ماتلاب المحرك أبي، ملامح ماتلاب مترجم 4 وعدد من الوظائف المفيدة للمكتبة C المدخلات القياسية. لذلك، دعونا نبدأ. 2.1 ماتلاب محرك أبي و مكر وظائف ماتلاب المحرك - هو واجهة خارجية تمكن البرامج الأخرى لاستخدام ماتلاب سطح المكتب. فإنه يوفر عمل وظيفية بالكامل من جميع حزم ماتلاب دون أي قيود. على الرغم من أنه لا يقال في الوثائق، ولكن من حيث مبرمج النظام - مجرد جهاز الظاهري، مثل فب، الخلية، الخ التي تدعم طريقة بسيطة وسريعة نسبيا لتبادل البيانات بين ميتاتريدر 45 و ماتلاب. هذا الأسلوب من ربط البرامج الخارجية مع حزمة ماتلاب يوصى بها المطورين. وتتكون الواجهة من ست وظائف: محرك إنغوبين إنغوبين (نول) تستدعي هذه الدالة ماتلاب سطح المكتب، المعلمة دائما نول، ترجع مؤشرا إلى واصف سطح المكتب. إنت إكسيتكود إنغكلوس (محرك بينغ) هذه الوظيفة تغلق سطح المكتب، إرجاع عدد المستخدمين المتبقين من سطح المكتب ماتلاب، حيث: مؤشر مؤشر المحرك إلى مؤشر سطح المكتب. مكساراي مكسفيكتور مسريتدوبلماتريكس (إنت m، إنت n، إنت كومبليكسفلاغ) هذه الدالة تخلق متغير (مصفوفة) من سطح المكتب ماتلاب، ترجع مؤشر إلى متغير (مصفوفة)، حيث: مؤشر مكساراي مكسفكتور إلى متغير المصفوفة. عدد م عدد الصفوف. عدد n من الأعمدة. كومبليكسفلاغ نوع من عدد معقدة، ل ميتاتريدر 45 مكسريل. باطل مكسديستروياراي (مكساراي مكسفيكتور) هذه الوظيفة يدمر مصفوفة ماتلاب، هناك حاجة لمسح الذاكرة، حيث: مكساري مؤشر مكسفيكتور لمصفوفة متغير. إنت إنغبوتفاريابل (محرك بينغ، شار اسم، مكساراي مكسفيكتور) هذه الوظيفة بإرسال متغير إلى سطح المكتب. يجب عليك ليس فقط إنشاء متغيرات نوع مكساراي، ولكن أيضا إرسالها إلى ماتلاب، حيث: محرك مؤشر بينغ إلى واصف سطح المكتب. شار اسم متغير اسم نوع شار في سطح المكتب ماتلاب. مكساراي مؤشر مكسفكتور إلى متغير المصفوفة. مكساراي مكسفيكتور إنجيتفاريابل (محرك بينغ، شار اسم) هذه الوظيفة يحصل متغير من سطح المكتب - معكوس الدالة السابقة. يتم قبول المتغيرات فقط من نوع مكساراي، حيث: مؤشر مكساراي مكسفكتور إلى متغير المصفوفة. محرك مؤشر بينغ إلى واصف سطح المكتب. شار اسم متغير اسم نوع شار في سطح المكتب ماتلاب. مضاعفة p مكسيتبر (مكساراي مكسفيكتور) هذه الوظيفة يحصل مؤشر إلى مجموعة من القيم، يتم استخدامه لنسخ البيانات جنبا إلى جنب مع ممكبي () (انظر 2.3 C القياسية إنبوتوتبوت المكتبة)، حيث: مؤشر p مزدوج إلى صفيف من نوع مزدوج. مكساراي مؤشر مكسفكتور إلى متغير المصفوفة. إنت إنجيفالسترينغ (محرك بينغ، شار كوماند) هذه الوظيفة بإرسال الأوامر إلى ماتلاب سطح المكتب، حيث: مؤشر بينغ المحرك إلى واصف سطح المكتب. شار الأمر الأوامر ل ماتلاب، سلسلة من نوع شار. ربما لاحظت أن ماتلاب محرك أبي يسمح لك لإنشاء هيكل مكساراي فقط لنوع مزدوج. ولكن هذا التقييد لا يؤثر على إمكانياتك، ولكن سيؤثر على خوارزمية مكتبتك. مكر (مثيل مكر) هو مكتبة خاصة من حزمة ماتلاب، التي تمكن من تشغيل تطبيقات مستقلة المكتبات العامة، التي تم إنشاؤها بواسطة بيئة ماتلاب على أي جهاز كمبيوتر. ملاحظة أنه حتى إذا كان لديك حزمة ماتلاب كاملة، لا تزال تحتاج إلى تثبيت مكتبة مكر عن طريق تشغيل ملف MCRInstaller. exe الموجود في المجلد ltMATLABgtToolboxcompilerdeploywin32. لذلك، قبل استدعاء أي وظيفة مكتبة عامة، التي تم إنشاؤها بواسطة بيئة ماتلاب، تحتاج إلى استدعاء وظيفة تهيئة مكر: بول مكلينيتياليزابليكاتيون (كونست شار الخيار، عدد إنت) إرجاع ترو إذا كان بدء مكر ناجحا، وإلا فالس، حيث: كونست شار الخيار سلسلة من خيارات مثل في مسك - R عادة هو نول إنت عدد الخيارات حجم سلسلة، عادة 0. عند إنهاء عمل المكتبة العامة يجب استدعاء: بول مكلترميناتابليكاتيون (فواد) بإرجاع ترو إذا تم إغلاق مكر بنجاح. 2.2 ماتلاب كومبيلر 4 ماتلاب كومبيلر يتيح لك إنشاء ما يلي من وظائف M: التطبيقات المستقلة التي تعمل حتى لو لم يتم تثبيت ماتلاب. سيسي، التي يمكن استخدامها دون ماتلاب على أنظمة المستعمل النهائي. كومبيلر يدعم معظم الأوامر وحزم ماتلاب، ولكن ليس كل شيء. يمكن الاطلاع على قائمة كاملة بالقيود على موقع ماتلاب. هذه الطريقة تسمح لك بإنشاء حزمة مستقلة من برنامج ميتاتريدر 5 و ماتلاب، ولكن على النقيض من محرك ماتلاب، يتطلب مبرمج تدريبا جيدا والمعرفة العميقة من التجميع. ماتلاب كومبيلر يتطلب واحد على الأقل من المبرمجين سيسي التالية: لس C (عادة ما يأتي مع ماتلاب). لها مترجم C فقط. إصدارات بورلاند C 5.3، 5.4، 5.5، 5.6. ميكروسوفت فيسوال سيسي الإصدارات 6.0، 7.0، 7.1. ماتلاب المترجم 4، على النقيض من سابقاتها، يولد فقط رمز واجهة (المجمع)، أي لا يترجم م وظائف في ثنائي أو رمز سيسي، لكنه ينشئ ملف خاص يستند إلى تكنولوجيا ملف مكون (كتف)، التي تشمل تكامل حزم مختلفة، مطلوب لدعم وظائف م. ماتلاب كومبيلر أيضا بتشفير هذا الملف مع فريدة من نوعها (غير متفاعل) مفتاح 1024 بت. الآن يتيح النظر في خوارزمية ماتلاب كومبيلر 4 العمل، لأن جهل هذا الموضوع سوف يؤدي إلى العديد من الأخطاء غبي في وقت التجميع: تحليل التبعيات في هذه المرحلة تحديد جميع وظائف وملفات ميكس وملفات P، التي جمعت وظائف م تعتمد على . إنشاء الأرشيف - يتم إنشاء ملف كتف، يتم تشفيرها وضغطها. إنشاء رمز الكائن من المجمع في هذه المرحلة يتم إنشاء كافة رموز المصدر، اللازمة للمكون: كود واجهة سيسي للوظائف م المحددة في سطر الأوامر (NameFilemain. c). ملف مكون (NameFilecomponent. dat)، والذي يحتوي على كافة المعلومات اللازمة لتنفيذ م رمز (بما في ذلك مفاتيح التشفير والمسارات، وتخزينها في ملف كتف). ترجمة سيسي. في هذه المرحلة يتم تجميع ملفات شفرة المصدر سيسي في ملفات الكائنات. ربط. المرحلة النهائية من بناء المشروع. الآن، عندما تكون معتادا على سلوك خوارزمية ماتلاب كومبيلر، عليك معرفة المزيد عن المفاتيح من أجل الحصول على خطة تفصيلية للإجراءات عند استخدام المترجم (مسك): جدول 4. ماتلاب مبويلد لينكر (الإصدار 4) مفاتيح الجدول 4 القوائم المفاتيح الرئيسية. لمزيد من المعلومات استخدام أوامر مبويلد مساعدة أو وثيقة مبويلد. 2.3 C مكتبة الإدخال القياسية C باستخدام مكتبة الإدخال القياسية توفر النسخ الصحيح للبيانات. واستخدامه يوفر لك من الأخطاء الغبية التي تنشأ خلال مرحلة تصميم البرنامج (على سبيل المثال: العديد من المبرمجين المبتدئين نسخ مؤشر فقط إلى كتلة الذاكرة بدلا من نسخ كتلة الذاكرة بالكامل). من مكتبة إنبوتوتبوت بأكملها نحن مهتمون فقط في وظيفة واحدة: الفراغ p ممكبي (باطلة p، فوت بوت، إنت نسيزيبيت) هذه الوظيفة نسخ (استنساخ) فاريابلاري من بوت إلى p مع حجم بايت نزيزيبيت، حيث: فواد مؤشر p إلى صفيف، حيث لنسخ. باطل مؤشر بووت إلى صفيف، من الذي يتم النسخ. إنت نزيزيبيت حجم البيانات المنسوخة، يجب ألا يتجاوز حجم صفيف p، وإلا سيتم حدوث خطأ في الوصول إلى الذاكرة. 3. الممارسة الآن نقوم به مع النظرية ويمكننا المضي قدما في تحقيق التفاعل ميتاتريدر 5 أمبير ماتلاب. كما كنت ربما خمنت، سيتم ذلك بطريقتين: استخدام ماتلاب محرك الجهاز الظاهري واستخدام المكتبات التي تم إنشاؤها بواسطة مترجم ماتلاب. أولا، النظر في طريقة بسيطة وسريعة وتنوعا من التفاعل عبر محرك ماتلاب. هذا الجزء من المادة يجب أن يقرأ من البداية إلى النهاية، كما، على الرغم من الفرق بين طرق التفاعل على ما يبدو، لديهم فلسفة واحدة وبناء على دراية من اللغة يبني، وتعلم شيء جديد هو أسهل مع أمثلة بسيطة. 3.1 تطوير مكتبة عالمية من ميتاتريدر 5 أمبير ماتلاب تفاعل المحرك هذا الأسلوب من التفاعل لا يمكن أن يسمى أنيقة وسريعة، ولكن هو الأكثر موثوقية ويغطي حزمة ماتلاب بأكملها. وبطبيعة الحال، ينبغي أن نذكر سرعة تطوير النموذج النهائي. جوهر التنمية هو كتابة مجمع مكتبة عالمية للتفاعل ميتاتريدر 45 أمبير ماتلاب المحرك. بعد هذا ميتاتريدر 45 سكريبينديكاتوركسيرت يمكن إدارة ماتلاب سطح المكتب الظاهري. والخوارزمية الرياضية بأكملها يمكن تخزينها في برنامج مقل كما السلاسل، حتى تتمكن من استخدامها لحماية الملكية الفكرية الخاصة بك (لمزيد من التفاصيل انظر حماية نفسك، والمطورين المادة). كما يمكن تخزينها في وظائف م أو P - وظائف ملفات منفصلة في المجلد 5mtmQL5Libraries لمتميترادر. المجالات الممكنة لتطبيق هذا التفاعل: لاختبار أو إظهار النماذج الرياضية دون الحاجة إلى كتابة برامج معقدة (حماية الملكية الفكرية يمكن ترتيبها كما هو الحال في برنامج مقل وعن طريق حزمة ماتلاب - باستخدام وظائف P). لكتابة نماذج رياضية معقدة باستخدام جميع ميزات ماتلاب. لجميع أولئك الذين لن توزع سكريبتسينديكاتورسكسيرتس. يتيح المضي قدما. آمل أن تكون قد قرأت 1.1 أنواع البيانات في ماتلاب و MQL5. 1.2 مقارنة MQL5 و ماتلاب أنواع البيانات. 2.1 ماتلاب محرك أبي و مكر وظائف و 2.3 C الإدخال القياسي أقسام مكتبة المكتبة، ونحن لن وقفة وتحليلها بعد الآن. قراءة بعناية مخطط كتلة التالية، التي توضح خوارزمية المكتبة في المستقبل: الشكل 1. بلوك-مخطط خوارزمية المكتبة كما رأينا في الشكل 1، وتتكون المكتبة من ثلاث كتل رئيسية. النظر في أغراضها: كتلة MQL5، التحضير الأولي للبيانات سينتريسيتد: صفيفات عكسية. تحويل الأنواع. سلاسل ترميز التحويل. كتلة سيسي: تحويل صفيف إلى بنية مكساراي. يمر أوامر محرك ماتلاب. ماتلاب نظام حسابات كتلة المحرك. الآن، يتيح التعامل مع الخوارزميات. تبدأ جيدا مع كتلة MQL5. وقد لاحظ القارئ منتبهة بالفعل أنه سيركز على تنفيذ ما كتب في أنواع البيانات في ماتلاب وقسم MQL5. إذا كنت قد غاب عن ذلك، فإنك لا تكاد تفهم لماذا كل هذا ضروري. خوارزمية وظائف ملينبوت لتفاريابليتيبيغت متطابقة تقريبا. يتيح مناقشة العمل باستخدام الدالة ملينبوتودوبل () التي توفر مدخلات من متغيرات نوع مزدوج إلى الجهاز الظاهري ماتلاب. بول ملينبتدوبل (مزدوج أمباراي، إنت سيزاراي، سلسلة نيماراي). حيث: إشارة الصفيف إلى متغير أو صفيف من نوع مزدوج. حجم صفيف سيزاراي (عدد العناصر، وليس بايت). سلسلة نيماراي، تحتوي على اسم متغير فريد للجهاز الظاهري ماتلاب (يجب أن يتوافق الاسم مع متطلبات ماتلاب). تحويل سلسلة ناماراي إلى مجموعة صفيف باستخدام الدالة سترينغتوشاراراي (). تحقق من نوع الفهرسة باستخدام الدالة أرييسريز (). إذا كان نوع الفهرسة قيمة تمرير عادية إلى الدالة ملكسينبتودوبل (). إلس فهرسة المصفوفة المصفوفة: صفيف عكسي وقيمة تمرير إلى دالة مكسينبوتودوبل (). وظيفة النهاية، تمرير القيمة التي تم إرجاعها إلى الدالة ملكسينبتودوبل (). خوارزمية وظائف ملجيت لتفاريابليتيبيغت هي أيضا متطابقة تقريبا. يتيح مناقشة عملها باستخدام الدالة ملجيتدوبل ()، التي ترجع متغير النوع المزدوج من الجهاز الظاهري ماتلاب. إنت ملجيتدوبل (مزدوج أمباراي، إنت سيزاراي، سلسلة نيماراي). حيث: إشارة الصفيف إلى متغير أو صفيف من نوع مزدوج. حجم صفيف سيزاراي (عدد العناصر، وليس بايت). نيماراي سلسلة تحتوي على اسم متغير فريد ل ماتلاب الجهاز الظاهري. تحويل سلسلة ناماراي إلى مجموعة صفيف باستخدام الدالة سترينغتوشاراراي (). البحث عن حجم المصفوفة باستخدام الدالة ملكسيتسيزيوفنام (). إف حجم أكثر من زيرو. تخصيص مجموعة المتلقي من الحجم المطلوب باستخدام الدالة أريريزيزي ()، والحصول على بيانات من مكسيتدوبل (). عودة حجم صفيف. إذا حجم هو صفر. خطأ في الإرجاع، أي قيمة فارغة. ثاتس و ملجيتينت () و ملجيتلوجيكال () وظائف إنتاج تحويل الظل من أنواع مزدوجة - gt إنتبول. لهذا الغرض إنشاء هذه الوظائف مؤقت الذاكرة المؤقتة في أجسادهم. هذا هو إجراء قسري، لسوء الحظ أبي ماتلاب لا يسمح لإنشاء هياكل مكساراي لأنواع البيانات الأخرى من ضعف. However, this does not mean that MATLAB operates exclusively the double types. CC block is far easier - it should provide data translation from the double type into the mxArray structure. It is done using the mxCreateDoubleMatrix() . mxGetPr() and memcpy() functions. Then, using the engPutVariable() function it passes data to MATLAB virtual machine, and to extract data it uses the engGetVariable() function. Again, pay attention to functions with prefixes Int and Logical as seen in the block-scheme, they dont directly interact with MATLAB, but use the mlxInputDoublemlxGetDouble and mlxInputChar() functions. Algorithm of their behavior is simple: call of the mlxInputDoublemlxGetDouble function inputoutput values as double() and send the shadow MATLAB command to convert data type via the mlxInputChar() function. MATLAB Engine block is even easier. It provides only mathematical functions. Its behavior depends on your commands and your mp-functions. Now, when all the details of the project are clear, its time to deal with project building. Any such build begins with the creation of main library in our case it is CC block. For this purpose, in any ANSI-text editor (Notepad, Bred, etc.) create a file with the DEF extension. It is desirable that the name of this file consist of Latin characters with no spaces and punctuation, otherwise you will hear many flattering words from your compiler. This file provides the permanence of your functions. If this file is absent, CC compiler will invent his own exotic names to export functions. This file contains: LIBRARY control word, LibMlEngine name of the library, and EXPORTS second control word, then come the names of functions. As you probably knew, the names of export functions cant have spaces and punctuation. Here is the text of the DllUnit. def file from MATLABEngine. zip archive: LIBRARY LibMlEngine EXPORTS mlxClose mlxInputChar mlxInputDouble mlxInputInt mlxInputLogical mlxGetDouble mlxGetInt mlxGetLogical mlxGetSizeOfName mlxOpen So, we have the first file of project. Now open Windows Explorer and go to the ltMATLABgtExterninclude folder. Copy the engine. h file (header file of MATLAB virtual machine) to folder, where you project is built (if you wont do this, you will have to manually specify the path to file at the stage of compilation). Now its time to create CC block. We will not include the entire source code of program in the article, because this file can be found in MATLABEngine. zip as DllUnit. cpp and it is well commented. Note that its better to create functions using stdcall convention i. e. parameters are passed through the stack, and function cleans the stack. This standard is native for Win3264 API. Consider how to declare a function: extern C declspec(dllexport) ltvariabletypegt stdcall Function(lttypegt ltnamegt) extern C declspec(dllexport) tells C compiler that function is external. ltvariabletypegt type of returned variable, may be: void, bool, int, double . composite types (known not only to Dll, but also to calling program) and pointers. stdcall declaration about passing parameters to function and back, its a standard for Win3264 API. Funcion your function name. lttypegt ltnamegt type and name of input variable, maximal number of variables is 64. CC block building: for this you need to include standard inputoutput library and add to project the following files (in your compiler: Project-gtAdd Project): DllUnit. def In ltMATLABgtExternlibltwin3264gtltcompilergt folder, where: ltMATLABgt MATLAB main folder. ltwin3264gt either win32 folder for 32-bit OS, or win64 for 64-bit OS. ltcompilergt the borland folder for Borland CC ver. 5-6, the microsoft folder for Microsoft Visual C: libeng. lib libmx. lib A common question like this may arise: I have different version of compiler or no such a compiler in the list (Very rarely there are no such files) . Lets see how to manually create a public library. We will consider how its done in Visual C and in Borland C: In FAR open ltMATLABgtBinltwin3264gt folder, where: ltMATLABgt MATLAB main folder. ltwin3264gt either win32 folder for 32-bit OS, or win64 for 64-bit OS. For Borland C enter: implib libeng. lib libeng. dll. The same for libmx. dll. For Visual C enter: lib libeng. dll. The same for libmx. dll. If other compiler . any compiler of any programming language must have this utility - Library Manager, usually this is a console program ltcompiler foldergtbinlib. exe. By the way, I forgot to warn you - dont try to make 64-bit LIB for 32-bit compiler. First, find out if there is 64-bit addressing support in compiler help. If not, either looking for 32-bit MATLAB DLL, or choose another CC compiler. Getting down to compilation, after which we get a library, that should be placed in the terminalfolderMQL5Libraries folder. Now lets begin with MQL block. Run MetaEditor, click New and do as on following figures: Figure 2. MQL5 Wizard: Create Library Figure 3. MQL5 Wizard: General Properties of Library Now, when Wizard MQL5 has created a template, proceed to its editing: Note that MQL 5 you can pass pointers in two ways: void NameArray This method of passing from array allows only to read data. However, if you try to use this reference to edit its contents, youll get memory access error (in the best case for you, MetaTrader 5 will quietly handle the error in the SEH-frame, but we HAVENT WRITE a SEH-frame, so we can even miss the reason of error). voidamp NameArray This method of passing allows you to read and edit array contents, but you must retain array size. If function doesnt accept or doesnt pass parameters, always specify the void type. 2. We wont describe all functions of the MQL block, because you can find MatlabEngine. mq5 source code in MATLABEngine. zip. Therefore, well consider the details of declaration and definition of external functions in MQL5: As seen in the example, the declaration and definition of function are combined. In this case, we declare a function named mlInputChar() as external (export ), which returns value of the bool type and accepts the array string as parameter. Now compile. Now that we have completed the last block of the library and compiled it, its time to test it in real conditions. To do this, write a simple test script (or take it from MATLABEngine. zip, file: TestMLEngine. mq5). Script code is simple and well commented: As seen from the script, we are entering values, and then get values. However, in contrast to MetaTrader 4, where we needed to know the size of buffer at design stage, in MetaTrader 5 its not needed, as we use dynamic buffers . Now that youve finally understood MATLAB virtual machine, you can begin using DLL built in MATLAB environment. 3.2 Technical guidelines of buildingusing DLL generated by MATLAB Compiler 4 In the previous section youve learned how to create a library for universal interaction with MATLAB package. However, this method has one drawback - it requires MATLAB package from end user. This restriction creates a number of difficulties in distribution of finished software product. Thats why MATLAB mathematical package has a built-in compiler, that allows you to create standalone applications independent from MATLAB package. Lets take a look at it. For example, consider a simple indicator - moving average (SMA). Slightly upgrade it by adding a Neural Network Filter (GRNN), that allows to smooth white noise (random bursts). Name the new indicator as NeoSMA, and filter as GRNNFilter. Thus we have two m-functions, of which we want to create a DLL, that can be called from MetaTrader 5. Now remember that the MetaTrader 5 searches fro DLLs in following folders: ltterminaldirgtMQL5Libraries ltterminaldirgt Current folder System folder ltwindowsdirgtSYSTEM32 ltwindowsdirgt Directories listed in the system environment variable PATH. Therefore, place into one of these directories two m-functions (NeoSMA. m and GRNNFilter. m), where we will build DLL. I draw your attention to this fact of placement, as this is done not by accident. Attentive reader already knows the MATLAB compiler feature - it preserves the paths when compiling (see 2.2 MATLAB Compiler 4). Before you begin to compile project, you must configure compiler. To do this, follow these steps: In MATLAB command line enter: mbuild - setup Press y to confirm find of CC compatible compilers installed in your system. Choose standard Lcc-win32 C compiler. Press y to confirm selected compiler. Figure 4. Compiling the project Now we are ready to move to the m-functions compilation process. mcc - N - W lib:NeoSMA - T link:lib NeoSMA. m GRNNFilter. m Explain the keys: - N to skip all unnecessary paths - W lib:NeoSMA tells compiler that NeoSMA is the name of library - T link:lib tells compiler to create public library with linking NeoSMA. m and GRNNFilter. m m-functions names Now, lets see what compiler has created: mccExcludedFiles. log log-file containing compilers actions NeoSMA. c C version of library (contains - code of wrapper) NeoSMA. ctf CTF file (see 2.2 MATLAB Compiler 4 ) section NeoSMA. h header file (contains declarations of libraries, functions, constants) NeoSMA. obj object file (source file containing machine and pseudo code) NeoSMA. exports exported functions names NeoSMA. dll Dll for further linking NeoSMA. lib Dll to use in CC projects NeoSMAmcccomponentdata. c C version on component (used for compliance with CTF-file, contains paths, etc.) NeoSMAmcccomponentdata. obj object version of component (source file containing machine and pseudo code) So lets handle wit h DLL, precisely with its internal structure. It consists of (basic functions only) from: Main function of any DLL - BOOL WINAPI DllMain() . which (according to Microsoft specification) handles events occurring in DLL: DLL loading into address space of process, creating a new stream, deleting the stream and unload Dll from memory. Service functions of DLL initializationdeinitialization . BOOL ltNameLibgtInitialize(void)void ltNameLibgtTerminate(void) are needed to startunload Math Work environment before using library functions and at the end of their use. Exported m-functions void mlfltNameMfilegt(int ltnumberofreturnvaluesgt, mxArray ltreturnvaluesgt, mxArray ltinputvaluesgt. ), where: ltnumberofreturnvaluesgt number of returned variables (dont confuse with array size, etc.). mxArray ltreturnvaluesgt address of mxArray structure where the results of m-function work will be returned. mxArray ltinputvaluesgt pointer to mxArray structure of m-function input variable. As you can see, exported m-functions contain addresses and pointers to mxArray structure, and you cant directly call these functions from MetaTrader 5, as it will not understand this type of data. We wont describe mxArray structure in MetaTrader 5, because MATLAB developers do not guarantee that it will not change over time, even within the same version of the product, so you need to write a simple DLL-adapter. Its block-scheme is shown below: Figure 5. DLL-adapter Block-Scheme It is very similar to the right side of DLL for MATLAB Engine, so we wont parse its algorithm and proceed directly to the code. To do this, create two small files in your CC compiler: nSMA. cpp (from DllMatlab. zip): nSMA. def (from DllMatlab. zip): LIBRARY nnSMA EXPORTS IsStartSMA nSMA Build the project in your CC compiler: for this you need to include standard inputoutput library and add to project the following files (in your compiler: Project-gtAdd Project): nSMA. def In ltMATLABgtExternlibltwin3264gtltcompilergt folder, where: ltMATLABgt MATLAB main folder. ltwin3264gt either win32 folder for 32-bit OS, or win64 for 64-bit OS. ltcompilergt the borland folder for Borland CC ver. 5-6, the microsoft folder for Microsoft Visual C (I have files for version 6): libmx. lib mclmcr. lib NeoSMA. lib create manually (see 3.1 Developing Universal Library of MetaTrader 5 amp MATLAB Engine Interaction ). The last, what I want to tell you in this section, is about files needed when moving project to another computer, where there is no MATLAB installed. Here is a list of files and paths on the target machine: MCRInstaller. exe any folder (MCR installer) extractCTF. exe any folder (for MCR installer) MCRRegCOMComponent. exe any folder (for MCR installer) unzip. exe any folder (for MCR installer) NeoSMA. dll ltterminaldirgtMQL5Libraries NeoSMA. ctf ltterminaldirgtMQL5Libraries nnSMA. dll ltterminaldirgtMQL5Libraries Many advanced programmers have already guessed, that it is advisable to use an installer program (SETUP). There are many of them over the Internet, including free products. Now we have to test this DLL in MetaTrader 5. To do this we will write a simple script ( TestDllMatlab. mq5 from the DllMatlab. zip): Conclusion So, you know how to create a universal library for MetaTrader 5 amp MATLAB interaction, and how to connect DLL built in MATLAB environment. But still there are interfaces of MetaTrader 5 amp MATLAB interaction to be described, but this is beyond the scope of this article. The topic of this article is covered in details. Ive chose the most effective ways of interaction, not requiring a special kind of adapters. Although you can go another way, such as. NET technology - How to Export Quotes from MetaTrader 5 to. NET Applications Using WCF Services . Many readers may have a question: what method to choose The answer is simple - both, because during the designdebugging of mathematical model the speed is not needed. But youll need the full power of MATLAB without special production costs for programming. 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

No comments:

Post a Comment