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


التفاعل بين ميتاتريدر 4 و ماتلاب عبر ملفات كسف.


المقدمة.


ومن المعروف أن الطاقة الحسابية ماتلاب البيئة لتكون متفوقة إلى حد كبير من أي لغة البرمجة بما في ذلك MQL4. مجموعة واسعة من الوظائف الرياضية التي تقدمها ماتلاب يسمح واحد لأداء العمليات الحسابية المعقدة إهمال كامل الأساس النظري للعمليات التي أجريت.


ومع ذلك، فإن التفاعل في الوقت الحقيقي بين محطة التداول وماتلاب يمثل مهمة غير هامة. في هذه المقالة، أقترح طريقة لتنظيم تبادل البيانات بين ميتاتريدر 4 و ماتلاب عبر ملفات كسف.


1. التشغيل البيني.


لنفترض، عند ورود كل شريط جديد، يجب أن ترسل ميتاتريدر 4 بيانات حول آخر 100 شريط إلى ماتلاب ويتم الرد عليها بنتائج المعالجة.


لحل هذه المشكلة، سنحتاج إلى إنشاء مؤشر في ميتاتريدر 4 من شأنه أن يكتب البيانات إلى ملف نصي وقراءة نتائج المعالجة من ملف نصي آخر تم إنشاؤه بواسطة ماتلاب.


يجب أن تقوم ميتاترادر ​​4 بتشكيل ملف البيانات الخاص بها عند ورود كل شريط جديد. يجب أن تحاول قراءة النتائج في كل علامة أيضا. لكي لا تقرأ النتيجة قبل تحديث ماتلاب، سنقوم بحذف الملف الذي يحتوي على النتيجة قبل أن نشكل ملف الإخراج لدينا. في هذه الحالة، لن تنجح محاولة القراءة إلا بعد انتهاء ماتلاب من حسابه وتشكيل ملف جديد.


يجب على ماتلاب تحليل سمات الملف التي تم إنشاؤها في ميتاتريدر 4 كل ثانية والبدء في المعالجة عندما يتغير وقت إنشائها. بعد انتهاء المعالجة، يتم إعادة إنشاء الملف المحذوف بواسطة ميتاترادر ​​4 قبل بدء تسجيل البيانات. ميتاترادر ​​4 يحذف بنجاح، ويحمل بيانات جديدة وينتظر الرد.


2. تشكيل ملف بيانات الإخراج.


هناك العديد من المقالات المكرسة لإنقاذ البيانات كملفات، لذلك أنا لن تعمل النقطة هنا. سأوضح فقط أننا نكتب البيانات إلى 7 أعمدة: "ديت"، "تايم"، "هاي"، "لو"، "كلوز"، "أوبين"، "فولوم". الحرف الفاصل هو "؛". الأولوية شريط من قبل إلى وقت لاحق منها، أي، الخط الذي يحتوي على خصائص شريط صفر يجب تسجيل الأخير. سيتم تزويد الملف بخط يحتوي على أسماء الأعمدة. سيتألف اسم الملف من اسم الرمز والإطار الزمني.


ونحن لن نحتاج إلى كل هذه البيانات، بالطبع، ولكن من الأفضل دائما أن يكون لديك ملف مفيد من مجرد مجموعة من الأعمدة ذات الأرقام غير معروفة.


3. إنشاء واجهة المستخدم الرسومية (غوي)


لذلك، الملف جاهز. دعونا نبدأ ماتلاب.


يجب علينا تطوير تطبيق من شأنه أن يقرأ بيانات النص من ملف، عملية وتسجيل النتائج في ملف آخر. سيكون لدينا لإنشاء واجهة المستخدم الرسومية لتحديد اسم الملف، وعرض المخططات وبدء المعالجة. فلنبدأ الآن.


لإنشاء واجهة المستخدم الرسومية، دعونا نبدأ "دليل البدء السريع" عن طريق كتابة "دليل" في وحدة التحكم أو عن طريق الضغط على لوحة رئيسية ماتلاب. في مربع الحوار ظهر، حدد "إنشاء واجهة مستخدم رسومية جديدة" - & غ؛ "واجهة المستخدم الرسومية فارغة (الافتراضي)". الآن يمكننا أن نرى واجهة لإنشاء واجهة المستخدم الرسومية مع شكل فارغ. في هذا النموذج، سنضع الكائنات التالية: "تحرير النص"، "زر"، "ثابت النص"، "محاور"، "زر". ونتيجة لذلك، يجب أن ينظر إلى حد ما مثل هذا:


الآن يجب أن ندعو بناء الممتلكات البصرية لكل كائن وتعيين خصائص كما يلي:


ثابت النص: أفقيالضبط - اليسار، الوسم - تكستينفو، سلسلة - معلومات.


تحرير النص: هوريزونتالالينمنت - ليفت، تاج - إديتباث، سترينغ - باث سيليكت.


زر الضغط: علامة - بوشبروز، سلسلة - تصفح.


المحاور: مربع - على، فونتنام - مس بدون ذنابة، فونتزيز - 8، تاج - أكسيسشارت.


زر الضغط: علامة - بوشسرارت، سلسلة - ابدأ.


عن طريق تغيير الخاصية تاج، نختار اسما فريدا لكل كائن. عن طريق تغيير الآخرين، ونحن تعديل المظهر.


عندما كل شيء جاهز، دعونا إطلاق واجهة عن طريق الضغط على "تشغيل"، تأكيد حفظ ملف واجهة وحفظ M - ملف، وإعطاء اسم (على سبيل المثال، "فرومتو")، واضغط على "حفظ". بعد ذلك، سيتم إطلاق واجهة المستخدم الرسومية وتظهر كما يظهر أثناء عملها. ماتلاب يولد ملف M ليكون أساسا لبرنامجنا في المستقبل ويفتحه في محرر جزءا لا يتجزأ من.


إذا كان المظهر لا يصلح لك لسبب ما، أغلق واجهة المستخدم الرسومية العمل وترتيب الكائن الصحيح باستخدام المحرر. بلدي التوزيع، على سبيل المثال، لم تظهر مس سانس شريف بشكل صحيح. لذلك كان لي لتغييره ل "بدون ذنابة".


4. بناء واجهة المستخدم.


يمكن برمجة سلوك الواجهة في محرر M-فيل باستخدام لغة ماتلاب. يمثل برنامج الهيكل العظمي الذي تم إنشاؤه بواسطة ماتلاب قائمة بالوظائف التي سيتم استدعاؤها بواسطة المستخدم عند التعامل مع كائنات الواجهة. وظائف فارغة، لذلك واجهة المستخدم الرسومية لا تفعل أي شيء حتى الآن. ومن مهمتنا لملء وظائف مع محتويات اللازمة.


4.1 برمجة زر التصفح.


أولا وقبل كل شيء، نحن بحاجة إلى الوصول إلى ملف تم إنشاؤه بواسطة ميتاتريدر 4، ولذا فإننا سوف تبدأ مع وظيفة تسمى بالضغط على "تصفح".


اسم الدالة يسمى بالضغط على زر يتكون من اسم الزر (التي وضعتها الخاصية "تاج") و بوستفيكس "_Callback". دعونا العثور على وظيفة "pushBrowse_Callback" في نص الملف أو فقط اضغط على "إظهار الوظائف" على شريط الأدوات وحدد "pushBrowse_Callback" في القائمة.


يختلف بناء لغة البرمجة ماتلاب عن القواعد التقليدية للترميز بلغة C و C مثل اللغات. على وجه الخصوص، ليست هناك حاجة لوضع علامة على جسم الدالة مع الأقواس أو تحديد نوع البيانات التي سيتم تمريرها إلى الدالة، وتبدأ فهارس الصفيف (المتجه) مع واحد، وحرف التعليق هو "٪". لذا، فإن النص الأخضر بأكمله أعلاه ليس برنامج ولكن التعليق الذي أدلى به مطوري ماتلاب بالنسبة لنا لتكون قادرة على فهم القضية.


سنحتاج إلى إنشاء مربع حوار لإدخال الاسم الكامل للملف. لهذا، دعونا نستخدم وظيفة "إيجيتفيل":


"مقابض" هنا هو الهيكل الذي يخزن الواصفات من جميع الكائنات في واجهة المستخدم الرسومية لدينا بما في ذلك أن من النموذج، الذي وضعنا لهم. يتم تمرير الهيكل من وظيفة إلى أخرى ويسمح بالوصول إلى الكائنات.


"هوبجيكت" هو واصف للكائن الذي دعا وظيفة.


"سيت" يساعد على تعيين قيمة الكائن لقيمة معينة ويحتوي على بناء الجملة التالي: سيت (object_descriptor، object_property_name، property_value).


يمكنك ايجاد قيمة خصائص العنصر باستخدام الدالة التالية: property_value = جيت (object_descriptor، object_descriptor_name).


ولكن لا ننسى أن الاسم هو قيمة نوع السلسلة، لذلك يجب أن يكون في يقتبس واحد.


آخر شيء علينا أن نعرف عن الأشياء وخصائصها. الشكل، الذي وضعنا عناصر واجهة المستخدم الرسومية، هو في حد ذاته كائن وضعت في الكائن "الجذر" (هو سليله). كما أن لديها مجموعة من الخصائص التي يمكن تعديلها. يمكن عرض الخصائص باستخدام الأداة المسماة "محرر الكائن" ليتم استدعاؤها من شريط الأدوات الرئيسي لمحرر الواجهة. كائن "الجذر"، كما يوحي المصطلح، هو جذر التسلسل الهرمي الكائنات الرسومية وليس له أصل.


الآن دعونا تحقق ما لدينا نتيجة لذلك. سنبدأ الآن واجهة المستخدم الرسومية عن طريق الضغط على تشغيل على شريط الأدوات الرئيسي للمحرر M - ملف. حاول النقر على تصفح وحدد ملفنا. هو على؟ ثم إغلاق واجهة المستخدم الرسومية العمل والمضي قدما.


4.2 برمجة زر البداية، الرسم البياني.


الآن سوف نقوم بتعيين زر ابدأ مع استدعاء الدالة التي من شأنها قراءة البيانات من الملف وتظهر لهم في الرسم البياني.


أولا، دعونا خلق وظيفة نفسها. سوف نحتاج إلى بنية وصفات الكائنات "مقابض" كمدخلات. وجود إمكانية الوصول إلى الكائنات، ونحن سوف تكون قادرة على قراءتها وتحديد خصائصها.


"دلمريد" يقرأ البيانات من الملف النصي مع الفواصل ويحتوي على بناء الجملة التالي: دلمريد (full_file_name، سيباراتور، skip_strings، skip_columns)؛


"طول (كق)" - حجم أكبر من مصفوفة فق؛


"الآن" - الوقت والتاريخ الحاليين.


"داتستر (الآن)" - يحول الوقت والتاريخ إلى نص؛


يجب أن تعرف، كذلك، أن ماتلاب يوفر معلومات مساعدة ضخمة مع النظرية والأمثلة.


دعونا نضع وظيفتنا في نهاية البرنامج (سيكون من الأسهل العثور عليه هناك) وإضافة دعوتها إلى "pushStart_Callback":


إطلاقه باستخدام "تشغيل"، حدد ملف، اضغط على "ابدأ"، والتمتع النتيجة.


4.3 حفظ المسار إلى ملف.


كل شيء هو كل شيء الآن، لكنه أمر مزعج قليلا للنقر بشكل دائم مع الماوس اختيار ملف بعد الضغط على "استعراض". دعونا نحاول حفظ المسار مرة واحدة المحدد.


سنبدأ بالقراءة. اسم ملف تخزين المسار سيتكون من اسم واجهة المستخدم الرسومية و بوستفيكس "_saveparam" ولها امتداد ".mat".


يتم تنفيذ الدالة "FromTo_OpeningFcn" مباشرة بعد إنشاء نموذج واجهة المستخدم الرسومية. سنضيف هناك محاولة لقراءة المسار من الملف. في حالة فشل المحاولة، سيتم استخدام القيمة الافتراضية.


سيتم ترك سلاسل أخرى من الدالة "FromTo_OpeningFcn" دون تغيير.


دعونا تعديل وظيفة "pushBrowse_Callback" على النحو التالي:


4.4 معالجة البيانات.


كعملية مثالية، دعونا استيفاء عمود "فتح" من قبل وظيفة متعدد الحدود من الدرجة الرابعة.


دعونا إضافة التعليمات البرمجية التالية في نهاية وظيفتنا، "عملية":


دعونا نحاول إطلاق واضغط على "ابدأ".


إذا كان لديك نفس النتيجة تقريبا كما هو موضح أعلاه، فقد حان الوقت لبدء حفظ البيانات كملف.


4.5 حفظ البيانات كملف.


إن حفظ البيانات ليس أكثر تعقيدا من قراءتها. "الوحيد" الوحيد هو أن ناقلات "فريسولت" يجب العد التنازلي، أي من الأحدث إلى الأولى. يتم ذلك من أجل تبسيط قراءة الملف في ميتاتريدر 4، بدءا من شريط صفر وحتى ينتهي الملف.


دعونا استكمال وظيفة "عملية" بواسطة التعليمات البرمجية التالية:


الآن، يرجى التأكد من أن الملف الذي يحتوي على النتيجة تم إنشاؤه، وتقع في نفس المكان حيث يوجد الملف الأولي، ولها نفس الاسم تكملها بوستفيكس "_result".


4.6 الموقت التحكم.


هذا هو أصعب جزء من العمل. سيكون لدينا لإنشاء جهاز توقيت التي من شأنها التحقق من ميتاتريدر 4 شكل ملف إنشاء الوقت كل ثانية. إذا تغير الوقت، يجب تشغيل وظيفة "عملية". سيتم تنفيذ الموقت وقف البدء باستخدام "ابدأ". عندما يفتح واجهة المستخدم الرسومية، ونحن سوف حذف جميع أجهزة ضبط الوقت التي تم إنشاؤها من قبل.


دعونا إنشاء الموقت عن طريق وضع التعليمات البرمجية التالية ضمن وظيفة "FromTo_OpeningFcn":


يجب إدخال الرمز أعلاه مباشرة بعد إدراجنا السابق في هذه الدالة، أي قبل السلاسل "handles. output = هوبجيكت؛" و "غويداتا (هوبجيكت، هاندلز)؛".


من خلال تنفيذ هذه التعليمات البرمجية، ماتلاب، على الفور بعد إنشاء واجهة المستخدم الرسومية، وسوف تحقق من توافر أجهزة ضبط الوقت، وحذف تلك الموجودة وإنشاء جهاز توقيت جديد. سوف الموقت استدعاء وظيفة "تشيكتيمي" كل ثانية وتمرير قائمة الواصفات "مقابض" في ذلك. وبصرف النظر عن "مقابض"، فإن الموقت تمرير واصف الخاصة بها إلى وظيفة، فضلا عن الهيكل الذي يحتوي على وقت المكالمة والسبب. لا يمكننا التأثير على هذا، ولكن يجب علينا أن ننظر في هذا عند ترميز وظيفة ليتم استدعاؤها من قبل الموقت.


يمكنك تحديد موقع الوظيفة نفسها حيث تريد. السماح لنفسها الكتابة في شريط الحالة ماتلاب الوقت عندما كان يسمى:


في إنشائها، وتوقف الموقت، والآن يجب علينا إطلاقه. دعونا العثور على وظيفة "pushStart_Callback". دعونا نعلق الدعوة "عملية (مقابض)" وضعت فيه وكتابة إدارة الموقت في ذلك:


الآن دعونا تحقق كيف يعمل كل شيء. دعونا نحاول تمكين وتعطيل الموقت باستخدام "ابدأ". إذا تم تمكين الموقت، يجب أن تعمل الساعة فوق حقل إدخال المسار.


سيكون أكثر صحة لحذف الموقت باستخدام زر "X" عند إغلاق واجهة المستخدم الرسومية. إذا كنت ترغب في القيام بذلك، إضافة.


في بداية الدالة "figure1_CloseRequestFcn". سيتم استدعاء هذه الوظيفة عند إغلاق واجهة المستخدم الرسومية. يمكنك الوصول إليها من محرر واجهة المستخدم الرسومية:


ولكن، يرجى الأخذ بعين الاعتبار أنه الآن، إذا قمت بالضغط على "تشغيل" للمحرر دون إغلاق واجهة المستخدم الرسومية التشغيل، لن يتم حذف الموقت القديم في حين سيتم إنشاء واحد جديد. وفي المرة القادمة سيكون هناك واحد أكثر خلق، وما إلى ذلك يمكنك التعامل مع "غير مستقر" توقيت باستخدام الأمر "حذف (تيمرفيند)" من وحدة تحكم ماتلاب.


الآن، إذا كان كل شيء يعمل بشكل جيد، وسوف نقوم بإنشاء وظيفة للتحقق من الوقت من أحدث تعديل الملف من ميتاتريدر 4:


الدالة "دير (full_file_name)" بإرجاع بنية تحتوي على معلومات الملف (الاسم والتاريخ والبايت، إسدير). سيتم تخزين المعلومات حول وقت إنشاء الملف السابق في الخاصية "وسيرداتا" لكائن الموقت. يتم تمرير واصفها إلى وظيفة "تشيكتيمي" المسماة أوبج.


الآن، عند تغيير ملف تم إنشاؤه بواسطة ميتاتريدر 4، سيقوم برنامجنا الكتابة فوق النتيجة. يمكنك التحقق من ذلك عن طريق تعديل الملف يدويا (على سبيل المثال، حذف أحدث السلاسل) وتتبع التغييرات في المخطط أو الملف الناتج. وبطبيعة الحال، يجب الضغط على زر "ابدأ" في ذلك.


إذا تم إنشاء نافذة إضافية تحتوي على نسخة المخطط أثناء عملية البرنامج، إضافة السلسلة التالية في بداية الدالة "العملية":


5. رسم النتائج في ميتاتريدر 4.


الآن دعونا نعود إلى ميتاتريدر 4. علينا أن نكمل مؤشرنا مع وظيفة من شأنها أن تقرأ النتيجة من ملف ورسمه في الرسم البياني. وسيتم وصف سلوك البرنامج على النحو التالي:


1. إذا تم تلقي شريط جديد: حذف ملف النتيجة القديمة، مسح المخطط، حفظ ملف البيانات.


2. إذا كان ملف النتيجة قابل للقراءة: قراءة الملف، رسم مخطط، حذف ملف النتيجة.


لن أصف هنا كيف أن التعليمات البرمجية أدناه يعمل منذ قراءة البيانات من ملف ورسم المؤشرات يمكن العثور عليها في مقالات أخرى. أنا فقط لاحظ أن يتم حذف ملف النتيجة هنا مباشرة بعد أن تم وضعه في المخطط. لذلك لا تقلق إذا كنت ترى رسائل خطأ متعددة قراءة.


تحدث أخطاء القراءة في حالتين:


1. مباشرة بعد شريط جديد لديه دخل، منذ لم يتم إنشاء ملف النتيجة حتى الآن.


2. مباشرة بعد قراءة النتيجة ورسم المخطط، منذ حذف الملف من أجل عدم قراءة البيانات نفسها.


وهكذا، فإن البرنامج يحتفظ به "قراءة الخطأ" حالة عمليا في كل وقت. :)


وفيما يلي النتيجة النهائية. آمل أن لم أكن ارتكب أي أخطاء، وسوف تكون قادرة على إعادة إنتاجه.


استنتاج.


في هذه المقالة، وصفنا طريقة تنظيم التفاعل بين ميتاتريدر 4 و ماتلاب عبر ملفات كسف. هذه الطريقة ليست فريدة ولا مثالية. قيمة هذا النهج هو أنه يساعد على تبادل صفائف البيانات دون مهارات خاصة للعمل مع أي أدوات البرمجة الأخرى من ميتاتريدر 4 وماتلاب.


ترجمة من الروسية من قبل شركة ميتاكوتس سوفتوار Corp.


ميتاترادر ​​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 - وعادة ما يكون إلى الوراء (أي أن العنصر الأول يحتوي على بيانات أحدث من التالي). تحقق من ذلك باستخدام الدالة أرييسريز (). و ماتلاب يحتوي على الفهرسة التالية: العنصر الأول يحتوي على البيانات القديمة من المقبل - لذلك يجب "عكس" صفائف الخاص بك قبل إرسالها إلى ماتلاب، إذا علم AS_SERIES = ترو. بناء على ما سبق، لنوافق على ما يلي:


أما الصفائف "العكسية" بشكل خفي "لبرامج MQL5، باستثناء صفائف من نوع شار والمصفوفات ثنائية الأبعاد، فلا تتركها دون تغيير.


ولكن هذا ليس القيد الوحيد عند العمل مع المصفوفات. عند العمل مع صفائف متعددة الأبعاد، أو المصفوفات لتكون أكثر صحة، وخاصة من ماتلاب، ونحن نقدم تقييد لا يزيد عن 2 صفائف الأبعاد. هنا لا يمكن أن يكون العلم AS_SERIES ترو، وبالتالي لا يتم "عكس" هذه المصفوفات.


لا تنسى أن السلاسل في MQL5 ليست صفائف من عناصر نوع شار. لذلك عندما تمر السلاسل يأتي مشكلة طفيفة: في سلاسل MQL5 ترميز باستخدام ونيكود، و ماتلاب يستخدم ترميز أنسي. لذلك قبل تمرير سلسلة، يجب تحويلها إلى مجموعة من أحرف أنسي باستخدام الدالة سترينتوشاراراي (). والعكس بالعكس، عندما تحصل على صفيف الأحرف من ماتلاب، وتحويله باستخدام الدالة تشارارايتوسترينغ () انظر الجدول 2). لتجنب الارتباك، توافق: تخزين جميع السلاسل في MQL5-برامج باستخدام ونيكود، لا صفائف من نوع شار.


1.2 مقارنة MQL5 و ماتلاب أنواع البيانات.


من أجل تقليل كمية من الوظائف وتبسيط خوارزمية المكتبة، ونحن سوف يقلل من كمية الأنواع عن طريق التحويل التلقائي، التي لا ينبغي أن تؤثر على سلامة البيانات. يوضح الجدول التالي قاعدة تحويل نوع البيانات من MQL5 إلى ماتلاب:


* مع هذا النوع من التحويل هناك فقدان الدقة. لن نستخدمه، ولكن يمكنك استخدام هذا التحويل في برامجك.


الجدول 2. مقارنة بين MQL5 و ماتلاب أنواع البيانات.


الآن كنت معتادا على أنواع البيانات المستخدمة في MQL5 و ماتلاب. أنت تعرف ما "المزالق" تنتظر في مرور البيانات وكيفية تجاوزها بكفاءة. لا يزال لديك لمعرفة ماتلاب المحرك أبي وتصبح مألوفة مع ماتلاب مترجم 4.


2. ماتلاب المحرك أبي المرجع، ماتلاب مترجم 4 مرجع و C ++ الإدخال / الإخراج مكتبة المراجع.


هذا القسم يقدم لك أهم وظائف ماتلاب المحرك أبي، ملامح ماتلاب كومبيلر 4 وعدد من الوظائف المفيدة من C ++ + المدخلات القياسية / مكتبة الإخراج. لذلك، دعونا نبدأ.


2.1 ماتلاب محرك أبي و مكر وظائف.


ماتلاب إنجين - هو واجهة خارجية تمكن البرامج الأخرى من استخدام سطح المكتب ماتلاب. فإنه يوفر عمل وظيفية بالكامل من جميع حزم ماتلاب دون أي قيود.


على الرغم من أنه لا يقال في الوثائق، ولكن من حيث مبرمج النظام - انها مجرد آلة افتراضية، مثل فب، الخلية، الخ التي تدعم طريقة بسيطة وسريعة نسبيا لتبادل البيانات بين ميتاتريدر 4/5 و ماتلاب.


هذا الأسلوب من ربط البرامج الخارجية مع حزمة ماتلاب يوصى بها المطورين. وتتكون الواجهة من ست وظائف:


المحرك * بينغ = إنغوبين (نول) - هذه الدالة تدعو ماتلاب سطح المكتب، المعلمة دائما نول، إرجاع مؤشر إلى واصف سطح المكتب.


إنت إكسيتكود = إنغكلوس (محرك * بينغ) - هذه الوظيفة تغلق سطح المكتب، وإرجاع عدد المستخدمين المتبقين من سطح المكتب ماتلاب، حيث:


محرك * بينغ - مؤشر إلى واصف سطح المكتب.


مكساراي * مكسفكتور = مسكريتدوبليماتريكس (إنت m، إنت n، إنت كومبليكسفلاغ) - هذه الدالة تخلق متغير (مصفوفة) من سطح المكتب ماتلاب، ترجع مؤشر إلى متغير (مصفوفة)، حيث:


مكساراي * مكسفيكتور - مؤشر لمصفوفة متغير. إنت m - عدد الصفوف. إنت n - عدد الأعمدة. كومبليكسفلاغ - نوع من عدد معقدة، لميتاتريدر 4/5 مكسريل. فواد = مكسديستروياراي (مكساراي * مكسفيكتور) - هذه الوظيفة يدمر مصفوفة ماتلاب، هناك حاجة لمسح الذاكرة، حيث:


مكساراي * مكسفيكتور - مؤشر لمصفوفة متغير. إنت = إنغبوتفاريابل (محرك * بينغ، شار * الاسم، مكساراي * مكسفيكتور) - هذه الوظيفة يرسل متغير إلى سطح المكتب. يجب عليك ليس فقط إنشاء متغيرات نوع مكساراي، ولكن أيضا إرسالها إلى ماتلاب، حيث:


محرك * بينغ - مؤشر إلى واصف سطح المكتب. شار * اسم - اسم متغير من نوع شار في سطح المكتب ماتلاب. مكساراي * مكسفيكتور - مؤشر لمصفوفة متغير. مكساراي * مكسفكتور = إنغتفاريابل (محرك * بينغ، شار * اسم) - هذه الوظيفة يحصل متغير من سطح المكتب - معكوس الدالة السابقة. يتم قبول المتغيرات فقط من نوع مكساراي، حيث:


مكساراي * مكسفيكتور - مؤشر لمصفوفة متغير. محرك * بينغ - مؤشر إلى واصف سطح المكتب. شار * اسم - اسم متغير من نوع شار في سطح المكتب ماتلاب. دوبل * p = مكسيتبر (مكساراي * مكسفيكتور) - هذه الوظيفة تحصل على مؤشر لمجموعة من القيم، يتم استخدامه لنسخ البيانات جنبا إلى جنب مع ممكبي () (انظر 2.3 C ++ ستاندارد إنبوت / أوتبوت ليبراري)، حيث:


مزدوج * p - مؤشر إلى مجموعة من نوع مزدوج. مكساراي * مكسفيكتور - مؤشر لمصفوفة متغير. إنت = إنجفالسترينغ (محرك * بينغ، شار * الأوامر) - هذه الوظيفة يرسل الأوامر إلى سطح المكتب ماتلاب، حيث:


محرك * بينغ - مؤشر إلى واصف سطح المكتب. شار * الأمر - الأمر ل ماتلاب، سلسلة من نوع شار.


ربما لاحظت أن ماتلاب محرك أبي يسمح لك لإنشاء هيكل مكساراي فقط لنوع مزدوج. ولكن هذا التقييد لا يؤثر على إمكانياتك، ولكن سيؤثر على خوارزمية مكتبتك.


كونست شار ** الخيار - سلسلة من الخيارات، كما هو الحال في مسك - R؛ عادة هو نول عدد إنت - حجم خيارات سلسلة، عادة 0.


عند إنهاء عمل المكتبة العامة يجب عليك الاتصال ب:


بول = مكلترميناتابليكاتيون (فواد) - ترجع ترو إذا تم إغلاق مكر بنجاح.


2.2 ماتلاب مترجم 4.


ماتلاب مترجم يتيح لك إنشاء ما يلي من M - وظائف:


التطبيقات المستقلة التي تعمل حتى لو لم يتم تثبيت ماتلاب. C / C ++ المكتبات حصة، التي يمكن استخدامها دون ماتلاب على أنظمة المستخدم النهائي.


كومبيلر يدعم معظم الأوامر وحزم ماتلاب، ولكن ليس كل شيء. يمكن الاطلاع على قائمة كاملة بالقيود على موقع ماتلاب. هذه الطريقة تسمح لك بإنشاء "حزمة مستقلة من البرمجيات" من ميتاتريدر 5 و ماتلاب، ولكن على النقيض من محرك ماتلاب، يتطلب مبرمج تدريبا جيدا والمعرفة العميقة من التجميع.


يتطلب مترجم ماتلاب واحد على الأقل من المبرمجين C / C ++ التالية:


لس C (عادة ما يأتي مع ماتلاب). انها فقط C مترجم. بورلاند C ++ الإصدارات 5.3، 5.4، 5.5، 5.6. ميكروسوفت فيسوال C / C ++ الإصدارات 6.0، 7.0، 7.1.


ماتلاب كومبيلر 4، على النقيض من سابقاتها، يولد فقط رمز واجهة (المجمع)، أي لا يترجم م وظائف في ثنائي أو C / C ++ التعليمات البرمجية، لكنه ينشئ ملف خاص على أساس تكنولوجيا ملف مكون (كتف) التكنولوجيا، التي تشمل دمج حزم مختلفة، المطلوبة لدعم وظائف م. ماتلاب كومبيلر أيضا بتشفير هذا الملف مع فريدة من نوعها (غير متفاعل) مفتاح 1024 بت.


الآن دعونا النظر في خوارزمية ماتلاب مترجم 4 العمل، لأن الجهل من هذا الموضوع سوف يؤدي إلى العديد من الأخطاء غبي في وقت تجميع:


تحليل التبعيات - في هذه المرحلة تحديد جميع الوظائف، وملفات ميكس وملفات P، التي جمعت وظائف م تعتمد على. إنشاء الأرشيف - يتم إنشاء ملف كتف، يتم تشفيرها وضغطها. إنشاء رمز الكائن من المجمع - في هذه المرحلة يتم إنشاء كافة رموز المصدر، اللازمة للمكون: C / C ++ رمز واجهة للوظائف م المحددة في سطر الأوامر (NameFile_main. c). ملف المكون (NameFile_component. dat)، الذي يحتوي على كافة المعلومات المطلوبة لتنفيذ التعليمات البرمجية م (بما في ذلك مفاتيح التشفير والمسارات، المخزنة في ملف كتف). C / C ++ الترجمة. في هذه المرحلة يتم تجميع ملفات التعليمات البرمجية المصدر C / C ++ في ملفات الكائن. ربط. المرحلة النهائية من بناء المشروع.


الآن، عندما تكون معتادا على سلوك خوارزمية ماتلاب كومبيلر، يجب عليك معرفة المزيد عن المفاتيح من أجل الحصول على خطة تفصيلية للإجراءات عند استخدام المترجم (مسك):


الجدول 3. مفاتيح ماتلاب مسك مترجم (الإصدار 4)


يحتوي الجدول 3 على مفاتيح أساسية قد تكون مفيدة في حل المشاكل النموذجية. للحصول على مزيد من المساعدة، استخدم أوامر ماتلاب تساعد مسك أو دوك مسك.


علينا أن نتعرف على ماتلاب رابط، أدناه هي المفاتيح الرئيسية (مبويلد):


جدول 4. ماتلاب مبويلد رابط (الإصدار 4) مفاتيح.


ويعرض الجدول 4 المفاتيح الرئيسية. لمزيد من المعلومات استخدام أوامر مبويلد مساعدة أو وثيقة مبويلد.


2.3 C ++ المدخلات القياسية / مكتبة الإخراج.


يوفر استخدام مكتبة الإدخال / الإخراج القياسي النسخ الصحيح للبيانات. استخدامه سوف يوفر لك من "غبي" الأخطاء التي تنشأ خلال مرحلة تصميم البرنامج (على سبيل المثال: العديد من المبرمجين المبتدئين نسخ مؤشر فقط إلى كتلة الذاكرة بدلا من نسخ كتلة الذاكرة بالكامل). من مكتبة الإدخال / الإخراج بأكملها نحن مهتمون فقط في وظيفة واحدة:


فواد * بين - مؤشر إلى مجموعة، حيث لنسخ. فواد * بوت - مؤشر إلى صفيف، الذي يتم النسخ. إنت نزيزيبيت - حجم البيانات المنسوخة، يجب ألا يتجاوز حجم صفيف p، وإلا سيتم حدوث خطأ في الوصول إلى الذاكرة.


3. الممارسة.


الآن نحن نفعل مع النظرية ويمكننا المضي قدما في تحقيق ميتاتريدر 5 & أمب؛ ماتلاب التفاعل.


كما كنت ربما خمنت، سيتم ذلك بطريقتين: استخدام ماتلاب محرك الجهاز الظاهري واستخدام المكتبات التي تم إنشاؤها بواسطة مترجم ماتلاب. أولا، النظر في طريقة بسيطة وسريعة وتنوعا من التفاعل - عن طريق محرك ماتلاب.


هذا الجزء من المادة يجب أن يقرأ من البداية إلى النهاية، كما، على الرغم من الفرق بين طرق التفاعل على ما يبدو، لديهم فلسفة واحدة وبناء على دراية من اللغة يبني، وتعلم شيء جديد هو أسهل مع أمثلة بسيطة.


3.1 تطوير المكتبة العالمية لميتاتريدر 5 & أمب؛ ماتلاب محرك التفاعل.


هذا الأسلوب من التفاعل لا يمكن أن يسمى أنيقة وسريعة، ولكن هو الأكثر موثوقية ويغطي كامل حزمة ماتلاب. وبطبيعة الحال، ينبغي أن نذكر سرعة تطوير النموذج النهائي. جوهر التنمية هو كتابة مجمع مكتبة عالمية ل ميتاترادر ​​4/5 & أمب؛ ماتلاب محرك التفاعل. بعد هذا ميتاتريدر 4/5 النصي / مؤشر / خبير يمكن إدارة ماتلاب سطح المكتب الظاهري. والخوارزمية الرياضية بأكملها قد يتم تخزينها في برنامج مقل كما السلاسل، حتى تتمكن من استخدامها لحماية الملكية الفكرية الخاصة بك (لمزيد من التفاصيل انظر "حماية نفسك، المطورين!" المادة). كما يمكن تخزينها في وظائف م أو وظائف P منفصلة الملفات في المجلد & لوت؛ ميتاتريدر 5 & غ؛ \ MQL5 \ المكتبات.


المجالات المحتملة لتطبيق هذا التفاعل:


لاختبار أو إظهار "النماذج الرياضية / الأفكار" دون الحاجة إلى كتابة برامج معقدة (حماية الملكية الفكرية يمكن ترتيبها كما هو الحال في برنامج مقل وعن طريق حزمة ماتلاب - باستخدام وظائف P). لكتابة نماذج رياضية معقدة باستخدام جميع ميزات ماتلاب. لجميع أولئك الذين لن يتم توزيع مخطوطاتهم / المؤشرات / الخبراء.


دعونا المضي قدما. آمل أن تكون قد قرأت 1.1 أنواع البيانات في ماتلاب و MQL5، 1.2 مقارنة MQL5 و ماتلاب أنواع البيانات، 2.1 ماتلاب محرك أبي و مكر وظائف و 2.3 C ++ المدخلات القياسية / أقسام مكتبة الإخراج، ونحن لن توقف وقياسها بعد الآن . قراءة بعناية مخطط كتلة التالية، التي توضح خوارزمية المكتبة في المستقبل:


الشكل 1. مخطط كتلة خوارزمية المكتبة.


كما رأينا في الشكل 1، المكتبة تتكون من ثلاث كتل رئيسية. النظر في أغراضها:


كتلة MQL5، التحضير الأولي للبيانات المرسلة / المستلمة: المصفوفات العكسية. تحويل الأنواع. سلاسل ترميز التحويل. C / C ++ كتلة: تحويل صفيف في هيكل مكساراي. يمر أوامر محرك ماتلاب. ماتلاب كتلة المحرك - نظام الحسابات.


الآن، دعونا نتعامل مع الخوارزميات. سنبدأ مع كتلة MQL5. وقد لاحظ القارئ منتبهة بالفعل أنه سيركز على تنفيذ ما كتب في أنواع البيانات في ماتلاب وقسم MQL5. إذا كنت قد غاب عن ذلك، عليك بالكاد فهم لماذا كل هذا ضروري.


خوارزمية ملينبوت & لوت؛ variable_type & غ؛ وظائف متطابقة تقريبا. دعونا نناقش عملها باستخدام ملينبتودوبل () الدالة التي توفر مدخلات من متغيرات من نوع مزدوج إلى ماتلاب الجهاز الظاهري.


هنا هو النموذج:


بول ملينبتدوبل (مزدوج & أمب؛ صفيف []، إنت سيزاراي، سلسلة نيماراي)، حيث:


صفيف - إشارة إلى متغير أو صفيف من نوع مزدوج.


تحويل سلسلة ناماراي إلى مجموعة صفيف باستخدام الدالة سترينغتوشاراراي (). تحقق من نوع الفهرسة باستخدام الدالة أرييسريز (). إذا كان نوع الفهرسة أمر طبيعي - قم بتمرير القيمة إلى الدالة ملكسينبوتودوبل ().


فهرسة إلس مجموعة المرات: صفيف "عكسي" وقيمة تمرير إلى الدالة ملكسينبتودوبل ().


خوارزمية ملجيت & لوت؛ variable_type & غ؛ وظائف هي أيضا متطابقة تقريبا. دعونا نناقش عملها باستخدام الدالة ملجيتدوبل ()، التي ترجع متغير نوع مزدوج من الجهاز الظاهري ماتلاب.


إنت ملجيتدوبل (مزدوج & أمب؛ صفيف []، إنت سيزاراي، سلسلة نيماراي)، حيث:


صفيف - إشارة إلى متغير أو صفيف من نوع مزدوج.


تحويل سلسلة ناماراي إلى مجموعة صفيف باستخدام الدالة سترينغتوشاراراي (). البحث عن حجم المصفوفة باستخدام الدالة ملكسيتزيزيوفنام (). إذا كان حجم أكثر من صفر، تخصيص مجموعة المتلقي من الحجم المطلوب باستخدام أرايرزيزي () وظيفة، والحصول على بيانات من ملكيستدوبل ()، حجم صفيف العودة. إذا كان حجم زيرو، خطأ في الإرجاع، أي قيمة فارغة.


هذا هو! و ملجيتينت () و ملجيتلوجيكال () وظائف تنتج "الظل" تحويل أنواع مزدوجة - & غ ؛؛ إنت / بول. لهذا الغرض إنشاء هذه الوظائف مؤقت الذاكرة المؤقتة في أجسادهم. هذا هو إجراء قسري، لسوء الحظ أبي ماتلاب لا يسمح لإنشاء هياكل مكساراي لأنواع البيانات الأخرى من ضعف. ومع ذلك، هذا لا يعني أن ماتلاب تعمل حصرا أنواع مزدوجة.


C / C ++ كتلة أسهل بكثير - ينبغي أن توفر ترجمة البيانات من نوع مزدوج في هيكل مكساراي. يتم ذلك باستخدام مسريتدوبليماتريكس ()، مكسجيتبر () و ممكبي () وظائف. ثم، باستخدام إنغبوتفاريابل () وظيفة تمرير البيانات إلى الجهاز الظاهري ماتلاب، واستخراج البيانات يستخدم الدالة إنجيتفاريابل (). مرة أخرى، والانتباه إلى وظائف مع البادئات إنت والمنطقية - كما رأينا في مخطط كتلة، فإنها لا تتفاعل مباشرة مع ماتلاب، ولكن استخدام وظائف مكسينبوتودوبل / ملكيكسدوبل و ملكسينبوتشار (). خوارزمية سلوكهم بسيطة: استدعاء الدالة ملكسينبتودوبل / ملكسيتدوبل - قيم الإدخال / الإخراج كما مزدوجة (!) وإرسال الأمر "الظل" ماتلاب لتحويل نوع البيانات عبر الدالة ملكسينبوتشار ().


ماتلاب كتلة المحرك هو أسهل. It provides only mathematical functions. Its behavior depends on your commands and your m/p-functions.


Now, when all the "details" of the project are clear, it's time to deal with project building.


Any such build begins with the creation of main library — in our case it is C/C++ 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, C/C++ 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 can't have spaces and punctuation. Here is the text of the DllUnit. def file from MATLABEngine. zip archive:


So, we have the first file of project. Now open Windows Explorer and go to the '<MATLAB>\Extern\include' folder. Copy the engine. h file (header file of MATLAB virtual machine) to folder, where you project is built (if you won't do this, you will have to manually specify the path to file at the stage of compilation).


Now it's time to create C/C++ 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 it's 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 Win32/64 API.


Consider how to declare a function:


extern "C" __declspec(dllexport) <variable_type> __stdcall Function(<type> <name>)


extern "C" __declspec(dllexport) — tells C++ compiler that function is external. <variable_type> — 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, it's a standard for Win32/64 API. Funcion — your function name. <type> <name> — type and name of input variable, maximal number of variables is 64.


C/C++ block building: for this you need to include standard input/output library and add to project the following files (in your compiler: Project->Add Project):


<MATLAB> — MATLAB main folder.


<win32/64> — either win32 folder for 32-bit OS, or win64 for 64-bit OS.


<compiler> — the "borland" folder for Borland C/C++ 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)" . Let's see how to manually create a public library. We will consider how it's done in Visual C++ and in Borland C++:


<MATLAB> — MATLAB main folder.


<win32/64> — 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 <compiler _folder>\bin\*lib*.exe.


By the way, I forgot to warn you - don't 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 C/C++ compiler. Getting down to compilation, after which we get a library, that should be placed in the terminal_folder\MQL5\Libraries folder.


Now let's 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", you'll get memory access error (in the best case for you, MetaTrader 5 will quietly handle the error in the SEH-frame, but we HAVEN'T WRITE a SEH-frame, so we can even miss the reason of error). void& NameArray[] ; // This method of passing allows you to read and edit array contents, but you must retain array size.


If function doesn't accept or doesn't pass parameters, always specify the void type.


2. We won't describe all functions of the MQL block, because you can find MatlabEngine. mq5 source code in MATLABEngine. zip.


Therefore, we'll 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, it's 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 it's not needed, as we use dynamic buffers.


Now that you've finally understood MATLAB virtual machine, you can begin using DLL built in MATLAB environment.


3.2 Technical guidelines of building/using DLL generated by MATLAB Compiler 4.


In the previous section you've 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. That's why MATLAB mathematical package has a built-in compiler, that allows you to create "standalone applications" independent from MATLAB package. Let's 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:


<terminal_dir>\MQL5\Libraries <terminal_dir> Current folder System folder <windows_dir>\SYSTEM32; <windows_dir> 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 C/C++ 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.


-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, let's 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 C/C++ projects NeoSMA_mcc_component_data. c — C version on component (used for compliance with CTF-file, contains paths, etc.) NeoSMA_mcc_component_data. obj — object version of component (source file containing machine and pseudo code);


So let's handle with 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 initialization/deinitialization : BOOL <NameLib>Initialize(void)/void <NameLib>Terminate(void) — are needed to start/unload Math Work environment before using library functions and at the end of their use. Exported m-functions – void mlf<NameMfile>(int <number_of_return_values>, mxArray **<return_values>, mxArray *<input_values>, . ), where:


<number_of_return_values> — number of returned variables (don't confuse with array size, etc.). mxArray **<return_values> — address of mxArray structure where the results of m-function work will be returned. mxArray *<input_values> — 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 can't directly call these functions from MetaTrader 5, as it will not understand this type of data. We won't 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 won't parse its algorithm and proceed directly to the code. To do this, create two small files in your C/C++ compiler:


Build the project in your C/C++ compiler: for this you need to include standard input/output library and add to project the following files (in your compiler: Project->Add Project):


<MATLAB> — MATLAB main folder.


<win32/64> — either win32 folder for 32-bit OS, or win64 for 64-bit OS.


<compiler> — the "borland" folder for Borland C/C++ 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 & 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 <terminal_dir>\MQL5\Libraries NeoSMA. ctf <terminal_dir>\MQL5\Libraries nnSMA. dll <terminal_dir>\MQL5\Libraries.


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):


استنتاج.


So, you know how to create a universal library for MetaTrader 5 & MATLAB interaction, and how to connect DLL built in MATLAB environment. But still there are interfaces of MetaTrader 5 & MATLAB interaction to be described, but this is beyond the scope of this article. The topic of this article is covered in details. I've chose the most effective ways of interaction, not requiring a special kind of "adapters". Although you can go "another way", such as technology - How to Export Quotes from MetaTrader 5 to Applications Using WCF Services.


Many readers may have a question: what method to choose? The answer is simple - both, because during the design/debugging of mathematical model the speed is not needed. But you'll 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, you'll need speed, multitasking (work of indicator and/or trade system at several price charts) - here without a doubt you'll 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 and/or trade system users). It makes no sense to create Dll in the MATLAB environment for one or two users (it's 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 and/or mechanical trade system dynamic genetic algorithm in mechanical trade system (dynamic strategy tester) dynamic neural network algorithm in the indicator and/or 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.


الأدب.


MATLAB built-in help. MQL5 built-in help. Jeffrey Richter. Programming Applications for Microsoft Windows.


ترجمة من الروسية من قبل شركة ميتاكوتس سوفتوار Corp.


MatlabTrading.


مدونة ل ماتلاب & # 174؛ المستخدمين المهتمين في استراتيجيات التداول الحسابية، باكتستينغ، تداول أزواج، المراجحة الإحصائية الخ.


الأربعاء، 7 ديسمبر، 2018.


اختبار وتحليل استراتيجيات التداول الحسابية في ماتلاب (الجزء 4) & # 8211؛ الخوارزميات الجينية.


تحسين الخوارزميات الجينية.


على الرغم من أن مبدأ وراثي (التطورية) خوارزمية هو موضح بشكل جيد جدا في ندوات ماثوركس على شبكة الإنترنت، ومع ذلك، فإنه يستخدم فقط لتحسين اختيار مجموعة استراتيجية من مجموعة. هذا هو مثال جيد على استخدام هذه الخوارزميات، ومع ذلك، فإنه يحدث أن هناك حاجة إلى تعيين العديد من المتغيرات مع فترات كبيرة لاستراتيجية واحدة، لا تحصل من خلال تكرار واحد والتوازي من العمليات & # 8211؛ الحسابات يمكن أن يستغرق عدة أيام. بالتأكيد، هناك استراتيجيات في المرحلة النهائية من التحسين، عندما نعلم تقريبا تقريبا استراتيجية التداول ناجحة، يمكننا أن ننتظر لعدة أيام أيضا أو استئجار الكتلة بأكملها - النتيجة قد يكون يستحق كل هذا العناء. ومع ذلك، إذا كنا بحاجة إلى "تقدير" نتائج استراتيجية "ضخمة" وتقرر ما إذا كان يستحق ذلك لقضاء الوقت، ثم الخوارزميات الجينية قد تكون مناسبة تماما.


الطريقة الخطية & # 8211؛ بل هو وضع المعتاد من الفرز الذي سترى جميع النتائج المتوسطة (دون المستوى الأمثل). أنه يعطي أقصى قدر من الدقة. الطريقة الموازية & # 8211؛ سيتم استخدام جميع حبات وحدة المعالجة المركزية الخاصة بك. أنها لا تسمح لرؤية نتائج وسيطة، ولكن إلى حد كبير يسرع العملية. أنه يعطي أقصى قدر من الدقة خلال زيادة سرعة الحساب. الطريقة الوراثية & # 8211؛ فإنه يستخدم خوارزمية التحسين التطوري. انها تسمح لرؤية القيم دون الأمثل، ولكن يعطي النتيجة على مقربة من أفضل. انها ليست طريقة دقيقة جدا، ولكنها دقيقة بما فيه الكفاية ل "تشغيل" الأولي للاستراتيجية. سريع جدا.


الاثنين 5 ديسمبر 2018.


اختبار وتحليل استراتيجيات التداول الخوارزمية في ماتلاب (الجزء 3) & # 8211؛ تصور العملية.


التصور لعملية الاختبار.


في تجربتي العمل، وأنا في كثير من الأحيان تحليل منصات شعبية أخرى لاختبار استراتيجية التداول، مثل ترادستاتيون، ميتاستوك، مولتيشارتس الخ، وكنت مندهشا دائما في كيفية إيلاء القليل من الاهتمام لتصور عملية الاختبار. الشيء هو أنه عندما لا نرى نتائج القيم المتوسطة، دون الأمثل من المعلمات الأمثل، ونحن في كثير من الأحيان رمي بعيدا الذهب جنبا إلى جنب مع الأوساخ. المسألة هي بسبب أخذ العينات على نطاق واسع بشكل مفرط، واستراتيجية ضبط المعلمات الطريقة إما أن نرى "استراتيجية مثالية" الذي فشل في الحياة الحقيقية أو رؤية واحد أو صفقتين، والتي من المفترض أن الأفضل لأنه تم اختيار مثل هذه البيانات الفاصل الزمني حيث ستكون أفضل استراتيجية تداول "شراء واستمرار"، ولكن لماذا هي استراتيجيات أخرى ضرورية لذلك؟


ماذا لو كان هناك أكثر من 4 أبعاد؟ عندما ترى ما هي الإشارات وعلى أي تردد تظهر في النطاق السعري، لديك تقريبا كل ما يلزم من التمثيل البصري لاستراتيجيتك: وتيرة المعاملات، وربحيتها (منحنى الدخل)، ودقة الافتتاح، والتشابه مع غيرها القيم المثالية، إلخ. التي لا يمكن أن يقال عن الأداء في الفضاء N الأبعاد، حيث أن جميع المعلومات المفيدة هي، في الواقع، أن القيمة المثلى ليست واحدة فقط ولكن هناك مجموعة كاملة من القيم دون الأمثل في واحد أو أكثر من المجالات.


أثناء تحسين إستراتيجية في وفاتولبوكس & # 8211؛ أداة تحليل المشي إلى الأمام ل ماتلاب & # 174؛ كما تم العثور على القيمة المثلى الجديدة، وإشارات استراتيجية التداول في الفترة في العينة وخارج العينة تظهر على الفور على الرسم البياني، حتى تتمكن من التحكم دائما ما مجموعة من الخيارات يجب عليك تعيين، وأيضا يمكنك إيقاف التحسين دون انتظار نهاية الاختبار، كما يتضح أن شيئا ما حدث خطأ أو كل شيء على ما يرام.


الأربعاء، 30 نوفمبر 2018.


اختبار وتحليل استراتيجيات التداول الخوارزمية في ماتلاب (الجزء 2) & # 8211؛ واجهة المستخدم الرسومية سهلة الاستخدام.


واجهة المستخدم الرسومية سهلة الاستخدام.


دعونا نبدأ مع حقيقة أنه لا توجد واجهة رسومية لأنه إذا افترضنا أن العملية برمتها من اختبار وتحليل استراتيجيات التداول هي موحدة (هو 99٪)، وكنت ترغب في الحصول على واجهة التي تساعدك على استدعاء البيانات اللازمة وبدء عملية الاختبار مع ضغطة واحدة.


للمستخدمين الجدد (وليس فقط) من ماتلاب هو أكثر ملاءمة لاستخدام واجهة المستخدم الرسومية مع أزرار وحقول دخول من للبحث في التعليمات البرمجية. لذلك، هناك واجهة المستخدم الرسومية حتى في أدوات أدوات ماثوركس في معظم الحالات لأنه أكثر ملاءمة. فإنه يسمح التركيز فقط على رمز الاستراتيجية الخاصة بك لأن استخدام واجهة المستخدم الرسومية لا يعني على الإطلاق أنه يحد بطريقة أو بأخرى قدرتك على كتابة استراتيجية.


وهكذا، في وفاتولبوكس، أنشأنا إمكانية كتابة أي رموز لاستراتيجية الخاص بك، وذلك باستخدام أي من علب أدوات ماتلاب والعمل مع أصول متعددة للاستراتيجيات مثل التداول أزواج، سلة التداول أو التحكيم الثلاثي، وما إلى ذلك؛ ولكن في نفس الوقت يتم دمج هذا الرمز بسهولة في واجهة المستخدم الرسومية من خلال استخدام أنماط، والتي هي بسيطة بما فيه الكفاية لتطبيق في التعليمات البرمجية وأنها لا تحد من الفرص.


الثلاثاء، 29 نوفمبر 2018.


اختبار وتحليل استراتيجيات التداول الحسابية في ماتلاب (الجزء 1) - مقدمة.


كيف بدأ كل شيء.


وكان عام 2008 (إذا لم أكن مخطئا) عندما تم إطلاق أول ندوة على التداول الخوارزمي في ماتلاب مع علي كازام، وتغطي موضوع تحسين الاستراتيجيات البسيطة على أساس المؤشرات الفنية، وما إلى ذلك على الرغم من & # 8220؛ الفوضى & # 8220 & # 8220؛ 8221؛ رمز، كانت أدوات مثيرة للاهتمام بما فيه الكفاية للاستخدام. وكانت بمثابة نقطة انطلاق للبحث وتعزيز نموذج الاختبار والتحليل الذي يسمح باستخدام كل قوة أدوات الأدوات وحرية الإجراءات ماتلاب خلال إنشاء استراتيجيات التجارة الخاصة بها، وفي الوقت نفسه أنها تسمح للسيطرة على العملية من الاختبار والبيانات التي تم الحصول عليها وتحليلها اللاحق سيختار محفظة فعالة من أنظمة التداول القوية.


لماذا يجب على كل ألكوترادر ​​إعادة اختراع العجلة؟


ومع ذلك، لم تقدم ماثووركس حلا كاملا لاختبار وتحليل الاستراتيجيات & # 8211؛ تلك الرموز التي يمكنك الخروج من ندوات عبر الإنترنت كانت "عناصر" فقط من اختبار النظام الكامل، وكان من الضروري تعديلها، وتخصيصها، وإضافتها إلى واجهة المستخدم الرسومية لسهولة الاستخدام. لقد استغرق الأمر وقتا طويلا، مما يطرح سؤالا: أيا كانت الاستراتيجية، يجب أن تمر بنفس عملية الاختبار والتحليل، مما يسمح بتصنيفها على أنها مستقرة وقابلة للاستعمال & # 8211؛ فلماذا يجب على كل ألكوترادر ​​إعادة اختراع العجلة وكتابة له / لها التعليمات البرمجية الخاصة لاستراتيجيات الاختبار المناسبة في ماتلاب؟


قررنا أن ندعو حل وفاتولبوكس - المشي إلى الأمام أدوات التحليل الذي الإصدار التجريبي كانت متاحة على وفاتولبوكس منذ عام 2018.


الاثنين، 7 نوفمبر 2018.


قف ؟! ماذا حدث مع المدونة؟


ماذا حدث مع المدونة؟


1. جيف كوزنيتسوف ليس المالك بعد الآن.


2. لقد غيرت العلامة التجارية.


ماذا سيحدث للمدونة؟


1 - المزيد من الوظائف والمقالات.


نأمل أن تجلب الحياة لهذه المدونة عن طريق نشر محتويات ذات الصلة مرة أو مرتين في الأسبوع. في الأشهر القليلة الأولى، سنقوم بنشر معظم هذه المقالات وأشرطة الفيديو التي لدينا بالفعل لجعل من الأسهل على القراء الأعزاء لدينا للبحث عن معلومات عن مورد واحد وربطها عليها.


أزواج المراجحة الإحصائية التداول / يعني انعكاس / السوق استراتيجيات التداول محايدة على أساس التكامل المشترك / بولينجر العصابات / كلمان مرشح الخ للسلع والأسهم وفوركس. الاتجاه التالي استراتيجيات مع جوريك المتوسط ​​المتحرك وغيرها من المرشحات الرقمية المتطورة. استراتيجيات التنبؤ مع التعلم الآلي (آلات دعم ناقلات) وغيرها من الأساليب. خلق استراتيجيات تداول قوية باستخدام البصرية إلى الأمام اختبار إدارة الأموال لإعادة استثمار رأس المال الخاص بك (العلم حول كيفية الحصول على 1M $ من 10K $ في السنة مع الحد الأقصى، ولكن المقدرة المخاطر والعرق المكافآت). ربما بعد قراءة هذا كنت قد ظننت أن هذا سيكون مقالا آخر البكم لأولئك الفقراء الذين يسعون كيف تصبح غنية من خلال "التداول على الفوركس" وكل ذلك. حسنا، هذا هو كاذبة تماما! نحن نعمل في ماتلاب، وغالبيتنا من العلماء والخبراء في هذا الجانب لذلك كل شيء خطير.


2. المزيد من التفاعل.


الثلاثاء، 1 يناير 2018.


انتعاش يومي.


قواعد بسيطة ومتشابهة لاستراتيجية اختبرت في آخر مشاركة:


إذا تجاوز شريط عودة الزوج 1 على Z النتيجة، والتجارة في شريط المقبل.


النتيجة تبدو جميلة جدا:


إذا كنت تعتقد أن هذا المخطط هو جيد جدا ليكون صحيحا، وهذا هو الحال في الواقع الحال. لم تؤخذ في الاعتبار أي تكاليف معاملات أو انتشار عرض الأسعار. في الواقع، أود أن أشك في أنه سيكون هناك أي ربح اليسار بعد طرح جميع تكاليف التداول.


ومع ذلك، هذا النوع من الرسوم البيانية هو تعلق الجزر أمام أنفي، مما يجعلني أذهب.


الأحد، 30 ديسمبر، 2018.


هل تداول أزواج ميت؟


من هذه إتفس يمكن إجراء 90 أزواج فريدة من نوعها. كل زوج هو الذي شيد كسوق محايدة الانتشار.


في كل يوم، لكل زوج، وحساب ض النتيجة على أساس 25 يوما الانحراف المعياري.


إذا كانت النتيجة Z & غ؛ عتبة، تذهب قصيرة، وثيقة في اليوم التالي.


إذا كانت النتيجة س & لوت؛ - threshold تذهب طويلة، بالقرب من اليوم التالي.


في ما يلي النتائج المحاكية لعدة عتبات:


ليست هذه هي المرة الأولى التي جئت عبر هذا التغيير في يعني عكس السلوك في إتفس. بغض النظر عن ما حاولت، لم يكن لي الحظ في العثور على استراتيجية التداول أزواج من شأنها أن تعمل على إتفس الماضي 2018. استنتاجي هو أن هذه الأنواع من نماذج ستات أرب بسيطة فقط لا قطعه أكثر من ذلك.


وفاتولبوكس - المشي إلى الأمام أدوات التحليل.


ماتلاب الوظيفة الإضافية لتطوير استراتيجيات التداول خوارزمية في ماتلاب طريقة سهلة.


Matlab , Equity signals/indicators testings.


Бюджет $ 30-250 أوسد.


Freelancer Роботи Matlab and Mathematica Matlab , Equity signals/indicators testings.


Rf. project attached.


Шукаєте، як заробити؟


Вкажіть свій бюджет та часові рамки.


Опишіть свою пропозицію.


Отримайте плату за свою роботу.


Реєстрація та подання заявок у проекти є безкоштовними.


9 фрілансерів(-и) у середньому готові виконати цю роботу за $162.


ولم يقدم بعد اقتراح.


-----------------------------Pro MATLAB Developer! Best Result in Time!------------------------------- Dear, sir. Your project is very interesting to me, because I've really rich experience in MATLAB simulation and p Більше.


مرحبا. I think I will be able to do this. Please provide more information. مع تحياتي.


مرحبا! My name is Fernando Téllez. I am a senior year student of electrical engineering at Universidad Simón Bolívar (USB), one of the most prestigious universities in my country (Ranked 34° at the QS University Rankings: Більше.


I have a great experience in this field. Kindly contact me now and I’m sure we will make a reasonable deal thanks a lot.


Hello, Dear friend. I am expert in matlab, physics, math. I have a lot of experiences in many fields. I can help you well. الرجاء التواصل معي. تحياتي الحارة.


مرحباً. I would be glad to help you out with this project. I have more than 6 yrs of experience coding in Matlab. Alsa, I have done financial analysis before, which is why I can guarantee an excellent job and deliver Більше.


Dear Sir/Madam I have considerable experience working as a software developer on indicators, strategies and trading software. I am also proficient in use of MATLAB, among other programming languages and environments Більше.


مرحبا! I read your description carefully. I have confidence about your project because I have rich experiences in matlab/Simulink, Mathematics, Statistics, Machine learning and so on. Please feel free to discuss wit Більше.


DEAR HIRING MANAGER we are a groupement of more engineers in different speciality (industrial, mechanical, electrical, material, minning, civil. )very good at mechanical, electrical, control and automation, flui Більше.


Dear, sir. I read your requirement very carefully, and I'm sure this project is just for me. I'm a professional mathematician on the fields of calculus, differential equation, optimization and probability&statistics Більше.


Computer Systems Engineer. Done projects on matlab for Digital Signal Processing and Mathematica.


Hi, I have already made this job for my own research on forex trading strategies. I have all tools needed (Matlab+Financial Toolbox) and I can deliver you a good analysis of your financial indicators. Ludwig.


Hello, We wish to apply for your project. We have completed several projects on Matlab locally for individuals before considering an online platform like freelancer thus we have a strong background and sound experienc Більше.


Шукаєте، як заробити؟


Вкажіть свій бюджет та часові рамки.


Опишіть свою пропозицію.


Отримайте плату за свою роботу.


Реєстрація та подання заявок у проекти є безкоштовними.


Інші роботи від цього роботодавця.


Схожі роботи.


Потрібно найняти фрілансера для роботи؟


Це безкоштовно - зареєструватися، написати، що саме вам потрібно، і отримати безкоштовно цінові пропозиції за кілька секунд.


Допомога та підтримка.


Про нас.


Додатки.


فريلانسر & ريج؛ هي علامة تجارية مسجلة لشركة فريلانسر تيشنولوغي بتي ليميتد (أن 142 189 759)


كوبيرايت & كوبي؛ 2017 فريلانسر تيشنولوغي بتي ليميتد (أن 142 189 759)


Butterworth Filter.


EN : The Butterworth filter (or “maximally flat”) is one of the simplest electronic filters . Its purpose is to obtain a frequency response of the flat as possible in the passband . Applied to the retail price index aims to filter out the “noise” and give you an indication on the direction of the more readable price.


IT: Filtro di Butterworth Il filtro Butterworth (o “massimamente piatto”) è uno dei più semplici filtri elettronici. Il suo scopo è ottenere una risposta in frequenza il più possibile piatta nella banda passante. Applicato all’evoluzione dei prezzi mira a filtrare il “rumore di fondo” e dare un indicazione sulla direzione del prezzo più leggibile.


شارك هذا.


لا توجد معلومات عن هذا الموقع هي المشورة في مجال الاستثمار أو التماس لشراء أو بيع أي أداة مالية. الأداء السابق لا یشیر إلی النتائج المستقبلیة. التداول قد يعرضك لخطر الخسارة أكبر من الودائع الخاصة بك، وهي مناسبة فقط للمستثمرين ذوي الخبرة الذين لديهم ما يكفي من الموارد المالية لتحمل هذه المخاطر.


برولتيمي ملفات إيتف والمرفقات الأخرى:


الجديد! برك أيضا على يوتيوب، الاشتراك في قناتنا لمحتوى الحصري والبرامج التعليمية.


Volendo aumentare l’effetto filtrante, quali parametri dovrei modificare?


puoi sostituire nella riga di comando.


Butterworth = Butterworth[1] - (Butterworth[2] / 3.414) + Close * ( 1 /3.414)quest\'altra.


Butterworth = Butterworth[1] - (Butterworth[2] / 3.414) + Close * ( G /3.414)G = numeri interi da 1 in su.


Con G == 2 —> (2 / 3.414)…. la linea sparisce.


La formula corretta per accentuare il filtro tramite parametro G è:


Butterworth = Butterworth[1] – (Butterworth[2] / (G*3.414)) + Close * ( 1 /(G*3.414))


Do I need to change the code accordingly to your formula?


ciao Fabio … non hai mica tutti i torti … la notte bisognerebbe dormire per non scrivere baggianate 🙂


// Filtro di Butterworth.


IF BarIndex < 2 THEN.


Butterworth = Butterworth[1] - (Butterworth[2] / (G*3.414)) + Close * ( 1 /(G*3.414))

Comments

Popular posts from this blog

ميجوريس إستراتيغيكس فوريكس غراتيس

مدرسة تداول العملات الأجنبية في كينيا

كيفية اختيار أفضل وسيط الفوركس