مشاكل برمجة عويصة فيما يخص الاكسبرتات
النتائج 1 إلى 6 من 6
  1. #1
    تاريخ التسجيل
    Jul 2008
    الإقامة
    ALEX
    العمر
    35
    المشاركات
    866

    افتراضي مشاكل برمجة عويصة فيما يخص الاكسبرتات

    كود:
    int MyPendingOrdersTotal(int Magic)
    {
      int c=0;
      int total  = OrdersTotal();
     
      for (int cnt = 0 ; cnt < total ; cnt++)
      {
        OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
        {
          c++;
        }
      }
      return(c);
    }
    اريد استخدام الدالة MyPendingOrdersTotal (الخاصة بالاستاذ وضاح العطار في اكسبرت الشهباء)
    ولكن المشكلة عند نسخها في اى اكسبرت آخر نظهر رسالة خطأ التالية
    '(' - function definition unexpected H:\AL Trade 4\experts\TestExpert.mq4 (153, 25)
    معترض على الاقواس !

    'c' - variable not defined H:\AL Trade 4\experts\TestExpert.mq4 (163, 7)
    معترض على المتغير C رغم انه معرف ف بداية الدالة على انه متغير من نوع Int

    '}' - unbalanced parentheses H:\AL Trade 4\experts\TestExpert.mq4 (168, 1)
    وآخيرا وليس آخرا معترض على القوس } رغم ان عدد الاقواس المفتوحة = عدد الاقواس المغلقة


    جربت وضع الدالة في اكسبرت آخر ظهر لدى هذة الرسالة
    Function "MyPendingOrdersTotal" is not referenced and will be removed from exp-file
    مش عاجبه الدالة كلها وعاوز يحذفها كلها المرادى !

    وايضا باستخدام دالة الاستاذ مستر دولار DeletePendingOrders نفس رسائل الخطأ السابقة تماماً
    هذا كود الاكسبرت الكلى

    كود:
    //+------------------------------------------------------------------+
    //|                                                  My_First_EA.mq4 |
    //|                                                      Coders Guru |
    //|                                         http://www.forex-tsd.com |
    //+------------------------------------------------------------------+
    #property copyright "Coders Guru"
    #property link      "http://www.forex-tsd.com"
    
    //---- input parameters
    extern double    TakeProfit=250.0;
    extern double    Lots=0.1;
    extern double    TrailingStop=35.0;
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- 
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //---- 
       
    //----
       return(0);
      }
    
    int Crossed (double line1 , double line2)
       {
          static int last_direction = 0;
          static int current_dirction = 0;
          
          if(line1>line2)current_dirction = 1; //up
          if(line1<line2)current_dirction = 2; //down
    
    
    
          if(current_dirction != last_direction) //changed 
          {
                last_direction = current_dirction;
                return (last_direction);
          }
          else
          {
                return (0);
          }
       } 
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
      {
    //---- 
    
       
       int cnt, ticket, total;
       double shortEma, longEma;
       
       
       if(Bars<100)
         {
          Print("bars less than 100");
          return(0);  
         }
       if(TakeProfit<10)
         {
          Print("TakeProfit less than 10");
          return(0);  // check TakeProfit
         }
         
         
       shortEma = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
       longEma = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
       
       int isCrossed  = Crossed (shortEma,longEma);
       
       total  = OrdersTotal(); 
       if(total < 1) 
         {
           if(isCrossed == 1)
             {
                ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"My EA",12345,0,Green);
                if(ticket>0)
                  {
                   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
                  }
                else Print("Error opening BUY order : ",GetLastError()); 
                return(0);
             }
             if(isCrossed == 2)
             {
    
                ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red);
                if(ticket>0)
                  {
                   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
                  }
                else Print("Error opening SELL order : ",GetLastError()); 
                return(0);
             }
             return(0);
         }
       for(cnt=0;cnt<total;cnt++)
         {
          OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
          if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
            {
             if(OrderType()==OP_BUY)   // long position is opened
               {
                // should it be closed?
               if(isCrossed == 2)
                    {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                     return(0); // exit
                    }
                // check for trailing stop
                if(TrailingStop>0)  
                  {                 
                   if(Bid-OrderOpenPrice()>Point*TrailingStop)
                     {
                      if(OrderStopLoss()<Bid-Point*TrailingStop)
                        {
                         OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                         return(0);
                        }
                     }
                  }
               }
             else // go to short position
               {
                // should it be closed?
                if(isCrossed == 1)
                  {
                   OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                   return(0); // exit
                  }
                // check for trailing stop
                if(TrailingStop>0)  
                  {                 
                   if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                     {
                      if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                        {
                         OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                         return(0);
                        }
                     }
                  }
               }
            }
         }
     
    int DeletePendingOrders()
    {
      int total  = OrdersTotal();
      
      for (int cnt = total-1 ; cnt >= 0 ; cnt--)
      {
        OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()>OP_SELL))
        {
          OrderDelete(OrderTicket());
        }
      }
      return(0);
    }
    
    
       return(0);
      }
    //+------------------------------------------------------------------+


    ما مشكلة هذة اللغة المعترضة دائماً !!

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

    افتراضي رد: مشاكل برمجة عويصة فيما يخص الاكسبرتات

    اقتباس المشاركة الأصلية كتبت بواسطة EgyptionPro مشاهدة المشاركة
    كود:
    int MyPendingOrdersTotal(int Magic)
    {
      int c=0;
      int total  = OrdersTotal();
     
      for (int cnt = 0 ; cnt < total ; cnt++)
      {
        OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && OrderType()>OP_SELL)
        {
          c++;
        }
      }
      return(c);
    }
    اريد استخدام الدالة MyPendingOrdersTotal (الخاصة بالاستاذ وضاح العطار في اكسبرت الشهباء)
    ولكن المشكلة عند نسخها في اى اكسبرت آخر نظهر رسالة خطأ التالية
    '(' - function definition unexpected H:\AL Trade 4\experts\TestExpert.mq4 (153, 25)
    معترض على الاقواس !

    'c' - variable not defined H:\AL Trade 4\experts\TestExpert.mq4 (163, 7)
    معترض على المتغير C رغم انه معرف ف بداية الدالة على انه متغير من نوع Int

    '}' - unbalanced parentheses H:\AL Trade 4\experts\TestExpert.mq4 (168, 1)
    وآخيرا وليس آخرا معترض على القوس } رغم ان عدد الاقواس المفتوحة = عدد الاقواس المغلقة


    جربت وضع الدالة في اكسبرت آخر ظهر لدى هذة الرسالة
    Function "MyPendingOrdersTotal" is not referenced and will be removed from exp-file
    مش عاجبه الدالة كلها وعاوز يحذفها كلها المرادى !

    وايضا باستخدام دالة الاستاذ مستر دولار DeletePendingOrders نفس رسائل الخطأ السابقة تماماً
    هذا كود الاكسبرت الكلى

    كود:
    //+------------------------------------------------------------------+
    //|                                                  My_First_EA.mq4 |
    //|                                                      Coders Guru |
    //|                                         http://www.forex-tsd.com |
    //+------------------------------------------------------------------+
    #property copyright "Coders Guru"
    #property link      "http://www.forex-tsd.com"
    
    //---- input parameters
    extern double    TakeProfit=250.0;
    extern double    Lots=0.1;
    extern double    TrailingStop=35.0;
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- 
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //---- 
       
    //----
       return(0);
      }
    
    int Crossed (double line1 , double line2)
       {
          static int last_direction = 0;
          static int current_dirction = 0;
          
          if(line1>line2)current_dirction = 1; //up
          if(line1<line2)current_dirction = 2; //down
    
    
    
          if(current_dirction != last_direction) //changed 
          {
                last_direction = current_dirction;
                return (last_direction);
          }
          else
          {
                return (0);
          }
       } 
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
      {
    //---- 
    
       
       int cnt, ticket, total;
       double shortEma, longEma;
       
       
       if(Bars<100)
         {
          Print("bars less than 100");
          return(0);  
         }
       if(TakeProfit<10)
         {
          Print("TakeProfit less than 10");
          return(0);  // check TakeProfit
         }
         
         
       shortEma = iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
       longEma = iMA(NULL,0,13,0,MODE_EMA,PRICE_CLOSE,0);
       
       int isCrossed  = Crossed (shortEma,longEma);
       
       total  = OrdersTotal(); 
       if(total < 1) 
         {
           if(isCrossed == 1)
             {
                ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"My EA",12345,0,Green);
                if(ticket>0)
                  {
                   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
                  }
                else Print("Error opening BUY order : ",GetLastError()); 
                return(0);
             }
             if(isCrossed == 2)
             {
    
                ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"My EA",12345,0,Red);
                if(ticket>0)
                  {
                   if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
                  }
                else Print("Error opening SELL order : ",GetLastError()); 
                return(0);
             }
             return(0);
         }
       for(cnt=0;cnt<total;cnt++)
         {
          OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
          if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
            {
             if(OrderType()==OP_BUY)   // long position is opened
               {
                // should it be closed?
               if(isCrossed == 2)
                    {
                     OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                     return(0); // exit
                    }
                // check for trailing stop
                if(TrailingStop>0)  
                  {                 
                   if(Bid-OrderOpenPrice()>Point*TrailingStop)
                     {
                      if(OrderStopLoss()<Bid-Point*TrailingStop)
                        {
                         OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                         return(0);
                        }
                     }
                  }
               }
             else // go to short position
               {
                // should it be closed?
                if(isCrossed == 1)
                  {
                   OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
                   return(0); // exit
                  }
                // check for trailing stop
                if(TrailingStop>0)  
                  {                 
                   if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                     {
                      if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                        {
                         OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                         return(0);
                        }
                     }
                  }
               }
            }
         }
     
    int DeletePendingOrders()
    {
      int total  = OrdersTotal();
      
      for (int cnt = total-1 ; cnt >= 0 ; cnt--)
      {
        OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (OrderMagicNumber() == MagicNumber && OrderSymbol()==Symbol() && (OrderType()>OP_SELL))
        {
          OrderDelete(OrderTicket());
        }
      }
      return(0);
    }
    
    
       return(0);
      }
    //+------------------------------------------------------------------+


    ما مشكلة هذة اللغة المعترضة دائماً !!

    عند تعريف داله يجب أن تقوم بتعريفها خارج الداله start ثم بعد ذلك تقوم بإستدعائها داخل الداله start لتؤدي عملها وهذا سبب الخطأ عندك يجب أن تقوم بتعريف الداله DeletePendingOrders خارج الداله start على إعتبار أنها داله لوحدها
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  3. #3
    تاريخ التسجيل
    Jul 2008
    الإقامة
    ALEX
    العمر
    35
    المشاركات
    866

    افتراضي رد: مشاكل برمجة عويصة فيما يخص الاكسبرتات

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    عند تعريف داله يجب أن تقوم بتعريفها خارج الداله start ثم بعد ذلك تقوم بإستدعائها داخل الداله start لتؤدي عملها وهذا سبب الخطأ عندك يجب أن تقوم بتعريف الداله DeletePendingOrders خارج الداله start على إعتبار أنها داله لوحدها
    ربنا يبارك فيك دائما سريع الخدمة

  4. #4
    تاريخ التسجيل
    Jul 2008
    الإقامة
    ALEX
    العمر
    35
    المشاركات
    866

    افتراضي رد: مشاكل برمجة عويصة فيما يخص الاكسبرتات

    اخى الفاضل اين نعرف الدالة DeletePendingOrders هل نعرفها بداخل الدالة init ام قبل او بعد الدالة Start ولا في بداية الاكسبرت ؟
    وهل نعرفها بInt ام لها كلمة محجوزة آخرى لتعريف الدالة


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

    افتراضي رد: مشاكل برمجة عويصة فيما يخص الاكسبرتات

    اقتباس المشاركة الأصلية كتبت بواسطة EgyptionPro مشاهدة المشاركة
    اخى الفاضل اين نعرف الدالة DeletePendingOrders هل نعرفها بداخل الدالة init ام قبل او بعد الدالة Start ولا في بداية الاكسبرت ؟
    وهل نعرفها بInt ام لها كلمة محجوزة آخرى لتعريف الدالة

    في لغة MQL4 يوجد ثلاث دوال أساسيه هي
    init و deinit و start

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

  6. #6
    تاريخ التسجيل
    Jul 2008
    الإقامة
    ALEX
    العمر
    35
    المشاركات
    866

    افتراضي رد: مشاكل برمجة عويصة فيما يخص الاكسبرتات

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    في لغة MQL4 يوجد ثلاث دوال أساسيه هي
    init و deinit و start

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

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

  1. ما هي أفضل الكتب لتعلم برمجة الاكسبرتات
    By MR.dollar in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 7
    آخر مشاركة: 03-09-2010, 06:13 AM
  2. لمحترفين برمجة الاكسبرتات .......مساعدة بسيطة جدا
    By batttot in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 4
    آخر مشاركة: 29-04-2010, 05:18 PM
  3. سؤال في برمجة الاكسبرتات (بسيط)
    By Dr.Aoudi in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 1
    آخر مشاركة: 11-01-2009, 08:00 AM

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