برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

    السلام عليكم ورحمة الله وبركاته
    دكرت في الموضوع السابق
    http://www.arabicbroker.com/forum/sh...ad.php?t=62445
    اني سأعمل على تطوير الاكسبرت الدي تم شرحه وطلبت من الاعضاء اي اقتراحات لتطوير عمل الاكسبرت لكن لللاسف الشديد لم تكون هناك اي اقتراحات او متابعة جدية للموضوع على الرغم من ندرة مواضيع تعليم البرمجة في المنتديات العربية و الجهد المبدول في شرح اللغة في الموضوع السابق
    على امل ان تكون هناك متابعة في الموضوع الحالي سنعمل على 3 تطويرات لللاكسبرت
    1-- عمل فلتر لزيادة فرصة نجاح الاكسبيرت حيت سيكون الخطين العلوي و السفلي
    لمؤشر Bollinger Bands فلترين حيت يجب على الشمعة الدالة على البيع ملامسة الخط العلوي للبلوجنر
    و يجب الشمعة الدالة على الشراء ملامسة الخط السفلي للبلوجنر
    2-- عمل تطوير لمراعات اداراة راس المال لللاكسبرت حيت ستحدد نسبة مئوية يجب على الاكسبيرت احترامها في اي صفقة كما سنحدد اخنيار لعدد الصفقات المفتوحة في نفس الوقت
    3-- عمل تطيور لحماية الاكسبرت حيت سنقوم بشرح كيفية عمل كود لتحديد تاريخ صلاحية الاكسبيرت حيت لا يعمل ادا تعدى تاريخ اليوم تاريخ الصلاحية بالاضافة الى عدم اشتغال الاكسبرت في حال كان رقم الحساب مخالف لرقم حساب نكون وضعناه مسبقا داخل الكود


  • #2
    رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

    لعمل التطوير الاول نحتاج الى انشاء متغيرين جديدن من نوع double اي متغير عشري
    اسم الاول bbupline سنخزن فيه قيمة خط البلوجينر العلوي
    و الثاني bbdownline سنخزن فيه قيمة خط البلوجينر السفلي
    صورة مرفقة

    ثم ننتقل الى الدالة
    OnTick
    و نكتب في اولها الكود التالي
    كود PHP:
    bbupline=iBands(NULL,0,20,2,0,PRICE_MEDIAN,MODE_UPPER,1);
           bbdownline=iBands(NULL,0,20,2,0,PRICE_MEDIAN,MODE_LOWER,1); 
    
    صورة مرفقة

    شرح الدالة ibands
    هي دالة معرفة داخل الميتاتريدر تعطي قيمة الخط السفلي او العلوي بناءا على البارامترات التالية
    البارامتر الاول null
    و يعني رمز العملة نكتب null لكي تجلب بيانات العملة المشغل عليها الاكسبيرت
    البارامتر الثاني 0
    وتعني الفريم الدي اردنا ات تطبق عليه البلوجنر نضع 0 لكي يجلب لنا الفريم الدي يشتغل عليه الاكسبيرت
    البارامترات الثالت 20 و الرابع 2 و الخامس 0 و السادس PRICE_MEDIAN هي خاصة بمؤشر البلوجنر يمكن للمبرمج ان يغيرها حسب قيم البلوجنر المناسبة له
    كما في الصورة المرفقة

    البارامتر السابع MODE_UPPER
    هو البارامتر الدي يعطي لدالة نوع الخط الدي ستؤول اليه
    MODE_UPPER تعني الخط العلوي
    MODE_LOWER تعني الخط السفلي
    البارامتر الثامن 1
    هو رقم الشمعة الدي ستجلب بيانات البلوجينر المناسبة له
    وضعنا الرقم 1 لاننا نريد بيانات الشمعة السابقة

    الان بقي شرطين نضيفهما للشروط السابقة في الاكسبيرت
    1-- ان اللو الشمعة الدالة على الشراء يجب ان يكون اقل او يساوي الخط السفلي للبولجينر
    2--و هاي الشمعة الدالة على البيع يجب ان يكون اكبر او يساوي الخط العلوي للبلوجينر
    صورة مرفقة

    تعليق


    • #3
      رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

      صورة على المحرر
      التطوير الثاني يشمل اضافة خيار اقصى عدد للصفقات المفتوحة ثم اضافة خيار لنسبة الخسارة من رأس المال لكل صفقة
      نبدأ بخيار اقصى عدد صفقات مفتوحة حيت سننشئ متغيرين خارجيين
      بهدا الشكل
      كود PHP:
       extern string S1="Max Order";
       extern double max=5; 
      
      صورة على المحرر

      ثم في الدالة OnTick
      نغير في الشروط كما في الصورة

      بقي خيار لنسبة الخسارة من رأس المال لكل صفقة
      سنحتاج كدلك لاضافة متغيرين خارجيين على الشكل التالي
      كود PHP:
      extern string S3="risk %";
       extern double risk=1; 
      
      صورة على المحرر

      سننشئ متغير داخلي هده المرة اسمه k

      عمل هدا المتغير هو تخزين العدد 10000 ادا الزوج له اربعة ارقام بعد الفاصله و تخزين 100 ادا كان للزوج رقمين بعد الفاصلة ودلك كي احدد تغير الزوج بالنقاط
      فمثلا لو تحرك الزوج الدولار ين من 100.50 الى 100.90 في لغة الميتاتريدر فهو تحرك ب 0.40 لدلك يجب ان نضربه في المتغير k لتصبح 40
      الان سنتعمل المتغير في الدالة OnInit كي تخزن فيه القيمة 100 او 10000
      شرح الدالة OnInit موجود في المشاركة التالية
      السلام عليكم ورحمة الله وبركاته سنقوم في هده الورشة ان شاء الله بتعليم كيفية برمجة اكسبرت يقوم بالدخول بناءا على نمادج شموع الانعكاسية سنختار في هده الورشة اقوى نمادج الشموع وسوف نقوم ببرمجة الاكسبرت ليتعرف عليها و الدخول بناءا على دلالات الشموع كما سنقوم بفتح ورشة جديدة بعد انتهاء هده الورشة نشرح فيها كيفية دمج فلتر واحد او

      صورة على المحرر

      الان سنفوم بكتابة الدالة التالية خارج الدوال الرئيسية مثل الدوال التي برمجنا سابقا
      كود PHP:
       double lots(int risk,double stoppips)
       {
       double aa=(AccountBalance()*risk)/100;
       if(lottyp==0)
       {
       return (NormalizeDouble((aa/stoppips)*10,2));
       }
       
       if(lottyp==1){
       
       return (NormalizeDouble(aa/stoppips,2));
       }
       
       if(lottyp==2){
       return (NormalizeDouble((aa/stoppips)/10,2));
        
       } 
      
      صورة على المحرر


      الدالة ستقوم بالاتي
      ادا الحساب به 10000 دولار
      نسبة الخسارة 5 بالمئة اي 500 دولار
      و نقاط الاستوب 20
      اي ان الدالة ستعطي 25 عقد ادا كان الحساب ميني او 250 ادا كان
      ميكرو و 2.5 ادا كان ستاندار
      NormalizeDouble تستعمل لتقريب عدد عشري الى عددين فقط بعد الفاصلة ودلك لان الميتاتريدر لا يقبل اكثر من عددين بعد الفاصلة في قيمة اللوت
      في الاخير نقوم بادخل الدالة الى داخل الدالة OnTick على الشكل التالي

      حيت البارامتر الاول هو risk و هدا يحدده المتداول كما يشاء في تشغيل الاكسبرت
      البارامتر الثاني هو
      كود PHP:
      ((High[1]-Low[1])+spread)*k 
      
      وهو طول الشمعة السابقى زائد الاسبرد مضروب في k كي يعطينا المجموع بالنقاط

      تعليق


      • #4
        رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية


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

        year و خزنا قيها 2015 اي الستة التي سيتوقف فيها الاكسبيرت عت العمل
        month و خزنا فيها 5 اي ان الاكسبيرت ستوقف ما بعد شهر 5 سنة 2015
        account رقم الحساب الدي ادا شغل الاكسبيرت على رقم حساب غيره فانه لن يعمل

        الان سنقوم بتعديل الدالة OnTick

        في الشرط الاول
        كود PHP:
        (year>=Year()&& month>=Month())||AccountInfoInteger(ACCOUNT_LOGIN)!=account 
        
        ()Year
        هي دالة معرفة داخل المتاتريدر و تعطي قيمة السنة الحالية اي ان قيمتها حاليا هي 2014
        ()Month
        هي دالة معرفة داخل المتاتريدر و تعطي قيمة الشهر الحالي اي ان قيمتها حاليا هي 3 غدا ستكون 4
        كود PHP:
        AccountInfoInteger(ACCOUNT_LOGIN) 
        
        يعطي رقم الحساب المفتوح في المنصة

        لدلك في الشرط الاول وضعنا التالي
        ادا كانت السنة اكبر من 2015 و الشهر اكبر من 5 او ان رقم الحساب المشغل عليه الاكسبيرت يخالف رقم الحساب الدي وضعناه داخل المتغير فان الاكسبيرت سيكتب
        ERREUR
        و لن ينفد اي صفقة على الاطلاق
        الان الكود الاخر
        كود PHP:
        else
        {
         bbupline=iBands(NULL,0,20,2,0,PRICE_MEDIAN,MODE_UPPER,1);
           bbdownline=iBands(NULL,0,20,2,0,PRICE_MEDIAN,MODE_LOWER,1);
        if((isibbuy(1)==1 || ishummer(1)==1 || isnjs(1)==1)&&Time0!=Time[0]&&TOTALORDER(MagicNumber)<=max && High[0]>High[1]&&Low[1]<=bbdownline)
           {
              spread=Ask-Bid; 
               SL=Low[1]-(1*point);
               TP=Ask+((High[1]-Low[1])+spread); 
               OrderSend(Symbol(),OP_BUY,lots(risk,((High[1]-Low[1])+spread)*k),Ask,3*Q,SL,TP," ",MagicNumber,0,Green);  
               Time0=Time[0];
           } 
         if((isibsell(1)==1 || ischb(1)==1 || isshk(1)==1)&&Time0!=Time[0]&& TOTALORDER(MagicNumber)<=max && Low[0]<Low[1]&& High[1]>=bbupline)
           {
               spread=Ask-Bid;
               SL=High[1]+spread+(1*point);
               TP=Bid-((High[1]-Low[1])+spread);
               OrderSend(Symbol(),OP_SELL,lots(risk,((High[1]-Low[1])+spread)*k),Bid,3*Q,SL,TP," ",MagicNumber,0,Green);  
               Time0=Time[0];    
           } 
            
        } 
        
        else
        تعني ادا كان الشرط الاول خاطئ فان الاكسبيرت سيقوم بعمله و يفتح الصفقات بشكل عادي

        تعليق


        • #5
          رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

          كود الاكسبيرت بعد التطويرات المشروحة
          كود PHP:
          //+------------------------------------------------------------------+
          //|                                                 arabicbroker.mq4 |
          //|                        Copyright 2013, MetaQuotes Software Corp. |
          //|                                              http://www.mql5.com |
          //+------------------------------------------------------------------+
          #property copyright "Copyright 2013, MetaQuotes Software Corp."
          #property link      "http://www.arabicbroker.com"
          #property version   "1.00"
          #property strict
          //+------------------------------------------------------------------+
          //| Expert initialization function                                   |
          //+------------------------------------------------------------------+
          extern string S2=" 0=micro/ 1=mini/ 2=Stander";
           extern int lottyp=2;
           extern string S1="Max Order";
           extern double max=5;  
           extern string S3="risk %";
           extern double risk=1;  
          
           int Q;
           datetime Time0;
           double point;
           int digits;
            int MagicNumber=12542;      
           double SL,TP,spread;
            double bbupline,bbdownline;
            int k;
            double stoppips;
          int year=2015;
          int month=5;
          int account=146254;
          int OnInit()
            {
          //---
             if(Digits==5||Digits==3)Q=10;
            else Q=1;
              if(Digits<4)
             {
                point=0.01;
                digits=2;
                k=100;
             }
             else
             {
                point=0.0001;
                digits=4;
                k=10000;
             }
          //---
             return(INIT_SUCCEEDED);
            }
          //+------------------------------------------------------------------+
          //| Expert deinitialization function                                 |
          //+------------------------------------------------------------------+
          void OnDeinit(const int reason)
            {
          //---
             
            }
          //+------------------------------------------------------------------+
          //| Expert tick function                                             |
          //+------------------------------------------------------------------+
          void OnTick()
            {
          //---
          if((year>=Year()&& month>=Month())||AccountInfoInteger(ACCOUNT_LOGIN)!=account)
          {
          printf("ERREUR");
          }
          else
          {
           bbupline=iBands(NULL,0,20,2,0,PRICE_MEDIAN,MODE_UPPER,1);
             bbdownline=iBands(NULL,0,20,2,0,PRICE_MEDIAN,MODE_LOWER,1);
          if((isibbuy(1)==1 || ishummer(1)==1 || isnjs(1)==1)&&Time0!=Time[0]&&TOTALORDER(MagicNumber)<=max && High[0]>High[1]&&Low[1]<=bbdownline)
             {
                spread=Ask-Bid; 
                 SL=Low[1]-(1*point);
                 TP=Ask+((High[1]-Low[1])+spread); 
                 OrderSend(Symbol(),OP_BUY,lots(risk,((High[1]-Low[1])+spread)*k),Ask,3*Q,SL,TP," ",MagicNumber,0,Green);  
                 Time0=Time[0];
             } 
           if((isibsell(1)==1 || ischb(1)==1 || isshk(1)==1)&&Time0!=Time[0]&& TOTALORDER(MagicNumber)<=max && Low[0]<Low[1]&& High[1]>=bbupline)
             {
                 spread=Ask-Bid;
                 SL=High[1]+spread+(1*point);
                 TP=Bid-((High[1]-Low[1])+spread);
                 OrderSend(Symbol(),OP_SELL,lots(risk,((High[1]-Low[1])+spread)*k),Bid,3*Q,SL,TP," ",MagicNumber,0,Green);  
                 Time0=Time[0];    
             } 
              
          }
          
          } 
            double lots(int risk,double stoppips)
           {
           double aa=(AccountBalance()*risk)/100;
           if(lottyp==0)
           {
           return (NormalizeDouble((aa/stoppips)*10,2));
           }
           
           if(lottyp==1){
           
           return (NormalizeDouble(aa/stoppips,2));
           }
           
           if(lottyp==2){
           return (NormalizeDouble((aa/stoppips)/10,2));
            
           }
           return 0;
           }
            int TOTALORDER(int Mg)
          {
            int j=0;
            int total  = OrdersTotal();
            for (int i = 0 ; i < total ;i++)
            {
              OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
              if (OrderMagicNumber() == Mg && OrderSymbol()==Symbol()&& (OrderType()==OP_BUY || OrderType()==OP_SELL))
              {
                j++;
              }
            }
            return (j);
          }
           
           
          
          int isibbuy(int c)
          {
           int t=0;
           if(Open[c]<Close[c] && Open[c+1]>Close[c+1] && Close[c]>=Open[c+1])
                 {
                   t=1;
                 }
          return t;
          }
          int isibsell(int c)
          {
           int t=0;
           if(Close[c]<Open[c] && Close[c+1]>Open[c+1] && Close[c]<=Open[c+1])
                 {
                   t=1;
                 }
          return t;
          }
          int ishummer(int c)
          {
          int t=0;
             if(Open[c]<Close[c] && (Close[c]-Open[c])<((Open[c]-Low[c])/2) && (Close[c]-Open[c])>(High[c]-Close[c]) )
               {
               t=1;
                 }
            if(Close[c]<Open[c] && (Open[c]-Close[c])<((Close[c]-Low[c])/2) && (Open[c]-Close[c])>(High[c]-Open[c]))
            {
             t=1;
            }      
               return (t);
          }   
          int ischb(int c)
          {
          int t=0;
             if(Open[c]<Close[c] && (Close[c]-Open[c])<((High[c]-Close[c])/2) && (Close[c]-Open[c])>(Open[c]-Low[c]) )
               {
               t=1;
                 }
            if(Close[c]<Open[c] && (Open[c]-Close[c])<((High[c]-Open[c])/2) && (Open[c]-Close[c])>(Close[c]-Low[c]))
            {
             t=1;
            }      
               return (t);
          }   
          int isnjs(int c)
          {
           int t=0;
           if(Open[c]<Close[c] && Open[c+1]>Close[c+1] && Close[c]>=(Open[c+1]-Close[c+1])/2)
                 {
                   t=1;
                 }
          return t;
          }
          int isshk(int c)
          {
           int t=0;
           if(Close[c]<Open[c] && Close[c+1]>Open[c+1] && Close[c]<=(Close[c+1]-Open[c+1])/2)
                 {
                   t=1;
                 }
          return t;
          } 
          
          نسخة في المرفقات
          الملفات المرفقة

          تعليق


          • #6
            رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

            ماشاء الله شغل ممتاز حبيبي توفيق
            انا متابع معك و هجرب الاكسبيرت

            المضارب العربي ثقة بلاحدود

            تعليق


            • #7
              رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

              شكرا لك اخي على الشرح وايضا على تكملة الاكسبيرت
              وجاري تجربته

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

              وشكرا لك

              تعليق


              • #8
                رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

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

                المضارب العربي ثقة بلاحدود
                بارك الله فيك اخي الكريم

                تعليق


                • #9
                  رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

                  المشاركة الأصلية بواسطة mdsalman مشاهدة المشاركة
                  شكرا لك اخي على الشرح وايضا على تكملة الاكسبيرت
                  وجاري تجربته

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

                  وشكرا لك
                  اهلا بك اخي الكريم
                  قم بحدف ما هو مضلل في الصورتين




                  تعليق


                  • #10
                    رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

                    موفق ان شاء الله اخى الكريم
                    تسجيل متابعه وسيتم تجربة الاكسبيرت ان شاء الله واعطاءك راى المتواضع به

                    تعليق


                    • #11
                      رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

                      المشاركة الأصلية بواسطة khaloood مشاهدة المشاركة
                      موفق ان شاء الله اخى الكريم
                      تسجيل متابعه وسيتم تجربة الاكسبيرت ان شاء الله واعطاءك راى المتواضع به
                      اهلا بك اخي الكريم

                      تعليق


                      • #12
                        رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

                        المشاركة الأصلية بواسطة taoufik02 مشاهدة المشاركة
                        اهلا بك اخي الكريم
                        قم بحدف ما هو مضلل في الصورتين





                        شكرا لك اخي الكريم وجاري عمل المطلوب

                        همسه ركبت الاكسبيرت على السيرفر ووضعت رقم الحساب داخلة
                        لاكن لي يوميين يعمل 24 ساعة لم يفتح اي صفة الى الان

                        تعليق


                        • #13
                          رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

                          تم التعديل بدون اي اخطاء في كود الاكسبيرت وجاري التجربه على السيرفر

                          تعليق


                          • #14
                            رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

                            المشاركة الأصلية بواسطة mdsalman مشاهدة المشاركة
                            شكرا لك اخي الكريم وجاري عمل المطلوب

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

                            هدا تجريب للنسخة القديمة على الباوند ين على دايلي من فترة وحققت نتيجة ممتازة

                            عموما ادا اشتغلت فممكن احد التحديثات لا يعمل ويعطل الاكسبيرت
                            وسأقوم بمراجعة الاكسبيرت من جديد

                            تعليق


                            • #15
                              رد: برمجة الاكسبيرتات الثانية:تطوير اكسبرت الشموع الانعكاسية

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

                              هدا تجريب للنسخة القديمة على الباوند ين على دايلي من فترة وحققت نتيجة ممتازة

                              عموما ادا اشتغلت فممكن احد التحديثات لا يعمل ويعطل الاكسبيرت
                              وسأقوم بمراجعة الاكسبيرت من جديد

                              شكرا لك اخي الكريم

                              فعلا النسخة القديمة اشتغلت
                              لاكن فيه مشكلة بالنسبة للوت بكون واحد استاندر
                              دخل على الكود للوت لقيته 2 وليس واحد فيه حاجة غريبه
                              ممكن تشرح لي كيف اغير اللوت في الاكسبيرت القديم اخلية 0.1 لاني اشتغل على عدة عملات

                              وشكرالك

                              تعليق

                              يعمل...
                              X