Wednesday 28 February 2018

مخطط الرسم البياني لمثال نظام التداول


أومل - مخططات الكائنات.
وتستمد المخططات الكائن من المخططات الطبقية بحيث تعتمد المخططات الكائن على المخططات الطبقية.
تمثل المخططات الكائن مثالا لرسم تخطيطي للفئة. المفاهيم الأساسية متشابهة لمخططات الطبقات ومخططات الكائن. تمثل المخططات الكائن أيضا عرض ثابت لنظام ما ولكن هذا العرض الثابت هو لقطة من النظام في لحظة معينة.
يتم استخدام المخططات الكائن لتقديم مجموعة من الكائنات وعلاقاتها كمثال.
الغرض من مخططات الكائنات.
وينبغي فهم الغرض من الرسم البياني بوضوح لتنفيذه عمليا. وتتشابه أغراض المخططات الكائنية مع المخططات الطبقية.
الفرق هو أن الرسم البياني للطبقة يمثل نموذجا تجريبيا يتكون من الطبقات وعلاقاتها. ومع ذلك، يمثل الرسم البياني الكائن مثيل في لحظة معينة، وهي ملموسة في الطبيعة.
وهذا يعني أن الرسم البياني الكائن أقرب إلى سلوك النظام الفعلي. والغرض من ذلك هو التقاط صورة ثابتة للنظام في لحظة معينة.
يمكن تلخيص الغرض من الرسم البياني الكائن كما & ناقص؛
إلى الأمام والهندسة العكسية.
علاقات كائن النظام.
عرض ثابت للتفاعل.
فهم سلوك الكائن وعلاقته من منظور عملي.
كيفية رسم مخطط كائن؟
لقد سبق أن ناقشنا أن الرسم التخطيطي للكائن هو مثال لرسم تخطيطي للفئة. وهذا يعني أن مخطط الكائن يتكون من أمثلة للأشياء المستخدمة في الرسم البياني للفئة.
لذلك كل من الرسوم البيانية مصنوعة من نفس العناصر الأساسية ولكن في شكل مختلف. في عناصر الرسم البياني هي في شكل مجرد لتمثيل الطباعة الزرقاء وفي الرسم البياني الكائن العناصر هي في شكل ملموس لتمثيل كائن العالم الحقيقي.
لالتقاط نظام معين، أرقام المخططات الصف محدودة. ومع ذلك، إذا نظرنا في المخططات الكائن ثم يمكننا أن يكون عدد غير محدود من الحالات، والتي هي فريدة من نوعها في الطبيعة. ولا ينظر إلا في تلك الحالات التي تؤثر على النظام.
من المناقشة أعلاه، من الواضح أن مخطط كائن واحد لا يمكن التقاط كافة الحالات الضرورية أو بالأحرى لا يمكن تحديد كافة الكائنات من نظام. وبالتالي، فإن الحل هو & ناقص؛
أولا، تحليل النظام وتحديد الحالات التي لها بيانات هامة وتكوين الجمعيات.
ثانيا، النظر فقط تلك الحالات، والتي سوف تغطي وظيفة.
ثالثا، جعل بعض التحسينات كما عدد من الحالات غير محدودة.
قبل رسم رسم بياني للكائن، يجب تذكر الأشياء التالية وفهمها بوضوح وناقص؛
تتكون المخططات الكائن من الكائنات.
يتم استخدام الارتباط في مخطط كائن لتوصيل الكائنات.
الكائنات والروابط هي العنصرين المستخدمين لإنشاء مخطط كائن.
بعد ذلك، فإن الأمور التالية هي التي تقرر قبل البدء في بناء الرسم التخطيطي وناقص.
يجب أن يكون للرسم التخطيطي الكائن اسم ذو معنى للإشارة إلى غرضه.
ويتم تحديد أهم العناصر.
وينبغي توضيح العلاقة بين الأشياء.
يجب أن يتم التقاط قيم العناصر المختلفة لتضمينها في الرسم البياني للكائن.
إضافة الملاحظات المناسبة في النقاط التي يتطلب المزيد من الوضوح.
الرسم التخطيطي التالي هو مثال على رسم بياني للكائن. وهو يمثل نظام إدارة النظام الذي ناقشنا في الفصل الفصل الرسم البياني. الرسم البياني التالي هو مثال للنظام في وقت معين من الشراء. لديه الكائنات التالية.
الآن كائن العميل (C) مقترن مع ثلاثة كائنات ترتيب (O1، O2، O3). وترتبط كائنات النظام هذه مع أمر خاص وكائنات أمر عادي (S1 و S2 و N1). العميل لديه ثلاثة أوامر التالية مع أرقام مختلفة (12، 32 و 40) للوقت معين النظر فيها.
يمكن للعميل زيادة عدد الطلبات في المستقبل وفي هذا السيناريو سوف يعكس الرسم البياني الكائن ذلك. إذا لوحظ النظام، أمر خاص، وكائنات النظام العادي ثم سوف تجد أن لديهم بعض القيم.
بالنسبة للأوامر، تكون القيم 12 و 32 و 40 مما يعني أن الكائنات لها هذه القيم لحظة معينة (هنا الوقت المحدد الذي يتم فيه الشراء يعتبر لحظة) عند التقاط المثيل.
وينطبق الشيء نفسه على أمر خاص وكائنات النظام العادي التي لديها عدد من أوامر كما 20 و 30 و 60. إذا تم النظر في وقت مختلف من الشراء، ثم هذه القيم سوف تتغير وفقا لذلك.
تم رسم الرسم التخطيطي التالي للأخذ بعين الاعتبار جميع النقاط المذكورة أعلاه.
أين تستخدم الرسوم البيانية للكائنات؟
يمكن تخيل المخططات كائن لقطة من نظام تشغيل في لحظة معينة. دعونا نعتبر مثالا على قطار قيد التشغيل.
الآن، إذا كنت تأخذ المفاجئة من القطار قيد التشغيل ثم سوف تجد صورة ثابتة من وجود ما يلي & ناقص؛
دولة معينة قيد التشغيل.
عدد معين من الركاب. والتي سوف تتغير إذا تم التقاط المفاجئة في وقت مختلف.
هنا، يمكننا أن نتصور المفاجئة من القطار قيد التشغيل هو كائن وجود القيم المذكورة أعلاه. وهذا صحيح لأي نظام بسيط أو معقد واقعيا.
باختصار، يمكن القول أن المخططات الكائن تستخدم ل & ناقص؛
جعل النموذج الأولي للنظام.
نمذجة هياكل البيانات المعقدة.
فهم النظام من منظور عملي.

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

أومل استخدام حالة الرسم البياني - نظام معالجة التذاكر.
أومل استخدام حالة الرسم البياني - نظام معالجة التذاكر.
(1) يتلقى فني خدمة العملاء مكالمة هاتفية أو بريدا إلكترونيا أو أي اتصال آخر من أحد العملاء بشأن مشكلة ما. توفر بعض التطبيقات نظام الرسائل المدمج وتقارير الأخطاء التلقائية من كتل معالجة الاستثناءات.
(2) فني يتحقق من أن المشكلة حقيقية، وليس فقط ينظر إليها. سوف فني أيضا التأكد من أن يتم الحصول على معلومات كافية عن المشكلة من العملاء. وتشمل هذه المعلومات عموما بيئة العميل، ومتى وكيف تحدث هذه المشكلة، وجميع الظروف الأخرى ذات الصلة.
(3) فني يخلق هذه المسألة في النظام، وإدخال جميع البيانات ذات الصلة، على النحو المنصوص عليه من قبل العميل.
(4) كما يتم العمل على هذه المسألة، يتم تحديث النظام مع بيانات جديدة من قبل فني. وينبغي ملاحظة أي محاولة لإصلاح المشكلة في نظام القضايا. من المرجح أن يتم تغيير حالة التذكرة من فتح إلى انتظار.
(5) بعد معالجة المسألة معالجة كاملة، يتم وضع علامة على أنها حلت في نظام تتبع المسألة.
إذا لم يتم حل المشكلة بشكل كامل، سيتم فتح تذكرة مرة واحدة فني يتلقى معلومات جديدة من العميل. عملية تشغيل كتاب التشغيل التي تنفذ أفضل الممارسات لهذه سير العمل ويزيد من فعالية موظفي تكنولوجيا المعلومات أصبحت شائعة جدا ". [نظام تتبع القضايا ويكيبيديا]
تم إنشاء مثال مخطط حالة استخدام أومل "نظام معالجة التذاكر" باستخدام الرسم التخطيطي للمحترفين كونسيبتدراو وبرنامج الرسم المتجهات الممتد مع حل أومل السريع من منطقة تطوير البرمجيات في كونسيبتدراو سولوتيون بارك. اقرأ أكثر.
أومل استخدام حالة الرسم البياني - سيناريوهات استخدام نظام التداول.
وهناك فئة خاصة من التداول الخوارزمي هي "التداول عالي التردد" (هفت)، الذي غالبا ما يكون أكثر ربحية خلال فترات تقلبات السوق العالية. خلال السنوات الماضية، استخدمت شركات مثل ألغوريتس استراتيجيات هفت، مسجلة أرباحا عالية حتى خلال الفترات التي شهدت فيها الأسواق انخفاضا حادا. "[التداول الخوارزمي ويكيبيديا]
تم إنشاء مثال مخطط حالة استخدام أومل "سيناريوهات استخدام نظام التداول" باستخدام رسم تخطيطي برو كونسيبتدراو وبرنامج رسم الموجات الموسع مع حل أومل السريع من منطقة تطوير البرامج في كونسيبتدراو سولوتيون بارك. اقرأ أكثر.
جاكوبسون استخدام حالات الرسم التخطيطي.
أومل استخدام مخطط الحالة مثال. سيرفيسز أومل دياغرام. أتم.
الرسم البياني لحالة استخدام الصراف الآلي.
"إذا كنت تقوم بتصنيع السيارات، على سبيل المثال، فإن حالة الاستخدام لجانب معين من وظائف النظام قادرة على وصف ما يفعله الصراف الآلي في كل حالة ممكنة. كل من هذه" الحالات "يشار إلى كسيناريو، ويمكن اعتبار حالة استخدام مجموعة من السيناريوهات، ويمكنك التفكير في السيناريو على أنه سؤال يبدأ بما يلي: "ماذا يفعل النظام إذا". على سبيل المثال، "ماذا يفعل الصراف الآلي إذا العميل قد أودعت للتو شيك خلال ال 24 ساعة الماضية، وليس هناك ما يكفي في الحساب دون الشيك بعد تطهيرها لتقديم الانسحاب المطلوب؟ "
استخدام المخططات حالة بسيطة عمدا لمنعك من الحصول على تعثر في تفاصيل تنفيذ النظام قبل الأوان.
كل شخص عصا يمثل "الفاعل"، الذي هو عادة الإنسان أو نوع آخر من وكيل الحرة. (يمكن أن تكون هذه حتى أنظمة الكمبيوتر الأخرى، كما هو الحال مع "أتم.") يمثل المربع حدود النظام الخاص بك. تمثل علامات الحذف حالات الاستخدام، وهي توصيف للعمل القيم الذي يمكن القيام به مع النظام. وتمثل الخطوط بين الجهات الفاعلة وحالات الاستخدام التفاعلات.
لا يهم كيف يتم تنفيذ النظام فعلا، طالما أنها تبدو مثل هذا للمستخدم. "
وقد تم إنشاء هذا النموذج الآلي آلة الصراف الآلي (أتم) أومل مثال الرسم البياني حالة باستخدام رسم تخطيطي برو كونسيبتدراو وبرنامج ناقلات الرسم مع الحل أتم المخططات أومل من منطقة تطوير البرمجيات من كونسيبتدراو حل بارك. اقرأ أكثر.

كيفية تطوير مستشار خبير باستخدام أدوات أومل.
العلماء التحقيق ما هو بالفعل؛ المهندسين خلق التي لم تكن أبدا.
المقدمة.
في مقالتي سيمولينك: دليل لمطوري المستشارين الخبراء اقترحت النمذجة مستشار خبير باستخدام النظم الحيوية. ومع ذلك، يمثل هذا النهج جانبا واحدا فقط من مصمم أنظمة التداول - السلوك الديناميكي للنظام. المهنيين لديهم أداة محددة لتوسيع منهجية مطور نظام التداول. في هذه المقالة سوف نناقش كيفية تطوير مستشار الخبراء باستخدام أداة عالمية - لغة أومل رسومية.
بشكل عام، كونها لغة رسومية، يستخدم أومل للنمذجة البصرية من أنظمة البرمجيات الكائن المنحى. ولكن، كما أرى، يمكننا استخدام أدواتها لتطوير نظام التداول. وعلاوة على ذلك، MQL5 ينتمي إلى عائلة من لغات وجوه المنحى، وهذا يجعل مهمتنا أسهل.
لأغراض النمذجة، اخترت مجانا للبرامج غير التجارية البرمجيات أفكار موديلر.
كيف يمكن أن يساعد أومل في إنشاء خبير خبير؟ أولا، الرسومات - مشكلة نماذج متعددة الجوانب يمكن حلها باستخدام الصور الرسومية التي تتوفر في اللغة. ثانيا، قابلية القراءة. حتى هو خبير مستشار كبير ومعقد، عالمية من أومل يسمح لتقديم نموذجها باستخدام الرسوم البيانية.
كما يقول المطورين من أومل، وميزة محددة للإدراك البشري يكمن في حقيقة أن النص مع الصور هو أكثر سهولة ينظر إليها من نص عارية.
دعونا نناقش بإيجاز أساسيات أومل. إذا كنت مهتما في هذا الموضوع، يمكنك معرفة أدوات أومل من العديد من المنشورات التي تتوفر بحرية على شبكة الإنترنت.
يمكن عرض هيكل أومل في رسم بياني (الشكل 1).
الشكل 1. بنية أومل.
وتشمل اللبنات ما يلي: الكيانات (عناصر النموذج)، والعلاقات (التي تربط الأشياء) والرسوم البيانية (التي تمثل نماذج أومل).
مخططات أومل تسمح لتصور تمثيل النظام المصمم من وجهات نظر مختلفة.
وتشمل الآليات الشائعة ما يلي: المواصفات (وصف الدلالات)، والزينة (تمييز الخصائص الهامة للنموذج)، والانقسامات المشتركة (التجريد وحالاته، واجهات التنفيذ والتنفيذ)، وآليات التمدد (المعوقات والقوالب النمطية والقيم الموسومة).
العمارة هي المسؤولة عن العرض الرفيع المستوى للنظام في بيئته. ويمكن وصف معمارية أومل بشكل أفضل من خلال "عرض معماري 4 + 1" (الشكل 2):
الشكل 2. 4 + 1 عرض العمارة.
وتجدر الإشارة أيضا إلى أن أومل له تسلسل هرمي خاص به من الرسوم البيانية المتعارف عليها (الشكل 3). يستخدم الإصدار 2.2 اللغة 14 نوعا من المخططات أومل.
الشكل 3. مخططات أومل الكنسي.
وعلاوة على ذلك أقترح النظر في بعض الحالات الخاصة لاستخدام المخططات أومل. وهكذا، يمكننا الانتقال من التجريد إلى متغير معين من استخدام أي من المخططات لأغراض التنمية إي. ومرة أخرى، يساهم مبدأ التصميم متعدد الجوانب لأنظمة التداول، الذي يوفره التسلسل الهرمي لخرائط أومل، في الحل المنهجي والشامل لمهمة إنشاء تيسي.
2.1 استخدام مخططات الحالة.
وكما يقول المثل، بداية جيدة هي نصف المعركة. عادة، وإن لم يكن بالضرورة، يبدأ العمل التحليلي مع المخططات حالة الاستخدام. وهو يصف النظام من وجهة نظر المستخدمين.
عند إنشائه، يمكننا:
تحديد المتغيرات من تيسي استخدام تحديد حدود تيسي تحدد الجهات الفاعلة تيسي العلاقة بين الجهات الفاعلة والإصدارات تيسي.
حالة الاستخدام هي قائمة من الخطوات، وعادة ما تحدد التفاعلات بين الدور (المعروف في أومل بأنه "فاعل") ونظام، لتحقيق هدف.
يحدد الفاعل "الدور الذي يقوم به المستخدم أو أي نظام آخر يتفاعل مع الموضوع، وقد يمثل الممثلون الأدوار التي يقوم بها المستخدمون البشريون أو الأجهزة الخارجية أو الموضوعات الأخرى.
العلاقة هي علاقة دلالية بين العناصر الفردية للنموذج.
قد تلاحظ أن هذا النوع من الرسم البياني عام إلى حد ما، ويعكس الطبيعة المفاهيمية لل تيسي، بدلا من تنفيذه. ولكن هذه هي النقطة - الانتقال من عامة إلى محددة، من مجردة إلى ملموسة. من قال أننا لسنا فنانين؟ نرسم صورة، بدءا من الأفكار العامة والرسومات. أولا نرسم السكتات الدماغية في قماش. ثم إضافة الألوان. رسم التفاصيل.
لذلك، دعونا نحاول إنشاء مخطط حالة الاستخدام لنظام التداول.
كجهات فاعلة مساهمة، لقد اخترت الأدوار التالية: المطور، محلل النظام، مدير المخاطر ومسؤول. وتجدر الإشارة إلى أن هذه الأدوار يمكن أن يقوم بها شخص واحد أو أكثر. ما هي الإجراءات التي يتخذها نظامنا التجاري وما هي الإجراءات المتخذة فيما يتعلق به؟
وهكذا، يمكن للمطور إنشاء وتنفيذ تيسي. بالإضافة إلى ذلك، يمكن له أو هي المشاركة في تحسين تيسي. يحلل محلل النظام تيسي. مدير المخاطر هو المسؤول عن إدارة المخاطر. ويقوم مدير البرنامج برصد العمل العام للمدير الفني. على جانب الإخراج، ونحن نرى أن المستخدم يجعل الربح نتيجة لعمل تيسي. هذا الدور هو مجموع الأدوار مثل التاجر والمستثمر. والمدير وكذلك مدير يشرف على عمل تيسي.
يحتوي الرسم البياني على كتلة "نظام التداول". وهي تعبر عن حدود تيسي وتفصلها عن العالم الخارجي.
الآن بضع كلمات عن العلاقة بين الجهات الفاعلة وحالات الاستخدام، وكذلك بين الجهات الفاعلة والجهات الفاعلة الأخرى، وحالات الاستخدام وحالات الاستخدام الأخرى. وتمثل معظم العلاقات من قبل الجمعيات، تميزت خط متين. وهذا يعني أن جهة فاعلة معينة تبدأ حالة استخدام. وبالتالي، فإن مدير المخاطر يبدأ عملية إدارة المخاطر، إلخ. والجهات الفاعلة التي تبدأ حالات الاستخدام هي الرئيسية، وتلك التي تستخدم نتائج الإجراءات المرتكبة - هي ثانوية. على سبيل المثال، الممثل الثانوي هو مدير على جانب الإخراج.
قد تشير الرابطة إلى أن الممثل يبدأ حالة الاستخدام المناسبة.
التعميم يحاكي العموم المناسب للأدوار.
التمديد هو نوع من علاقة التبعية بين حالة الاستخدام الأساسي وحالته الخاصة.
وتشمل تعريف العلاقة بين حالة الاستخدام الأساسي وحالة الاستخدام الأخرى، التي لا يستخدم سلوكها الوظيفي دائما في الحالة الأساسية، ولكن فقط في ظل ظروف إضافية.
ومع ذلك، لاحظ أن الدور الثانوي فيما يتعلق بقضية الاستخدام لا يعني أن هذا الدور ذو أهمية ثانوية. وبالإضافة إلى ذلك، في الرسم البياني نرى أن دور المستخدم تيسي يتكون من أدوار التاجر والمستثمر من خلال علاقات التعميم، كما هو موضح كخط مع "غير مصبوغ" رأس السهم الثلاثي.
الشكل 4. مخطط حالة الاستخدام لل تيسي.
حالات الاستخدام "موقف فتح" و "موقف إغلاق"، بدوره، ترتبط عن طريق تعميم مع "التداول". وهذه الحالة الأخيرة هي القاعدة بالنسبة للاثنتين الأخريين. وهكذا، فإنه يشمل حالة استخدام "إدارة المخاطر". وسلوكها مكمل للحالة التابعة "الربح".
بما أن ربح تيسي يتم تكوينه بشرط أن يكون سعر بيع الأصل أكبر من سعر الشراء، فقد استخدمت علاقة التمديد لهذه الحالات. ويظهر الرسم البياني أيضا نقطة التمديد، أي شرط محدد، تستخدم بموجبه الحالة "إلى الربح". يتم عرض علاقات التبعية من خلال خط متقطع مع سهم مع الصور النمطية المقابلة "تشمل" و "تمديد".
لكل حالة استخدام تحتاج إلى إنشاء سيناريو، وهذا هو وصف سلسلة من الخطوات التي تؤدي إلى الهدف المقصود. يمكن وصف حالة الاستخدام في عدة أشكال. وتشمل الأشكال المقبولة عموما ما يلي: وصف النص، بسيودوكود، الرسم التخطيطي النشاط، الرسم التخطيطي التفاعل.
وتجدر الإشارة إلى أن التاجر مهتم في تيسي بالمعنى الدقيق للكلمة بدلا من ذلك الذي يظهر في الشكل 4. ولذلك، أقترح كذلك التركيز على حالة الاستخدام "التداول" مع التمديد "للربح".
2.2 مخطط الطبقات.
باستخدام الرسم البياني الطبقة سوف تصف هيكل تيسي. وعلى وجه التحديد، سوف نقدم نموذجا للهيكل الثابت للنظام التجاري من حيث فئات البرمجة الموجهة نحو الكائن. وبالتالي، فإننا سوف تعكس منطق البرمجة من تيسي.
في أومل مخطط الرسم البياني هو نوع من الرسوم البيانية بنية ثابتة. وهو يصف هيكل النظام من خلال إظهار الطبقات، وخصائصها والمشغلين، فضلا عن العلاقة بين الطبقات.
ما هي مزايا هذا النوع من الرسم البياني؟ أولئك الذين هم على دراية بعض الشيء مع لغات البرمجة وجوه المنحى، وسوف تلاحظ على الفور فكرة مألوفة من "الطبقة". يعمل الفصل في مخطط فئة أومل كبنة البناء الأساسية. على سبيل المثال، عند إنشاء رمز C ++، يتم إنشاء كتلة فئة أومل تلقائيا في قالب قالب فئة. سوف تحتاج فقط لإنهاء تنفيذ كل طريقة والممتلكات.
الآن دعونا نحاول تصميم شيء كمثال. ولكن أود أولا أن ألفت انتباهكم إلى المادة "نموذج روبوت التداول"، الذي يصف المؤلف مزايا استخدام منطق مستقيم. في رأيي، فعالة جدا ومنتجة هو مبدأ التعشيش - "وحدات الماكرو وظائف وحدات التجارة".
على سبيل المثال، نحن بحاجة إلى مستشار الخبراء الذي يستخدم إمكانية تداول فئات المكتبة القياسية.
باستخدام كتلة الفئة إنشاء نموذج فئة في الرسم البياني للفئة. اتصلت به كتراديكسيرت. نضيف بعض السمات (في MQL5 هم أعضاء البيانات من الطبقة) لفئة جديدة. وهي: Magic_No، e_trade، e_account، e_deal، e_symbol، e_pnt. نحن أيضا إدراج طريقة منشئ من فئة كتراديكسيرت. ومن الناحية البيانية، ستكون العملية كما هو مبين في الشكل 5.
الشكل 5. نموذج أومل من فئة كتراديكسيرت.
الحرف "-" أمام السمة يشير إلى أن السمة لديه حق الوصول في وضع «الخاص»، «#» - «المحمية»، «+» - «الجمهور». وهكذا، بالنسبة للسمة Magic_No يتم تعيين محدد الوصول كخاص، ل e_pnt - كما العامة، وبالنسبة للآخرين - كما هي محمية. نقطتين يتبعان اسم الخاصية المميزة، يشير الى نوع بيانات للسمات ونوع البيانات التي تم ارجاعها للطرق. على سبيل المثال، السمة Magic_No هي من نوع إنت، e_trade - كتريد، الخ.
نحن لا نضيف أي الأساليب والصفات الآن، وتبين ببساطة كيف لدينا فئة كتراديكسيرت متصل مع فئات المكتبة القياسية. للقيام بذلك، إضافة 6 كتل من الطبقات إلى الرسم البياني وندعو لهم على النحو التالي: كتريد، كاكونتينفو، دديلينفو، كسيمبولينفو، كوبجيكت. نحن الآن ربط نموذج كتراديكسيرت الطبقة مع 4 كتل من الطبقات التجارية من خلال علاقات الاعتماد مع "الاستخدام" النمطية (خط اندفاعة منقط مع سهم).
التبعية هي علاقة دلالية بين كيانين، حيث التغيير في واحد منهم يمكن أن تؤثر على دلالات الأخرى التابعة واحدة.
القالب النمطي في أومل هو وصف لسلوك الكائن.
ثم، ونحن ربط هذه الكتل مع كوبجيكت كتلة من خلال علاقة التعميم باستخدام خط مع "غير مصبوغ" رأس السهم الثلاثي. إضافة تعليقات إلى فصول المكتبة القياسية. الآن، الرسم البياني أومل لدينا يبدو كما هو مبين في الشكل 6.
الشكل 6. مخطط فئة أومل.
نحن الآن بحاجة فقط لتوليد رمز باستخدام وظيفة "توليد" من "إنشاء" علامة التبويب على الشريط الجانبي (الشكل 7).
الشكل 7.
الأكثر مناسبة هي اللغة ++ ++. سوف نستخدم C ++ إنشاء التعليمات البرمجية من فئة خبير الخبراء، وبعد ذلك سوف نقوم بترجمته بسهولة إلى MQL5.
لهذا الرسم البياني رمز ولدت على النحو التالي:
بنية مألوفة حقا، أليس كذلك؟ نحن بحاجة فقط لتناسب الجسم من الطبقة. لهذا الغرض في ميتايديتور نخلق ملفا لفئة جديدة TradeExpert. mqh. نسخ التعليمات البرمجية التي تم إنشاؤها مسبقا إليها. لقراءة نحن حذف محدد الوصول المتكرر المحمية لأعضاء كتراديكسيرت الطبقة.
احذف الخطوط المرتبطة بإعلان فئات المكتبة القياسية. بعد ذلك، قم بإضافة الملف بما في ذلك التعليمات # تضمين لكل فئة المستخدمة من المكتبة القياسية، لأن هذه الفئات هي بالفعل معرفة من قبل المطور. وإضافة تعليقاتنا. ونتيجة لذلك، نحصل على الرمز كما يلي:
الآن دعونا إضافة بعض المزيد من وحدات وظيفة التداول لدينا فئة مستشار الخبراء.
قد تكون هذه: تشيكسيغنال، أوبنبوسيتيون، تشيكبوسيتيون، كلوسيبوزيتيون الخ. آمل أن تعرف بالفعل مبدأ "حالة خدمة". في هذه الحالة لدينا اختبار الطبقة كتراديكسيرت لن تبدو صعبة بالنسبة لك. ركزت تحديدا على بعض الأمثلة المألوفة بالفعل لمستشار خبير لتسهيل عليك فهم آليات أومل.
لذلك، يظهر الآن نموذج الطبقة كما هو مبين في الشكل 8.
الشكل 8. نموذج أومل من فئة كتراديكسيرت.
للحصول على نموذج محدث من فئة يمكننا أيضا إنشاء رمز باستخدام الطريقة التي سبق وصفها.
2.3 مخطط النشاط.
باستخدام هذا النوع من الرسوم البيانية أومل، يمكننا دراسة سلوك النظام باستخدام نماذج تدفق البيانات وتدفق السيطرة. المخططات النشاط هي تمثيل رسومية لسير العمل من الأنشطة والإجراءات التدريجية.
يختلف مخطط النشاط عن المخطط الانسيابي، الذي يصف فقط خطوات الخوارزمية. الرسم البياني النشاط النشاط هو أوسع. على سبيل المثال، من الممكن تحديد حالة الكائنات فيه.
يتم استخدام المخططات النشاط من قبل المطورين لوصف:
قواعد العمل حالات استخدام واحدة معقدة سلسلة من حالات الاستخدام متعددة العمليات مع الحلول والجداول البديلة عمليات متوازية تدفقات البرنامج وهياكل التحكم المنطق.
افترض أن فئة الخبراء التي تم إنشاؤها كتراديكسيرت سيتم استخدامها في ملف خبير الخبراء Test_TradeExpert. mq5. كما نتذكر، يوفر النموذج الافتراضي عند إنشاء إي في ميتايديتور 5 ثلاث وظائف معالج الأحداث الافتراضي: أونينيت و أوندينيت و أونتيك. دعونا نسكن عليها.
دعونا نحاول عرض رسم بياني مع عملية إي لدينا وهو يمثل Test_TradeExpert. mq5. هنا تجدر الإشارة إلى أن مستشار الخبراء، أو بالأحرى هيكلها، بدائية بدلا من ذلك. نحن فقط التدريب الآن. بنية إي بسيطة على ما يرام لهذا الغرض.
دعونا تصميم مخطط لاستخدام مستشار الخبراء لدينا، وهو خوارزمية منها في الملف Test_TradeExpert. mq5.
لذلك، كل شيء يبدأ مع العقدة الأولية (الشكل 9). من هذه العقدة يتحرك رمز التحكم إلى العقدة التي تدعو إلى إجراء "إنشاء مثيل خبير الخبراء". هذا الإجراء يبدأ تدفق الكائن (السهم الأزرق)، الذي يغير حالة عقدة الكائن (مايت = إنشاء)، وتدفق التحكم إلى العقدة التي تدعو "تهيئة خبير المستشار".
يتم تمثيل تدفق التحكم في شكل حافة النشاط، الذي يربط العقدتين من النشاط والتي يتم تمرير رموز التحكم فقط.
يتم تمثيل تدفق العنصر كحافة نشاط، والتي يتم تمرير رموز الكائن أو البيانات فقط.
عقدة النشاط هي فئة مجردة للنقاط الفردية في تدفق الأنشطة المتصلة بواسطة الحواف.
عقدة القرار هي عقدة تحكم، والتي تختار بين التدفقات الصادرة.
تمثل عقدة العنصر الكائنات المستخدمة في النشاط.
حافة النشاط هي فئة مجردة للاتصالات الموجهة بين عقد نشاط.
توضح العقدة الأولية مكان بدء النشاط.
العقدة الأخيرة من النشاط يكمل كل تدفقات النشاط.
فإنه، بدوره، يغير حالة الكائن ماتي (ماتي = تهيئة) ويمر رمز التحكم إلى عقدة القرار. إذا تم تهيئة المستشار الخبراء بنجاح، يذهب تدفق التحكم إلى العقدة "معالجة الحدث التجاري نوتيك» إذا فشل التهيئة، ثم رمز التحكم الأول يدخل عقدة التعميم، ثم عقدة العمل "دينيتياليز مستشار الخبراء".
الرموز المميزة هي منشآت مجردة يتم تقديمها للراحة في وصف العملية الديناميكية لتنفيذ رسم بياني للنشاط المعرف إحصائيا. لا يمكن أن يحتوي الرمز المميز على أية معلومات إضافية (رمز مميز فارغ)؛ في هذه الحالة يطلق عليه رمز تدفق التحكم، أو قد يحتوي على مرجع إلى كائن أو بنية بيانات، وفي هذه الحالة يطلق عليه رمز تدفق البيانات.
دعونا ننظر إلى تدفق السيطرة الأولى التي تأتي من عقدة القرار. يتم توجيهها إلى منطقة مع العمل المتقطع، كما هو مبين من مستطيل مع زوايا مدورة رسمها الخط الأحمر منقط وصورة نمطية من "انقطاع". عندما يكون تدفق التحكم في هذه المنطقة، قد يتوقف بشكل غير متوقع. إذا قمت بتنشيط عقدة العمل (العلم البرتقالي) الذي يتلقى الحدث "تفريغ مستشار الخبراء"، وسوف يقطع كل التدفقات. يتحرك رمز التحكم إلى حافة المقاطعة (السهم المتعرج البرتقالي)، ثم إلى عقدة التوصيل. بعد ذلك يتم إينيتياليزد إي. ثم، رمز التحكم يذهب إلى عقدة "حذف المتغيرات العالمية"، ثم سيتم الانتهاء من تدفق في عقدة النشاط النهائي.
عقدة العمل "دينيتاليز مستشار الخبراء" أيضا بتغيير حالة الكائن ماتي (ماتي = دينيتسياليزد) بواسطة تدفق الكائن. العقدة "حذف المتغيرات العالمية"، بدوره، يزيل الكائن مايت (ماتي = حذف).
الشكل 9. مخطط النشاط ل Test_TradeExpert. mq5.
نفترض أن تدفق التحكم مستقر: إي لم يتم تفريغها. من العقدة "معالجة الحدث التجاري نوتيك» تدفق يتحرك إلى كتلة أخرى - منطقة التوسع، وتعرف الصورة النمطية التي هي "تكرارية" (المستطيل الأخضر مع خطوط منقطة).
أدعو هذا المجال "كتلة التداول"، لتعكس الخصائص الأساسية وتحسين تصور الرسم البياني. وهناك سمة مميزة للكتلة هي التنفيذ الدوري لعمليات الكائنات الواردة. نحن بحاجة فقط 2 دورات - التعامل مع الاتجاهات الطويلة والقصيرة. عند مدخل كتلة والإخراج من كتلة هناك العقد التوسع التي تشمل كائنات اتجاه التجارة (طويلة أو قصيرة).
عقدة التوسيع هي مجموعة من الكائنات التي تدخل أو تخرج من منطقة التوسيع، والتي يتم تشغيلها مرة واحدة لكل كائن.
عقدة العمل التي ترسل إشارة (إرسال إشارة العمل) يمثل إشارة الإرسال.
عقدة الإجراء التي تقبل حدث (قبول إجراء الحدث)، ينتظر تلقي حدث من النوع المناسب.
وهكذا، فإن كل اتجاه يتم التعامل معه من خلال هذه العقد مثل: "إشارة التحقق" (عقدة إرسال الإشارة) و "إشارة الاستقبال" (عقدة استقبال الإشارة) و "موقع فتح" (عقدة إرسال الإشارة) و "موقع التحقق" (عقدة إرسال الإشارة) ، "موقف إغلاق" (إشارة إرسال عقدة). وتجدر الإشارة إلى أنه يمكن تمرير الكائن الاتجاه (دير) في تدفق الكائن بين عقد العمل، كما هو موضح من قبل الأسهم البنفسجي. وستستمر العمليات في كتلة ما دام تفريغ مستشار الخبراء.
2.4 مخطط التسلسل.
نحن نستخدم مخطط تسلسل لوصف تسلسل التفاعل الكائن. وهناك جانب مهم جدا من هذا النوع من الرسم البياني هو الوقت.
لذا، فإن الرسم البياني يحتوي على مقياسين في شكل ضمني. والأخرى الأفقية هي المسؤولة عن تسلسل التفاعلات الكائن. المحور الرأسي هو محور زمني. بداية الفاصل الزمني هو الجزء العلوي من الرسم البياني.
الجزء العلوي من الرسم البياني يحتوي على كائنات الرسم البياني، التي تتفاعل. كائن له شريان الحياة الخاصة بها كما خط عمودي منقط. الكائنات تبادل الرسائل. وهي ممثلة بالسهام. عندما يكون الكائن نشطا، فإنه يتلقى التركيز على عنصر التحكم. بيانيا، يتم التعبير عن هذا التركيز كمستطيل ضيق على شريان الحياة.
الكائن هو مستطيل يحتوي على اسم كائن تحت اسم واسم فئة (اختياري) مفصولة بنقطتين.
شريان الحياة الكائن هو الخط الذي يدل على وجود كائن لبعض فترة من الزمن. كلما كان الخط أطول، كلما كان الكائن موجودا.
يتم رسم التركيز السيطرة كمستطيل ضيق، الجانب العلوي منه يدل على بداية تلقي تركيز السيطرة من قبل الكائن (بداية النشاط)، والجانب السلبي - نهاية التركيز السيطرة (نهاية النشاط).
في أومل، يتم وصف كل تفاعل من قبل مجموعة من الرسائل، والتي الكائنات المشاركة في تبادل.
دعونا لدينا بعض الممارسة.
المحطة هو الفاعل. فإنه يبدأ تشغيل مستشار الخبراء. الكائنات الأخرى التي تحمل علامة "الحدث" هي أحداث محطة العميل: إينيت، دينيت، نيوتيك. وبطبيعة الحال، إذا كنت تريد يمكنك توسيع نطاق الأحداث. عند بدء تشغيل مستشار خبير، يتم إنشاء كائن متي على المستوى العالمي. وهو مثال من فئة كتراديكسيرت. كائن فئة أقل قليلا من الكائنات الأخرى في الرسم التخطيطي، مما يشير إلى أنه يتم إنشاؤه بعد وظيفة منشئ.
يتم وضع علامة إنشاء أمر مع خط اندفاعة منقط مع سهم مفتوح ورسالة 1.1 كتراديكسيرت (). يشير الخط المنقطة بخط متقطع مع سهم إلى نوع "إنشاء" للمكون الافتراضي كتراديكسيرت (). بعد إنشاء مثيل من كتراديكسيرت الخطوة 1.2 تنشيط - يتم إرجاع التركيز السيطرة إلى المحطة. لقراءة، وأشير إلى رسائل متزامنة في شكل #. #، مثل 1.1، وغير متزامن - #. ثم، يتعامل الجهاز مع الحدث إينيت باستخدام الدالة أونينيت () في الخطوة 2.1، يتم إرجاع التركيز على الخطوة 2.2. يتم عرض رسائل "الاتصال" نوع كخطوط مع "المثلث" السهم مثلث في نهاية المطاف.
If the Init event returns a nonzero value to the terminal, it means that the initialization failed: step 3.1 is used which leads to the generation and handling of the Deinit event. In step 3.2 the control focus is returned to the terminal. Then the CTradeExpert class object is deleted (step 4.1). By the way, when creating a class diagram, I have not included the destructor function CTradeExpert in the class. This can be done later. This is one of the advantages of diagram construction - the process of construction of several diagrams is iterative. What has been done first for one diagram, can be done then for another, and later you can modify the first one.
It should be noted that the MQL5 code of a standard EA template does not contain a block that handles failed initialization. I've specified it to save the logic of sequence. The UML sequence diagram uses the opt block with a guard condition OnInit()!=0, which is equivalent to the MQL5 construction if(OnInit()!= 0) <>.
In step 4.2, control is transferred to the terminal.
Now the terminal is ready to handle the event NewTick.
Processing of this event is in the block loop meaning an infinite loop. That is, the EA will handle this event until we disable it. The terminal processes the NewTick event using the OnTick function (step 5). In step 6, the control focus is transferred to the Expert Advisor myTE. Using 4 reflexive messages, it implements the following functions: CheckSignal, OpenPosition, CheckPosition, ClosePosition. The reflexivity is due to the fact that the Expert Advisor object sends messages to itself.
In addition, these functions of the CTradeExpert class are enclosed in the loop(2) block. Two means that the loop consists of two passes. Why two? Because it handles two directions of trade - long and short (from step 7 to 10). In the 11th step, the focus is passed to the terminal.
Steps 12 and 13 are responsible for deinitialization and deletion of the Expert Advisor object, respectively.
Fig. 10. SD diagram for Test_TradeExpert. mq5.
Thus, we have got the primary design skills. With the help of diagrams the created, the work of the developer is optimized. We can now start writing a code for the file Test_TradeExpert. mq5 . Of course, you can do without diagrams. But when you have a complex Expert Advisor, the use of diagrams reduces the likelihood of errors and allows you to efficiently manage the development of your TS.
Using the Expert Advisor template, we now create Test_TradeExpert. mq5 .
We create an instance of the CTradeExpert myTE class at the global level.
Now let's fill the body of the OnTick() function.
We write the functions of the class as follows:
Something like this will be the handling of the NewTick event. Of course, we still need to specify each of the functions that will be used by the class data members, among others. But let's leave this job for the future. Now our goal is to transfer the logic of UML diagrams into the MQL5 code.
3. Development and Presentation of an Expert Advisor Based on the UML Diagrams.
As an example, let's create diagrams for a complex Expert Advisor. Let's define its features in the context of a given strategy implemented in the MQL 5. In general, our Expert Advisor will perform trade operations; in particular it will generate trading signals, maintain open positions and money management. It is rather a template trading strategy. However, for training purposes we will try to work with this one.
First, we create a use case diagram for our EA. Only to some extent will it be different from the one discussed earlier. I paid attention to the internal environment of the TS, ignoring the outside (Fig. 11), as in the code we will implement only the trading tasks.
Fig. 11. Use-case diagram of the TS.
Now let us define the structure of the Expert Advisor. Assume that we will use the standard library developments, because it is consistent with the stated objectives of the TS. Recently, it has been substantially expanded. And above all it concerns the classes of trading strategies . So, our goal is to create a class diagram. It will not be simple, so you need patience.
Here I would like to note that we consider the standard library for a few reasons. First, on its basis we try to create a trading robot. And, second, which is also important, we have some practice working with UML diagrams. Third, perhaps the library itself is very valuable. So we can learn many useful things from the libraryt, and at the same time try to understand its not quite simple structure.
The conversion of a code in the structure of a UML diagram is called reverse engineering. In fact, we are doing this manually. There is professional software that allows you to do this automatically (IBM Rational Rose, Visual Paradigm for UML, etc.). But for practical purposes, I think we need to work "manually".
Let's create a model of the base class to implement trading strategies CExpert using the "Class" block. Let's see what other classes and constructions are used in the body of the C Expert class. First, it should be noted that the C Expert class is derived from the base class CExpertBase , which, in turn, is derived from the base class CObject .
In the diagram we create blocks for these classes, and define the relationship between the classes using a line with an "unpainted" triangular arrowhead (generalization) . Add a comment to the model of the CExpert class (a yellow rectangle with a bent corner). The intermediate class structure now looks like this - Fig. 12. Let's call the diagram Expert .
Fig. 12. The Expert diagram, the initial view.
Let's see the code in the Expert. mqh file. The class CExpert , among other things, involves enumerations ENUM_TRADE_EVENTS and ENUM_TIMEFRAMES , one of the 8 predefined structures MqlDateTime. The class also uses other class instances, such as: CExpertTrade, CExpertSignal, CExpertMoney, CExpertTrailing, CIndicators, CPositiontInfo, COrderInfo.
Let's mark the dependency relations with the " use " stereotype between the block of the CExpert class and other classes, do not forget about the MqlDateTime structure and enumerations. We change the color style of the blocks and obtain the following structure - Fig. 13.
Fig. 13. The Expert diagram, the initial view.
However, this structure does not reflect the full picture, because there are a number of classes that are indirectly used by the already mentioned classes. What kind of classes are they? First, the CExpertTrade class is derived from CTrade . The latter is a subclass of CObject.
The CExpertTrade class uses the ENUM_ORDER_TYPE_TIME enumeration, classes CSymbolInfo and CAccountInfo are also children of CObject . The CTrade class also uses instances of the CSymbolInfo classes. Let's make changes to the diagram. Now our diagram has the following form - Fig. 14.
Fig. 14. The Expert diagram, the initial view.
Again, the diagram is not complete. For example, if you look in the standard library file Trade. mqh , you will see that CTrade uses several different structures, enumerations and the CSymbolInfo class. If they are all displayed on one diagram, it will be too much loaded. And this will make it hard to understand.
To cope with this difficulty, I used a package for the diagram. It encapsulates related classes, enumerations, other packages, etc. I connected the package with the diagram elements through the interface. For example, the diagram for the package CTrade can be represented as follows - Fig. 15.
Fig. 15. The class diagram for the CTrade package.
The diagram of the CTrade package shows dependence relations of the CTrade class with enumerations and structure.
Relations with the CObject base class and the used CSymbolInfo class is implemented through an interface.
Near the interfaces there is an icon of relation with the class diagram that contains the CTrade package as a single element. Clicking on any of the interfaces automatically brings to the original diagram (Fig. 16).
Fig. 16. The Expert diagram with interfaces.
Interface relations are orange. The icon of the class diagram next to the CTrade package indicates the possibility of moving to this diagram. Thus, using the encapsulation, we can significantly improve the readability of the class diagram.
So, let's move on. The CObject class uses pointers to instances of the same class in its body. Therefore, we can set the dependence relationship for the CObject block with the stereotype " use " relative to itself.
Let's look at the block of the CExpertBase class model. Based on the first lines of the header file ExpertBase. mqh we can say that this class uses multiple instances of various classes, and enumerations. Therefore, for the class model and its relationships it is reasonable to create the package CE xpertBase .
So, first we define the CExpertBase class model in the package diagram. Through the interface we show relationship with the base class CObject , and the relationship of use with the classes CSymbolInfo and CAccountInfo. Then, using blocks of classes and relations of dependence, we specify that the CExpertBase class uses the following classes: CiOpen, CiHigh, CiLow, CiSpread, CiTime, CiTickVolume, CiRealVolume.
The first four classes are derived from CPriceSeries, and the latter four – from CSeries. Moreover, the CSeries class has a child CPriceSeries and is, in turn, a child of CArrayObj. The inheritance relationships have been used before, as we remember. Denote them as a generalization relationship in the diagram.
Do not forget that the class CExpertBase uses in its body such enumerations as: ENUM_TYPE_TREND , ENUM_USED_SERIES , ENUM_INIT_PHASE , ENUM_TIMEFRAMES . The last enumeration is also used by the children of the class CPriceSeries and class CSeries . Not to lose the relationships, and to make the diagram clear, let's adjust the style for each of the elements of the diagram. As a result, we obtain the following diagram (Fig. 17).
Fig.. 17. The class diagram for the CExpertBase package.
It is not complete yet, and we will have to work some more on it. It turns out that the four classes, which inherit the CPriceSeries class also use the CDoubleBuffer class. In addition, each of the four classes uses its buffer class that derives from CDoubleBuffer. Thus, COpen uses COpenBuffer etc.. CDoubleBuffer has a base class (CArrayDouble ) and uses ENUM_TIMEFRAMES .
CArrayDouble inherits CArray , uses pointers to the instances of its same class and the ENUM_DATATYPE enumeration. The COpenBuffer class and other buffer classes of price series (CHighBuffer, CLowBuffer, CCloseBuffer) use the ENUM_TIMEFRAMES enumeration.
The four classes that inherit the CSeries class only use their own buffer classes (CSpreadBuffer, CTimeBuffer, CTickVolumeBuffer, CRealVolumeBuffer) . The first of the class buffers CSpreadBuffer inherits CArrayInt , others – CArrayLong . The last two classes use the pointers to the instances of their own class, the ENUM_DATATYPE enumeration and are derived from CArray , which, in turn, is a child of class CObject.
The CPriceSeries class and its children use the CDoubleBuffer class and the ENUM_TIMEFRAMES enumeration.
CSeries uses enumerations ENUM_SERIES_INFO_INTEGER , ENUM_TIMEFRAMES . It inherits CArrayObj. The latter one inherits CArray, uses ENUM_POINTER_TYPE , pointers at the instances of its own class and the CObject class . As a result, we obtain the diagram shown in Figure 18.
Fig. 18. Extended class diagram for the CExpertBase package.
And the original diagram Expert for classes and packages CExpert , CExpertBase , CSymbolInfo , CAccountInfo and CObject with interfaces looks as follows (Fig.19).
Fig. 19. The Expert diagram with interfaces.
I've also added the ENUM_ORDER_TYPE enumeration used by CExpertTrade . For readability, I've marked the group of relationships with different colors.
We continue our work. I hope that you understand the logic. The model of a class on the diagram may have many relationships with other classes and other entities. So I just replace some set with a package in the base diagram.
So, let's study CSymbolInfo . If you look at the code of SymbolInfo. mqh , you will see that the base class CSymbolInfo uses some MQL5 enumerations and structures . It's good to use a package for it and its relationships (Fig. 20).
Fig. 20. Diagram of the CSymbolInfo package.
Some free space in the diagram can be used for comments. Also, I've marked the interface of relation with the parent class CObject . The original Expert diagram of packages and classes will be slightly modified. I will give its updated version later on, when all the classes and packages are reflected in the diagram.
So, let's move on. Let's look at the MQL 5 code in AccountInfo. mqh . As it turns out, CAccountInfo also uses some enumerations. We reflect them on the diagram of the package that will create for this class and its relationships with other entities (Fig. 21).
Fig. 21. CAccountlInfo package diagram.
Now let's deal with the CExpert class. For this class, we also create a package CExpert , which will appear as shown in Fig. 22. We continue to improve the readability of our main diagram. The CExpert class is connected with several other classes, as indicated by the orange interface lines with an arrow.
Fig. 22. CExpert package diagram.
Let's explore other remaining classes. We will creaet more packages for them.
CExpertSignal derives from CExpertBase . This relationship has already been shown on the original diagram Expert . In addition, the CExpertSignal class uses CArrayObj , COrderInfo , CIndicators and instances of its own class (Fig .23). In particular, the interface of relationship with the CArrayOb j class will bring us to the CExpertBase package diagram, which shows the relationship of the CArrayObj class with other entities.
Fig. 23. CExpertSignal package diagram.
I am not showing all the diagrams now - they are all available in the attached file Expert. simp . Now let's take a look at our updated diagram of packages and classes Expert (Fig. 24).
As you can see, almost all the key classes in the diagram have been encapsulated into packages to make the diagram easier to understand. I have changed the color of the generalization line into brown, to distinguish it from the line of the dependency relationship.
Fig. 24. The diagram of packages and classes Expert.
So, we have reflected all that can be taken from the code available in the standard library for creating diagrams. We only need to add some more blocks, which specify the trading operations of the Expert Advisor.
The very first block is the block of CmyExpert that inherits trading "skills" from the CExpert class. This is the block, for which we have so long been engaged in reverse engineering. He will implement a specific trading strategy. We also need to specify the virtual functions of the base classes of the EA.
for this purpose, we create a block of classes CmyExpertSignal, CmyExpertMoney , CmyExpertTrailing and indicate that they are derived from the appropriate (Fig. 25).
Fig. 25. Expanded diagram of packages and classes Expert.
What functions and data should each of the classes include is up to the developer. Here, I'm trying to show the more general scheme, not a specific implementation of a derived class. Thus, for each of the derived classes we can create a separate diagram with a detailed list of included methods and properties, as has been done, for example, in Fig. 8.
Now let's see how we can use the sequence diagram in our work. Let me remind you that it shows how our EA operates with respect to the timeline.
So, we write details of the EA work in chronological order (Fig. 26).
Fig. 26. The Sequence diagram of the Expert Advisor.
The terminal serves as an actor. At the global level it creates the myTrader object - an instance of CmyExpert (Step 1.1). Green denotes predefined events of the client terminal (Init, Deinit, NewTick, Trade.) The sequence diagram logic has been described earlier. Here I would like to point out some specific points. When the body of the Expert Advisor grows, and there is more and more code, it becomes more difficult to display it in a diagram.
To solve this problem, use the block approach. A set of some common functions is visualizes in the form of a block. As a rule, it is another sequence diagram. It is said to be an interaction use.
Thus, in this case, I created a sequence diagram called OnInit in order to reflect the logic of handling of the terminal event Init in a separate diagram. Syntactically it is defined as a border with the keyword ref ( reference) and is used when the control token passes from OnInit (step 2.1) to the lifeline of the Init object.
In addition, I've set an interface move to this sequence diagram for OnInit . That is, if you click 2 times on the border, you can actually open a detailed sequence diagram of OnInit (Fig. 27).
Fig. 27. The sequence diagram of OnInit.
Moves to other sequence diagrams is very convenient for repetitions of some actions.
For example, the OnInit diagram contains actions connected with EA deinitialization, the processing of which is done in myTrader _ Deinit (Fig. 28).
Fig. 28. The sequence diagram of myTrader_Deinit.
In general, at this stage of EA design I have four sequence diagrams. Naturally, during a more serious development you may need additional diagrams. For example, I haven't handled other events of the client terminal (NewTick, Trade).
الاستنتاجات.
In this article, I suggested to take into account the multidimensional nature of the Expert Advisor development process using the graphical language UML, which is used for visual modeling of object-oriented software systems. The main advantage of this approach is the visualization of the designer.
As with any complex phenomenon, UML has its own disadvantages that the developer should be aware of (redundancy, imprecise semantics, etc.).
I hope that the described methodology of EA development is interesting for you. I would be grateful for any comments and constructive criticism.
Location of files:
ترجمة من الروسية من قبل شركة ميتاكوتس سوفتوار Corp.

Class diagram for trading system example


الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
Class diagram examples for RPG (Role Playing Game)
Does anyone know where I can find examples of class diagrams for RP game development? Something similar to here would be quite useful. I'm not looking for things I can slavishly copy, but just for different examples that diagram various solutions to the problems I'm discovering as I try and pencil down my own classes.
I know Emmanuel Deloget from GameDev but I'm not sure I would choose to use the hierarchy he's got there! Too much inheritance, not enough flexibility.
If I was writing a text-based RPG (as I have done in the past) it would look a bit like this (though I've no time to draw up a diagram for it, sadly):
Creatures, Rooms, and Items derived from WorldEntity, with WorldEntity objects arranged in a Composite structure, so items can live within other items, carried by creatures, who exist within rooms. Implementing the Visitor pattern for WorldEntities might work well. CreatureType and ItemType classes which contain the 'class' data for individual Creature and Item instances, which refer back to their corresponding 'type' object. (eg. base hitpoints and stats in the former, current hitpoints and transient effects in the latter). I might implement these as prototypical lists of properties that get copied to Creature or Item instances when they are created. You can implement property inheritance via a 'parent' property so that a specific goblin Creature instance may relate to the 'warrior goblin' CreatureType, which contains a parent reference to the 'generic goblin' CreatureType. And so on. Exits that are owned by their Room, and are one way, and which detail the direction of travel, various conditions of passage, etc. Areas, that contain groups of rooms connected by some logical organisation. A Spawn class to dictate where Creature and Item instances are created (eg. which room, or at what coordinates), when they are created and with what frequency, and from which CreatureTypes and ItemTypes. You may have some logic in here to randomise things a bit. Spells, skills, abilities, etc. all derived from a base Action class or interface that specifies prerequisites (eg. current position, mana points, some degree of learning of a skill, etc). Normal commands and actions can go here too since they often have some sort of requirements too (eg. a 'sleep' command requires that you're not already sleeping.) A FutureEvent class which is essentially a callback that you push onto a priority queue to execute in the future. You can use these to schedule combat rounds, spell cool-down times, night/day cycles, whatever you like. A hash/map/dictionary of name->value pairs for player and item statistics. Not type-safe but you'll appreciate the flexibility later. In my experience making stats member variables is workable but inflexible, and having specialise 'attribute' classes becomes a convoluted nightmare when debugging. A Modifier type which contains a stat name and a modifier value (eg. +10, +15%). These get added to your creatures as they are used (eg. through a spell effect, or by wielding an enchanted weapon) and get stripped off later by a timed FutureEvent or some other event such as a command being executed. Game-specific classes such as PlayerClass or PlayerRace, each of which describe a player's class (eg. warrior, wizard, thief) or race (human, elf, dwarf) and set starting stat values and limits, skill availability lists, special powers, etc. Basic player interface classes which will vary depending on your actual game type. You might have a rendering classes for a graphical game, or in a MUD you might have a Connection class reflecting the TCP connection to the player's client. Try to keep all game logic out of these. A scripting interface. Most of your commands, spells, and creature AI can be realised more quickly with a decent scripting interface and it keeps compile times down too. It also allows for some great in-game debugging and diagnostic capabilities.
That would be the basic high level structure I'd use.
You may want to consider a component entity system rather than a traditional inheritance hierarchy; they tend to be more flexible to certain types of change, make tool (e. g. world editor) development much easier, and present opportunities for parallelization that might not otherwise be obvious or easy.
Many modern game engines are moving away from the "monolithic class Object" (or class Entity, whatever) and toward a "bag of components" approach.
There are numerous books and articles around. Generally:
the Game Programming Gems series (apparently both volume 5 and 6 have component articles, and I think 2 might have had one as well) the Game Developers Conference website often has links to presentations from prior years, and is a goldmine for this sort of thing -- you can even usually buy the CDs/DVDs for former years cheaply (especially if you attend) Gamasutra's feature article archives and the Game Developer Magazine backissues.
Specifically (some noteworthy ones, google "component" and "entity" in various combinations for more):
Each of these articles links to a few more.
Try the kool-aid, you might like it. =)
How about something of the sort :
Here are some other diagrams:
Look at JADE's Javadoc for a good overview of a complex game :)
Be bold, your game shouldn't be a clone of hack and slash nonsense. Your actors should be able to switch sides, take their own initiative enlist other actors, etc. Otherwise, whats the point?

No comments:

Post a Comment