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

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

MQL4: كتابة مستشار لأنماط التداول المعطاة

مرحبا بالجميع!

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

ماذا سوف نكتب؟

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

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

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

تصميم مستشارنا

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

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

منط TimeFilter () {

إذا كان (! MondayTrade && DayOfWeek () == 1) return (false)؛

إذا كان (! TuesdayTrade && DayOfWeek () == 2) return (false)؛

إذا كان (! WednesdayTrade && DayOfWeek () == 3) return (false)؛

إذا كان (! ThursdayTrade && DayOfWeek () == 4) return (false)؛

إذا كان (! FridayTrade && DayOfWeek () == 5) return (false)؛

عودة (صحيح) ؛

}

سيعود خطأ إذا كان اليوم الحالي من الأسبوع محظورًا في الإعدادات. الكتلة الثانية يولد إشارة:

إشارة int () {

if (! TimeFilter ()) return -5؛

double Close1 = iClose (_Symbol، signal_period، 1)؛

double Open1 = iOpen (_Symbol، signal_period، 1)؛

double Close2 = iClose (_Symbol، signal_period، 2)؛

مزدوج Open2 = iOpen (_Symbol ، إشارة_فترة ، 2) ؛

if (Close2> Open2 && Close1 <Open1) {

عودة OP_SELL ؛

}

if (Close2 Open1) {

عودة OP_BUY ؛

}

عودة -5 ؛

}

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

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

منطقي ExitTime (int dir) {

من أجل (int i = OrdersTotal ()؛ i> = 0؛ i-) {

if (! OrderSelect (i، SELECT_BY_POS، MODE_TRADES))) {

تواصل.

}

if (OrderSymbol ()! = Symbol () || OrderMagicNumber ()! = magic) {

تواصل.

}

إذا (TimeCurrent () - OrderOpenTime ()> 60 * exit_bars * exit_period) {

عودة (صحيح) ؛

}

}

عودة (خطأ) ؛

}

هذا ، في الواقع ، هو كل شيء. يمكنك رؤية الرمز الكامل للمستشار في الفيديو التعليمي.

النتائج

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

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

استنتاج

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

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

ترك تعليقك