بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف
النتائج 1 إلى 12 من 12
  1. #1
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    حقيقة لطالما لم يجذبني الكلام النظري الممل وكانت أفضل الطرق التي إتخذتها للتعلم في جميع المجالات هي بالتطبيق المباشر وهذا بإذن الله ما سنلجأ إلى

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

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

    فتح محرر الميتاإيديتور
    قم بفتح برنامج الميتاتريدر والضغط على F4 أو إضغط على الأيقونه في الصوره التاليه وهي الخاصه بمحرر الميتاإيديتور

    ثم نتبع الشرح كما في الصور لإنشاء ورقة عمل جديده


    سوف نجد عدة خيارات من حيث نوع العمل الذي تريد إنشاءه سواء إكسبرت أو مؤشر أو سكربت أو ملف DLL
    في حالتنا هذه سنختار إنشاء إكسبرت

    ثم


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


    وما علينا سوى البدء في كتابة الأسطر البرمجية التي نريد من الإكسبرت تنفيذه

    بعد فتح نافذة التحرير سوف تجد أن هناك بعض الأسطر البرمجيه المكتوبة سابقا وهي عباره عن الأسطر الرئيسيه الخاصه بلغة MQL
    كما في الصوره التاليه:


    سوف نجد أن نافذة التحرير مقسمة إلى عدة أقسام بالإضافة إلى قسم المتغيرات الخارجيه (سوف نتكلم عنهم بإختصار في الدروس القادمه)
    القسم الأول
    الداله
    كود PHP:
    init() 
    وهذه الدالة يتم إستدعائها مرة واحدة فقط عند بداية عمل الإكسبرت

    القسم الثاني
    الداله
    كود PHP:
    deinit() 
    وهذه الدالة يتم إستدعائها مرة واحدة فقط عند نهاية عمل الإكسبرت

    القسم الثالث
    الداله
    كود PHP:
    start() 
    وهذه الداله يقوم الإكسبرت أو المؤشر بقراءتها عند كل تحرك للسعر
    أول ما سنلاحظه في بداية تعلمنا للبرمجه هو وجود بعض الكلمات التي تكون ذو لون رمادي باهت
    والبعض الآخر يكون ذو اللون الأسود والبعض الآخر تكون له عدة ألوان مختلفه مثل الأزرق أو الأحمر أو الأخضر
    فماذا تعني هذه الألوان :
    الكلمات الملونه باللون الرمادي الباهت تسمى تعليقات وهو يشبه تماما الهامش الذي كنا نستخدمه في الإمتحانات فهو لا يؤثر على عمل الإكسبرت وحتى أن الإكسبرت لا يقرأه فمثلا إذا أراد المبرمج توضيح معلومه في الكود يقوم بإستخدام التعليقات

    ويتم كتابة التعليقات بطريقتين
    1_ أن يسبق السطر علامة
    كود PHP:
    // 
    ولكن ماذا إذا كانت التعليقات أكثر من سطر هل نظل نضع في بداية كل سطر هذه العلامة
    لأ . هناك طريقة أخرى لكتابة التعليقات بوضع هذه العلامة
    كود PHP:
    /* 
    في بداية السطر ثم وضع هذه العلامه
    كود PHP:
    */ 
    في نهاية السطر

    مثال :
    كود PHP:
    //this is comment 
    أو
    كود PHP:
     /*
       this is comment 
       thanks
       */ 
    الآن نأتي للكلمات التي تأخذ ألوان مختلفة وهي تعتبر من الكلمات المحجوزه في لغة MQL
    ويتم إستخدامها للتعبير عن شيء محدد ولا يمكن إستخدامها لغير ذلك

    النوع الثالث هي الكلمات ذو اللون العادي أو الأسود أي ليست الملونه وهي ليست كلمات محجوزه في لغة MQL وليست تعليقات بل هي كلمات قمنا بإستخدامها وأعطيناها دلالة محدده أو قيمة معينه تعبر عنها
    وسوف نتكلم عن هذه المتغيرات بالتفصيل

    بالنسبه للكلام السابق لا تهتموا به أو تعتقدوا بصعوبته فلاحقا ستعلمون أن الموضوع أبسط ما يمكن عند التطبيق الحي

    أما الآن سنبدأ في دراسة إكسبرت لتقاطع خطي موفينج أفريج .
    كود PHP:
     //+------------------------------------------------------------------+
     //|                                                                  |
     //|                                   Copyright, created 16 Apr 2010 |
     //|                                       Desinged by MR.dollar      |
     //|                                                                  |
     //|                                          mrdollar.cs@gmail.com   |
     //+------------------------------------------------------------------+

     #property copyright "MR.dollar EA"
     #property link      "mrdollar.cs@gmail.com"
     
    extern string  MM_Parameters "---------- Money Management";
     
    extern double  Lots 1;                                           
      
     
    extern string S5="---------------- Order Management";
    extern int StopLoss=50;
    extern int TakeProfit=50;
     
    extern int MagicNumber=2533;
     
    int init()
      {
    //----
       
    //----
       
    return(0);
      }
     
    //+------------------------------------------------------------------+
     //| FUNCTION DEFINITIONS    deinitialization function                |
     //+------------------------------------------------------------------+

     
    int deinit()
      {
    //----
       
    //----
       
    return(0);
      }

     
     
    //+------------------------------------------------------------------+
     //| FUNCTION DEFINITIONS   Start function                            |
     //+------------------------------------------------------------------+

     
    int start()
       {
       
    Comment("Programmed by MR.dollar"+"\n"+"منتدى المتداول العربي "+"\n"+"www.arabictrader.com/vb");
       
          
    //////////////////////////////////////////////////
           
           
    double ma1,ma2,ma11,ma22,rsi1,rsi2,ma3,ma33,ma4,ma44;
          
           
    ma1=iMA(NULL,0,30,0,MODE_EMA,PRICE_CLOSE,1);
           
    ma11=iMA(NULL,0,30,0,MODE_EMA,PRICE_CLOSE,2);
           
    ma2=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,1);
           
    ma22=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,2);
          
       
    ////////////////////////////////////////////////////
          
    double SL,TP
        
        
        
    ////////////////////////////////
       
              
        
    if (ma22<ma11&&ma2>ma1 ){
           
             if(
    StopLoss==0){SL=0;}else{SL=Ask-StopLoss*Point;}
               if(
    TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*Point;}
               
                
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"MR.dollar EA",MagicNumber,0,Blue);
                 
    PlaySound("Alert.wav");
                
              }
           
           
        
        
        
    /////////////////////
        
        
    if (ma22>ma11&&ma2<ma1 ){
           
             if(
    StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
               if(
    TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
               
                
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"MR.dollar EA",MagicNumber,0,Red); 
                 
    PlaySound("Alert.wav");
                
                 
              }
           } 
    وسوف تجدون أيضا الإكسبرت في المرفقات

    حفاظا على تسلسل الموضوع وتناسقه أي إستفسار يرجى وضعه في الموضوع المخصص للأسئله البرمجيه على هذا الرابط
    http://www.arabictrader.com/vb/t37612.html
    الملفات المرفقة الملفات المرفقة
    آخر تعديل بواسطة MR.dollar ، 23-04-2010 الساعة 08:21 PM
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  2. #2
    تاريخ التسجيل
    Jul 2008
    الإقامة
    فلسطين
    المشاركات
    351

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    اتشرف ان اكون اول من يشكرك لفتح هذا الموضوع
    تحياتي لك

  3. #3
    تاريخ التسجيل
    Jul 2008
    الإقامة
    سوريا
    المشاركات
    668

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    خطوة رائعة
    بارك الله فيك اخي الكريم ولكن اتمنى منك الشرح بالتفصيل الممل ..
    متابع معك

  4. #4
    تاريخ التسجيل
    May 2009
    الإقامة
    السعودية
    العمر
    43
    المشاركات
    519

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    السلام عليكم
    في اول الصفوف تلميذ نشيط

    وشكرا لك الموضوع من انفع المواضيع
    تطبيق عملي
    ابو نواف

  5. #5
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    اقتباس المشاركة الأصلية كتبت بواسطة ayman_am76 مشاهدة المشاركة
    اتشرف ان اكون اول من يشكرك لفتح هذا الموضوع
    تحياتي لك
    اقتباس المشاركة الأصلية كتبت بواسطة adam222 مشاهدة المشاركة
    خطوة رائعة
    بارك الله فيك اخي الكريم ولكن اتمنى منك الشرح بالتفصيل الممل ..
    متابع معك
    اقتباس المشاركة الأصلية كتبت بواسطة فارس نواف مشاهدة المشاركة
    السلام عليكم
    في اول الصفوف تلميذ نشيط

    وشكرا لك الموضوع من انفع المواضيع
    تطبيق عملي
    ابو نواف
    شكرا لردودكم الكريمه
    وأي إستفسار أرجو وضعه في هذا الموضوع حفاظا على التسلسل
    http://www.arabictrader.com/vb/t37612.html
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  6. #6
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    بسم الله الرحمن الرحيم

    الآن لنبدأ في شرح الإكسبرت السابق بالتفصيل الممل

    أول جزء في الإكسبرت



    كود PHP:
     //+------------------------------------------------------------------+
     //|                                                                  |
     //|                                   Copyright, created 16 Apr 2010 |
     //|                                       Desinged by MR.dollar      |
     //|                                                                  |
     //|                                          mrdollar.cs@gmail.com   |
     //+------------------------------------------------------------------+ 
    وهو الجزء الخاص بحقوق الملكيه ويمكن حذفه ولن يؤثر على أداء الإكسبرت كما سنلاحظ أنه ذو لون باهت أي أنه عباره عن كومنت أو تعليق لذلك يسبق كل سطر علامه //

    كود PHP:
     #property copyright "MR.dollar EA"
     #property link      "mrdollar.cs@gmail.com" 
    ثم يأتي الجزء التابع له وهو أيضا الخاص بحقوق الملكيه وحذفه لن يؤثر على آداء الإكسبرت أيضا

    الجزء الثاني

    كود PHP:
    extern string  MM_Parameters "---------- Money Management";
     
    extern double  Lots 1;                                           
     
     
    extern string S5="---------------- Order Management";
    extern int StopLoss=50;
    extern int TakeProfit=50;
    extern int MagicNumber=2533
    وهو الجزء الخاص بالمتغيرات الخارجية للإكسبرت والتي ستظهر في خصائص الإكسبرت عن تفعيله على الشارت مثل الأستوب لوز أو الهدف

    ولكن لنلاحظ شيء الآن

    ماذا تعني extern
    كما لاحظنا أن هذه الكلمة تتلون عند كتابتها في محرر الميتاإيديتور لذلك فهي من الكلمات المحجوزه وتستخدم لتعريف متغير خارجي ويتم كتابتها قبل نوع المتغير (ولكن ما هي المتغيرات وماذا تعني بنوع المتغير ؟)

    المتغيرات
    كما قلنا في الدرس السابق هي كلمات قمنا بإستخدامها وأعطيناها دلالة محدده أو قيمة معينه تعبر عنها
    فمثلا أنا كتبت المتغير A وقمت بإعطاءه الرقم 1
    فيعتبر A هو المتغير والقيمه التي أعطيتها له هي الرقم 1
    ولكن هل يمكن أن أكتب في محرر الميتاإيدتور مباشره
    كود PHP:
    A=
    في هذه الحاله سيعطي خطأ لأن الميتاإيديتور لا يعرف ما معنى A أساسا هل هي رقم صحيح هل هي حرف هل هي رقم عشري

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


    إذا كيف نقوم بتعريف المتغيرات ؟

    وماذا تعني string double int bool

    int
    هذه الكلمة المحجوزه تستخدم لتعريف متغير على أنه رقم صحيح وليس عشري
    مثال:
    كود PHP:
    int StopLoss=30;
     
    int ahmed=1
    ففي المثال السابق عرفنا المتغير StopLoss على أنه عدد صحيح وأعطيناه القيمه 30
    ونفس الشيء عرفنا المتغير ahmed على أنه عدد صحيح وأعطيناه القيمه 1

    double
    تستخدم هذه الكلمة لتعريف متغير على أنه رقم عشري
    مثال:
    كود PHP:
    double  Lots 1.5
    عرفنا المتغير Lots على أنه عدد عشري

    string
    تستخدم هذه الكلمة المحجوزه لتعريف متغير على أنه سلسلة نصيه أو كلمه ويجب كتابة هذه الكلمة بين علامتي تنصيص " "
    مثال:
    كود PHP:
    string  MM_Parameters "---------- Money Management"
    فقد عرفنا المتغير MM_Parameters على أنه متغير نصي ويحمل الكلمه أو الجمله
    "---------- Money Management"

    bool
    تستخدم هذه الكلمة المحجوزه لتعريف متغير على أنه متغير منطقي يأخذ قيمتين فقط إما صح (true) أو خطأ (false)
    مثال:
    كود PHP:
    bool Buy=false;
     
    bool Sell=true
    فمثلا إذا وضعت شرط في الإكسبرت إذا كانت قيمة Sell=true إفتح صفقة بيع
    عندها سيقوم الإكسبرت بإختبار الشرط هل قيمة Sell=true فإذا كان صحيح سيقوم بالبيع

    ويجب ملاحظة أن في نهاية كل سطر برمجي نقوم بوضع علامة الفاصله المنقوطه ;
    وهي شيء أساسي يجب أن تكون موجوده في نهاية السطر البرمجي في لغة MQL

    الجزء الثالث


    وهو الداله init

    كود PHP:
    int init()
      {
    //----
       
    //----
       
    return(0);
      } 
    وكما أخبرنا سابقا فإن هذه الداله يتم إستدعائها مرة واحد عند بداية عمل الإكسبرت أو المؤشر وأحيانا كثيره لا يتم إستخدامها وتترك فارغه وليس بداخلها أية أوامر لذلك سنتركها حاليا

    الجزء الرابع
    كود PHP:
    int deinit()
      {
    //----
       
    //----
       
    return(0);
      } 
    وهو الداله deinit
    ويتم إستدعائها مرة واحد عند نهاية عمل الإكسبرت أو المؤشر وحذفه من الشارت


    وبإذن الله في الدرس القادم سندخل مباشرة في الداله start

    أي سؤال يرجى وضعه في هذا الموضوع
    http://www.arabictrader.com/vb/t93908.html#post1643767
    آخر تعديل بواسطة MR.dollar ، 30-04-2010 الساعة 02:18 PM
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  7. #7
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    الداله start
    يتم تنفيذ هذه الداله every tick أو عند كل تحرك للسعر

    الشكل العام للداله يكون كالآتي
    كود PHP:
    int start()
     {
     
     return(
    0);

    ثم نقوم بكتابة جميع الأوامر التي نريد تنفيذها بين القوسين
    كود PHP:
    {

    لنبدأ الآن في دراسة الكود الموجود في الإكسبرت السابق وضعه

    في البدايه قمنا بوضع هذا السطر
    كود PHP:
    Comment("Programmed by MR.dollar"+"\n"+"منتدى المتداول العربي "+"\n"+"www.arabictrader.com/vb"); 
    الأمر Comment
    هذا الأمر يقوم بوضع التعليق الذي قمت بتعريفه في أعلى يسار الصفحه كما في الصوره التاليه
    وتقوم بكتابة التعريفات التي تريدها بين القوسين ( ) وإذا كانت جمل نصيه يجب كتابتها بين علامتي تنصيص "" بداخل القوسين ويتم الفصل بين كل تعليق أو جمله وآخرى بعلامة ( + ) أو فاصله ( , )

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


    نأتي الآن إلى تعريف المؤشرات التي نريد إستخدامها وهي عبارة عن خطي الموفينج

    في البداية قمنا بتعريف المتغيرات التي سنستخدمها للدلاله على الموفينج أفريج على أنها متغير من نوع double أو متغير عدد عشري في السطر التالي
    كود PHP:
    double ma1,ma2,ma11,ma22
    ولاحظ أنه يمكن كتابة تعريف المتغيرات بأكثر من طريقه
    فيمكن كتابتها بالشكل السابق أو كتابتها بهذه الطريقه
    كود PHP:
    double ma1;
           
    double ma2;
           
    double ma11;
           
    double ma22
    أو كتابتها بهذه الطريقه
    كود PHP:
     double ma1,
             
    ma2,
             
    ma11,
             
    ma22
    ثم قمنا بإعطاء قيمة لهذه المتغيرات وهي الموفينج أفريج
    كود PHP:
    ma1=iMA(NULL,0,30,0,MODE_EMA,PRICE_CLOSE,1);
           
    ma11=iMA(NULL,0,30,0,MODE_EMA,PRICE_CLOSE,2);
           
    ma2=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,1);
           
    ma22=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,2); 
    سوف تجد أن لكل مؤشر موجود في الميتاتريدر له دالة معينة تقوم بإستدعائه سوف أشرح منهم دالة إستدعاء مؤشر الموفينج أفريج

    كود PHP:
    iMAstring symbolint timeframeint periodint ma_shiftint ma_methodint applied_priceint shift) ; 
    iMA وهي أحد الكلمات المحجوزه لإستدعاء مؤشر الموفينج أفريج
    وهي إختصار ل Moving Average
    symbol العمله التي سنقوم بحساب قيمة الموفينج أفريج لها إجعلها NULL لعملة الشارت الحالي
    timeframe التايم فريم المستخدم
    period , ma_shift ,ma_method ,applied_price إعدادات مؤشر الموفينج أفريج

    shift وهي رقم الشمعة التي سنحسب عندها قيمة الموفينج افريج
    0 تعني الشمعة الحالية , 1 تعني الشمعة السابقه ,2 تعني الشمعة قبل السابقه وهكذا .

    وهذه قائمة بأشهر دوال إستدعاء المؤشرات المستخدمة في الميتاتريدر

    كود PHP:
       iADXstring symbolint timeframeint periodint applied_priceint modeint shift);
       
    iATRstring symbolint timeframeint periodint shift); 
       
    iBandsstring symbolint timeframeint periodint deviationint bands_shiftint applied_priceint modeint shift);
       
    iCCIstring symbolint timeframeint periodint applied_priceint shift); 
       
    iDeMarkerstring symbolint timeframeint periodint shift);
       
    iForcestring symbolint timeframeint periodint ma_methodint applied_priceint shift);  
       
    iIchimokustring symbolint timeframeint tenkan_senint kijun_senint senkou_span_bint modeint shift);
       
    iMomentumstring symbolint timeframeint periodint applied_priceint shift);
       
    iMAstring symbolint timeframeint periodint ma_shiftint ma_methodint applied_priceint shift);
       
    iOsMAstring symbolint timeframeint fast_ema_periodint slow_ema_periodint signal_periodint applied_priceint shift);
       
    iMACDstring symbolint timeframeint fast_ema_periodint slow_ema_periodint signal_periodint applied_priceint modeint shift);
       
    iSARstring symbolint timeframedouble stepdouble maximumint shift);
       
    iRSIstring symbolint timeframeint periodint applied_priceint shift);
       
    iStochasticstring symbolint timeframeint Kperiodint Dperiodint slowingint methodint price_fieldint modeint shift);
       
    iWPRstring symbolint timeframeint periodint shift); 
       
    iStdDevstring symbolint timeframeint ma_periodint ma_shiftint ma_methodint applied_priceint shift); 
    كما يمكنك عن طريق تظليل أي كلمة محجوزه ثم بالضغط على F1 سوف تظهر لك خصائص هذه الداله ومعنى الإعدادات الخاصه بها فعلى سبيل المثال مؤشر Stochastic عند التظليل عليه سوف تظهر لنا خصائصه كما في الصوره التاليه



    الآن كيف يتم إستدعاء مؤشر خارجي غير موجود في الميتاتريدر
    يتم ذلك بإستخدام الداله iCustom

    كود PHP:
    iCustomstring symbolint timeframestring name, ..., int modeint shift); 
    حيث
    symbol هو إسم العمله إجعلها NULL لكي تكون العمله للشارت المستخدم
    timeframe التايم فريم المستخدم إجعله 0 لكي يكون التايم فريم للشارت المستخدم
    name إسم المؤشر ويوضع بين علامتي تنصيص ""
    ثم تقوم بعد ذلك بكتابة متغيرات المؤشر الخارجيه تباعا أو يمكنك عدم كتابتها في حال أردتها أن تكون الإعدادات الإفتراضيه
    mode وهو رقم الإندكس للمؤشر لاحظ الصوره التاليه
    shift وهو رقم الشمعة التي سنأخذ عندها قيمة المؤشر

    مع ملاحظة أنه يجب أن يتم وضع المؤشر بصيغة ex4 عن طريق عمل Compile له ويوضع في مجلد indicators في برنامج الميتاتريدر حتى يتمكن الإكسبرت من إستدعائه

    على سبيل المثال في الصوره التاليه سوف تجد أن السهم ذو اللون الأصفر رقم الإندكس له هو 0 فإذا أردنا إستدعاء السهم الأصفر سنقوم بكتابة 0 في خانة mode وإذا أردنا إستدعاء السهم الأحمر سيكون الإندكس 2


    للمزيد عن الداله iCustom راجع هذا الإستفسار
    http://www.arabictrader.com/vb/t93175.html

    لأي إستفسار يوضع في هذا الموضوع
    http://www.arabictrader.com/vb/t93908.html
    آخر تعديل بواسطة MR.dollar ، 30-04-2010 الساعة 04:13 PM
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  8. #8
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    بسم الله الرحمن الرحيم

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

    قمنا بإستدعاء مؤشرات الموفينج أفريج التي سنستخدمها في التقاطع كما شرحنا في الدرس السابق
    كود PHP:
    double ma1,ma2,ma11,ma22,rsi1,rsi2,ma3,ma33,ma4,ma44;
          
           
    ma1=iMA(NULL,0,30,0,MODE_EMA,PRICE_CLOSE,1);
           
    ma11=iMA(NULL,0,30,0,MODE_EMA,PRICE_CLOSE,2);
           
    ma2=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,1);
           
    ma22=iMA(NULL,0,9,0,MODE_EMA,PRICE_CLOSE,2); 
    ولكن بقي الآن أن نعرف كيف نترجم هذا التقاطع إلى كلام يفهمه الإكسبرت

    لاحظ في الصورة التاليه
    اضغط على الصورة لعرض أكبر

الاســـم:	chart1.gif
المشاهدات:	646
الحجـــم:	14.5 كيلوبايت
الرقم:	230223

    الشمعة رقم 2 هي الشمعة قبل التقاطع والتي قمنا بتعريف الموفينج لها بالمتغير ma11 , ma22
    الشمعة رقم 1 هي شمعة التقاطع والتي قمنا بتعريف الموفينج أفريج لها بالمتغير ma1 , ma2

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

    العمليات الحسابيه والمقارنه والعطف

    سنحاول شرح أهم العمليات الحسابيه وعمليات المقارنه التي نستخدمها دائما في لغة البرمجة MQL4

    العمليات الحسابيه
    1_ عملية الجمع ( + )
    كود PHP:
    A=3+5
    في المثال السابق فإن المتغير A سيأخذ قيمة ناتج جمع 3+5 فيكون الناتج 8
    2_عملية الطرح( - )
    كود PHP:
     A=20-5
    معناه إطرح 5 من 20 والناتج سيعطى للمتغير A
    فيكون A=15
    3_عملية الضرب ( * )
    كود PHP:
    A=2*3
    معناه أضرب 2 في 3 والناتج يعطى للمتغير A
    4_ عملية القسمه ( / )
    كود PHP:
    A=6/2
    معناه إقسم 6 على 2 والناتج يعطى للمتغير A
    5_ عملية الزياده ( ++ )
    كود PHP:
    i++ 
    معناه قم بزياد 1 إلى المتغير i فمثلا إذا كان i=5 فإنه سيصبح 6
    6_ عملية النقصان ( -- )
    كود PHP:
     i-- 
    معناه قم بطرح 1 من المتغير i فإذا كان i=5 فإنه سيصبح 4
    هذه تعتبر أهم العمليات الحسابيه التي سنستخدمها كثيرا أثناء البرمجه
    7_ عملية المساواه ( = )
    كود PHP:
     A 
    معناه أننا سنعطي A القيمه 3

    عمليات المقارنه

    1_ أكبر من ( < )
    كود PHP:

    إذا كان A أكبر من 3 فإن المقارنه صحيحه
    2_ أكبر من أو يساوي (=< )
    كود PHP:
    >= 
    إذا كان A أكبر من أو يساوي 7 فإن عملية المقارنه صحيحه
    3_ أصغر من ( > )
    كود PHP:

    إذا كان A أصغر من 0 فإن المقارنه صحيحه
    4_ أصغر من أو يساوي ( => )
    كود PHP:
    <= 
    إذا كان A أصغر من أو يساوي 1 فإن عملية المقارنه صحيحه
    5_ لا يساوي ( =! )
    كود PHP:
     A != 10 
    إذا كان A لا يساوي 10 فإن المقارنه صحيحه
    6_ عملية التساوي ( == )
    كود PHP:
    == 
    وتعني هل قيمة A تساوي 4 إذا كانت الإجابه نعم فإن المقارنه صحيحه
    وهي تختلف عن العملية الحسابيه ( = )

    عمليات العطف
    1_ و ( && )
    كود PHP:
     A && <
    وتعني إذا كان A أكبر من 3 و B أصغر من 7 فإن عملية المقارنه صحيحه
    2_ أو ( || )
    كود PHP:
    || 
    وتعني إذا كان A أكبر من 3 أو B أصغر من 7 فإن عملية المقارنه صحيحه
    3_ لا تتحقق ( ! )
    كود PHP:
    !(== 7
    وتعني إذا لم يتحقق أن A تساوي 7
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  9. #9
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    بسم الله الرحمن الرحيم

    تحدثنا في الدرس السابق عن العمليات الحسابيه وكيفية إستخدامها وغالبا لا يخلوا أي إكسبرت أو مؤشر من بعض هذه العمليات الحسابيه

    وصلنا في الإكسبرت إلى السطر البرمجي التالي
    كود PHP:
     if (ma22<ma11&&ma2>ma1 ){ 
    فماذا يعني هذا السطر ومتى نستخدمه ؟
    الجمل الشرطيه ( if )
    تستخدم الجمل الشرطيه للتحقق من شرط ما فإذا تحقق الشرط يقوم بتنفيذ جسد الشرط وإذا لم يتحقق الشرط لا ينفذه وينتقل إلى السطر الذي يليه
    ويتم كتابتها بالشكل التالي
    كود PHP:
     if(------) 
         {--------;} 
    يتم كتابة الشروط التي يتحقق منها بين القوسين ( )
    ثم يلي ذلك جسد الشرط وهو ما سيتم تنيفذه عند تحقق الشرط ويكتب بين القوسين { } ولا ننسى في نهاية الأمر وضع الفاصله المنقوطه ;

    فمثلا لو قلت إذا كان A أكبر من 80 قم بإظهار رساله فسيكون الشرط كالتالي
    كود PHP:
     if( 80 )
        { 
    Alert(" A above 80 "); } 
    ملحوظه :
    إذا كان جسد الشرط يتكون من جمله واحد يمكن الإستغناء عن الأقواس { } ويمكن كتابة الشرط بالشكال التالي
    كود PHP:
     if( 80 )
        
    Alert(" A above 80 "); 
    ملحوظه :
    يمكن وضع أكثر من أمر في جسد الجمله الشرطيه يتم تنفيذه عند تحقق شرط معين كما في المثال التالي
    كود PHP:
    if( 80 )
        { 
        
    Alert(" A above 80 ");
        
    PlaySound("Alert.wav");
        } 
    في الجمله الشرطيه السابقه فيتم التحقق من الشرط هل A أكبر من 80 فإذا كان الناتج هو ترو ينفذ جسد الشرط ولكن إذا لم يتحقق أن A أكبر من 80 فلن ينفذ شيء ولكن ماذا إذا أردت تنفيذ أمر آخر إذا لم يتحقق أن A أكبر من 80
    في هذه الحاله يمكننا إستخدام الجمله الشرطيه if .....else

    الجمله الشرطيه if .....else
    إذا قلت إذا كان A =50 إطبع A تساوي 50 وإلا إطبع A لا تساوي 50 في هذه الحاله يمكننا إستخدام الجمله الشرطيه if ....... else
    وسيتم كتابتها بالشكل التالي
    كود PHP:
     if( A==50){
             Print(
    "A = 50");}
             else{
             Print(
    "A != 50");} 
    نعود الآن إلى الإكسبرت الذي نعمل على دراسته
    كود PHP:
     if (ma22<ma11&&ma2>ma1 
    ويتم فيها التحقق من شروط الدخول وهو إذا كان ma22 وهو ما قمنا تعريفه سابقا على أنه يأخذ قيمة الموفينج أفريج 9 للشمعة رقم 2 أقل من ma11
    و ma2 أكبر من ma1
    أي إذا كان موفينج 9 للشمعة قبل السابقه الشمعة رقم 2 أقل من موفينج 30 للشمعة قبل السابقه ثم أصبح موفينج 9 للشمعة السابقه الشمعة رقم 1 أكبر من موفينج 30 للشمعة السابقه
    عندها يتأكد التقاطع ثم يتم تنفيذ جسد جملة الشرط وهو ما تم وضعه بين القوسين { }

    ثم الجزء الخاص بتعريف الأستوب لوز والهدف
    كود PHP:
    if(StopLoss==0){SL=0;}else{SL=Ask-StopLoss*Point;}
               if(
    TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*Point;} 
    واستخدم فيها الجمله الشرطيه if.............else
    وهي إذا كان StopLoss يساوي 0 وهو ما نقوم بتحديده من المتغيرات الخارجيه للإكسبرت فاجعل SL =0
    وإلا فإنه ينفذ الأمر الآخر وهو
    SL=Ask-StopLoss*Point
    حيث Ask هو سعر الدخول شراء
    StopLoss وهو عدد نقاط الأستوب لوز
    فمثلا إذا كان سعر الدخول شراء هو 1.3077 وجعلت الأستوب لوز يساوي 20 نقطة
    Point وهي قيمة النقطة للزوج الحالي
    فسيكون SL=1.3077-20*Point
    فيصبح الأستوب لوز 1.3057
    ونفس الشيء بالنسبه للهدف

    وبعد ذلك ينفذ الأمر OrderSend
    كود PHP:
    OrderSend(Symbol(),OP_BUY,Lots,Ask,3,SL,TP,"MR.dollar EA",MagicNumber,0,Blue); 
    ويقوم بإصدار تنبيه صوتي
    كود PHP:
    PlaySound("Alert.wav"); 
    ثم بعد ذلك نغلق الجمله الشرطيه بإستخدام القوس {

    ويتم كتابة الأمر OrderSend بالشكل التالي
    كود PHP:
    OrderSendstring symbolint cmddouble volumedouble priceint slippagedouble stoplossdouble takeprofitstring commentint magicdatetime expirationcolor arrow_color); 
    حيث
    symbol هو إسم العمله
    cmd وهو نوع الصفقه شراء أو بيع او غير ذلك
    volume وهو حجم اللوت
    price وهو سعر الدخول بالنسبة للشراء فيكون سعر الدخول هو سعر Ask وبالنسبه للبيع فيكون سعر الدخول هو سعر Bid
    إذا كانت الأوامر معلقه فيكون سعر الدخول هو مكان وضع الأمر المعلق
    slippage أقصى تغير في السعر يسمح به فمثلا إذا وضعته 3 وكان سعر الدخول 90.15 فسوف يسمح الإكسبرت بتحرك أقصى حد 3 نقاط ويمكن الدخول في الصفقه
    stoploss الأستوب لوز
    takeprofit الهدف
    comment التعليق الذي يتم كتابته بجوار الصفقه
    magic الماجيك نمبر
    expiration تاريخ إنتهاء الصفقه وهو خاص بالأوامر المعلقه
    arrow_color لون السهم الذي سيظهر على الشاشه عند فتح الصفقه

    بعد ذلك نضع شروط الدخول بيع
    كود PHP:
    if (ma22>ma11&&ma2<ma1 ){
           
             if(
    StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
               if(
    TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
               
                
    OrderSend(Symbol(),OP_SELL,Lots,Bid,3,SL,TP,"MR.dollar EA",MagicNumber,0,Red); 
                 
    PlaySound("Alert.wav");
                
                 
              } 
    وأخيرا نغلق الداله start بإستخدام القوس {
    ونكون قد أنهينا بفضل الله تصميم أول إكسبرت لك قد يكون الموضوع صعب في البدايه بسبب كثرة الأوامر والأكواد ولكن مع الإستمرار في التعلم ستجد الأمر بسيط

    وفي الدرس القادم سنحاول نضيف بعض الخصائص الإضافيه للإكسبرت مثل أقصى عدد للصفقات ودالة إغلاق الأمر ونصعب الأمر قليلا

    أي إستفسار يرجى إضافة في الموضوع التالي
    http://www.arabictrader.com/vb/t93908.html
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  10. #10
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    بسم الله الرحمن الرحيم

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

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

    أولا : الحلقه for

    سوف تتضح أكثر بمثال لنرى المثال التالي بالنسبة للحلقه for
    كود PHP:
    for(int i=5;i>0;i--)
     {
     
    PlaySound("Alert.wav");
     } 
    في البدايه نقوم بكتابة الحلقه for ثم يتبعها قوسين نقوم بداخلها بكتابة شروط الحلقه وفي الحلقه السابقه قمنا أولا بتعريف المتغير i=5 ثم قمنا بمقارنه هل i أكبر من صفر إذا كانت الإجابه نعم فقم بطرح واحد من قيمة i ولا ننسى وضع الفاصله المنقوطه التي تفصل بين كل جزء والآخر ثم تقوم بتنفيذ جسم الحلقه وهو إعطاء تنبيه ثم تعود الحلقه مره أخرى لمقارنه الشروط بعد أن أصبحت i=4
    هل i>0 إذا كانت الإجابه نعم سيطرح واحد من i ثم ينفذ جسم الحلقه وهو إصدار التنبيه
    ثم يعود إلى المقارنه مرة أخرى حتى يصل إلى i=0 ثم يقارن هل i>0 فستكون الإجابه فولس بالتالي يتم إنهاء الحلقه وينتقل إلى الأمر التالي

    ثانيا : الحلقه while

    هذه الحلقه لا تختلف عن الحلقه for إلا أنها لا تحتوي على إبتداء للحلقه أو نقصان أو زياده بل تقوم مباشرة بعملية المقارنه كما في المثال التالي
    كود PHP:
    int i;
    while(
    i<20)
     {
     
    PlaySound("Alert.wav");i++
     } 
    نقوم مباشرة بالمقارنه هل i أقل من 20 إذا كانت الناتج ترو يقوم بإصدار تنبيه ثم يعود مره أخرى هل i أقل من 20 فإذا كان الناتج ترو سوف يقوم بإصدار تنبيه وغالبا ما تستخدم هذه الحلقه إذا لم نعرف قيمة i أو إذا كانت i قيمه متغيره

    ملحوظات :
    يمكن إستخدام أكثر من أمر في جسم الحلقه مثلا
    كود PHP:
    for(int i=5;i>0;i--)
     {
     
    PlaySound("Alert.wav");
     Print(
    "ArabicTrader");
     } 
    يمكننا أيضا تعريف المتغير i خارج الحلقه مثلا
    كود PHP:
    int i;
      for(
    i=0;i<20;i++)
     {
     
    PlaySound("Alert.wav");
     } 
    طبعا هذه الحلقات بإختصار ولكن مع التطبيق وعندما ندخل في الإكسبرتات الصعبه سنعرف كيفية إستخدام هذه الحلقات بشكل إحترافي أكثر

    الدوال :

    كما أخبرنا سابقا أن الدوال الأساسيه الموجوده في المؤشر أو الإكسبرت ثلاثة دوال هم
    كود PHP:
     init()      start()     deinit
    لنبدأ بمثال مباشر
    كود PHP:
    int orderscnt(){
     
     
      return(
    0);
      } 
    كما نلاحظ يتم تعريف الداله تماما كأننا نقوم متغير
    فمثلا إذا أردنا أن تعود الداله بقيمة عدد صحيح فسوف نقوم بتعريفها على أنها int أو عدد صحيح
    وإذا أردنا أن تعود الداله بقيمة عدد عشري سنقوم بتعريفها بإستخدام الأمر double
    وإذا كانت ستعود بقيمة منطقيه ترو أو فولس سنقوم بتعريفها على أنها متغير من نوع bool
    ثم بعد ذلك يتبع الداله قوسين ()
    بعد ذلك نستخدم الأقواس { } ويوضع بداخلها الأوامر التي ستنفذها الداله عند إستدعائها
    ثم تأتي في النهاية الداله return وهي تقوم بإنهاء هذه الداله وتعود بالقيمه التي أخذتها هذه الداله
    طبعا في مثالنا السابق الداله سوف تعود بالقيمه 0

    لنبدأ بدالة بسيطه تحسب قيمة حاصل جمع متغيرين
    كود PHP:
    int equal(){
    int a=5int b=12;

    int c=a+b;

    return(
    c);

    في المثال السابق قمنا بتعريف المتغير a وأخذ القيمه 5 والمتغير b وأخذ القيمه 12
    والمتغير c=a+b
    ثم قمنا بإنهاء الداله وحفظ الناتج عن طريق الأمر
    كود PHP:
    return(c); 
    الآن إذا أردت إستخدام هذه الداله بداخل الداله start وأردت على سبيل المثال أن أقوم بعمل مقارنه بسيط إذا كان ناتج الداله أقل من 20 فسوف يقوم بإصدار تنبيه صوتي

    سنقوم بكتابة بداخل الداله start
    كود PHP:
     if( equal() < 20 ){PlaySound("Alert.wav");} 
    طبعا إذا راجعنا ناتج الداله equal فسوف يكون 12+5 بالتالي ستكون عملية المقارنه ترو وسوف يقوم بإصدار تنبيه

    الآن ماذا إذا أردت أن أجعل الرقمين 12 و 5 كمتغيرين يتم تحديدهم كل مره عند إستدعاء الداله
    في هذه الحاله سنقوم أولا بتعريف الداله بشكل آخر فبدلا من أن نقوم بتعريف المتغيرين a و b بداله الداله نفسها سنقوم بتعريفهم بداخل القوسين ( ) كما في المثال التالي

    كود PHP:
    int equal(int a int b){

    double c=a+b;

    return(
    c);

    والآن عندما نقوم بإستدعاء الداله بداخل الداله start
    ستكون المقارنه كالآتي
    كود PHP:
    if(equal(125)<20){PlaySound("Alert.wav");} 
    كما ترى قمنا بكتابة 12 و 5 بدلا من a و b التي قمنا بتعريفها بداخل القوسين ويمكن كتابة أي قيمة أخرى بدلا من 12 و 5 وهذا هو سبب تعريفنا لها كمتغيرات في الداله

    وفي الدرس القادم سوف نقوم بإنشاء دالة تعود بعدد الصفقات المفتوحه لنستخدمها في الإكسبرت الذي نعمل عليه
    آخر تعديل بواسطة MR.dollar ، 16-07-2010 الساعة 08:49 PM
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  11. #11
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي رد: بالتطبيق المباشر تعلم برمجة الإكسبرتات من البدايه حتى الإحتراف

    آخر تعديل بواسطة MR.dollar ، 09-09-2010 الساعة 12:46 AM
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  12. #12
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    12,985

    افتراضي

    شرح تطبيقي للداله ObjectCreate

    http://forum.arabictrader.com/t135010.html
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

المواضيع المتشابهه

  1. {{ ملخص مفيد لتعلم برمجة المؤشرات بالتطبيق المباشر }}
    By man2forex in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 92
    آخر مشاركة: 15-10-2017, 06:31 PM
  2. مناقشة دروس تعلم برمجة الإكسبرتات بالتطبيق المباشر
    By MR.dollar in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 143
    آخر مشاركة: 17-12-2012, 02:57 AM
  3. لماذا توقف موضوع بالتطبيق المباشر تعلم البرمجة اخى أسامة ؟
    By Ahmed Shihab in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 1
    آخر مشاركة: 24-09-2010, 10:52 AM

الاوسمة لهذا الموضوع