المشاركات الشعبية

اختيار المحرر - 2020

MQL4: حساب المعاملات الإحصائية واستخدامها لتحسين المستشارين

تحياتي ، أصدقاء!

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

معيار التحسين المخصص

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

يتم حساب المعلمة نفسها ، فيما يتعلق بالتحسين ، في نص الخبير باستخدام طريقة onTester () الخاصة.

نسبة الحبار

فيما يلي حساب لمعامل الحبار الكلاسيكية:

double OnTester () {double AvProfit = 0؛ ضعف كالمار = 0 ؛ if (TesterStatistics (STAT_PROFIT_TRADES)> 0) {AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_TRADES)، Digits)؛ Kalmar = NormalizeDouble (AvProfit / TesterStatistics (STAT_BALANCE_DD)، Digits)؛ } عودة (كالمار) ؛ }

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

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

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

double OnTester () {double AvProfit = 0؛ ضعف كالمار = 0 ؛ if (TesterStatistics (STAT_PROFIT_TRADES)> 0) {AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_TRADES)، Digits)؛ } Kalmar = NormalizeDouble (-AvProfit * (TesterStatistics (STAT_CONPROFITMAX_TRADES) / TesterStatistics (STAT_TRADES)) / (TesterStatistics (STAT_MAX_LOSSTRADE) * (TesterStatistics (STAT_CONLOSSMAX_TRADES) عودة (كالمار) ؛ }

معامل سورتينو

يتم استخدام العديد من المقاييس المختلفة لتقييم أنظمة التداول. يهدف كل واحد منهم إلى تحديد عامل أو آخر ، وأحد هذه المؤشرات هو معامل Sortino.

معامل سورتينو من المعتاد استخدامه في الحالات التي نهتم فيها بنشر القيم السلبية للعوائد. طريقة الحساب تشبه إلى حد كبير حساب نسبة شارب. إذا تم استخدام كل من العائد الموجب والسالب لنسبة Sharpe ، عندئذٍ يتم استخدام القيم السالبة فقط لمعامل Sortino.

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

دعنا نكتب كودًا يقوم بحساب وإرجاع قيمة معامل Sortino:

double OnTester () {double AvProfit = 0؛ double Sortino = 0؛ ضعف AvLoss = 0 ؛ مضاعفة MaxLoss = 0 ؛ if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES)، Digits)؛ AvLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS) / TesterStatistics (STAT_LOSS_TRADES)، Digits)؛ MaxLoss = NormalizeDouble (TesterStatistics (STAT_MAX_LOSSTRADE)، Digits)؛ Sortino = NormalizeDouble (((AvProfit-MaxLoss) / - AvLoss) ، أرقام) ؛ عودة (سورتينو) ؛ }

معامل المدرب

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

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

دعنا نلقي نظرة على الكود:

double OnTester () {double AvProfit = 0؛ ترينور مزدوج = 0 ؛ ضعف AvLoss = 0 ؛ MaxProfit مزدوج = 0 ؛ if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES)، Digits)؛ AvLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS) / TesterStatistics (STAT_LOSS_TRADES)، Digits)؛ MaxProfit = NormalizeDouble (TesterStatistics (STAT_MAX_PROFITTRADE)، Digits)؛ Treynor = NormalizeDouble (((AvProfit-MaxProfit) / - AvLoss) ، أرقام) ؛ عودة (ترينور) ؛ }

نسبة شارب

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

double OnTester () {double AvProfit = 0؛ شارب مزدوج = 0 ؛ ضعف ObLoss = 0 ؛ MaxProfit مزدوج = 0 ؛ if (TesterStatistics (STAT_PROFIT_TRADES)> 0) AvProfit = NormalizeDouble (TesterStatistics (STAT_GROSS_PROFIT) / TesterStatistics (STAT_PROFIT_TRADES)، Digits)؛ MaxProfit = NormalizeDouble (TesterStatistics (STAT_MAX_PROFITTRADE)، Digits)؛ ObLoss = NormalizeDouble (TesterStatistics (STAT_GROSS_LOSS) ، أرقام) ؛ حاد = NormalizeDouble (((AvProfit-MaxProfit) / - ObLoss) ، أرقام) ؛ عودة (شارب) ؛ }

استنتاج

وبالتالي ، يمكنك تحسين أي إحصاءات لخبراء التداول الخاصين بك ، وذلك باستخدام الصيغ الخاصة بالمعاملات الإحصائية المختلفة المقبولة عمومًا ، وكذلك كتابة بياناتك الخاصة.

شاهد الفيديو: Robot Building Tutorials #6 - Intro to MQL4 (كانون الثاني 2020).

ترك تعليقك