مشروع برمجي : اكسبيرت سوبابلكس للمضاعفات
صفحة 1 من 10 1234567 ... الأخيرةالأخيرة
النتائج 1 إلى 15 من 136
  1. #1
    تاريخ التسجيل
    Apr 2006
    الإقامة
    السعودية
    العمر
    47
    المشاركات
    6,555

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

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

    السلام عليكم ورحمة الله وبركاته




    شرح طريقة سوبابلكس باختصار :

    - يقوم الاكسبيرت بفتح صفقة بيع أو شراء لا يهم ( يتم تحديد نوع الدخول بناء على تحليل شخصي للمتاجر نفسه بحيث يكون أقرب ما يكون للصحة ).

    - إذا ربحت الصفقة مقدارا محددا من النقاط وليكن 80 نقطة ( أيضا يتم تحديدها من قبل المتاجر نفسه ) فخير وبركة .

    - إذا خسر الاكسبيرت 80 نقطة ( نفس الهدف المحدد ) فإنه يقوم بإغلاق الصفقة الخاسرة ويفتح بدلا عنها صفقة معاكسة للأولى بضعف عدد اللوتات للصفقة الأولى .

    - في حال ربحت الصفقة الثانية فإن الاكسبيرت يغلق الصفقة الرابحة ويكون محصلة ربحها يغطي خسارة الأولى زائدا ربح صافي 80 نقطة بمقدار اللوت الابتدائي .

    - في حال خسرت الصفقة الثانية فإن الاكسبيرت يغلق الصفقة الخاسرة الثانية ويفتح صفقة معاكسة للثانية بضعف عدد لوتات الصفقة الثانية .

    - يستمر الاكسبيرت في هذا المنوال حتى تربح آخر صفقة بحيث تعوض كل خسارات الصفقات الخاسرة التي قبلها مع ربح 80 نقطة صافية على اللوت الابتدائي .


    الاكسبيرت حاليا يقوم بالضبط كما شرحت سابقا .

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

    هذه التقنيات هي :

    - عند فتح صفقة معاكسة بضعف عدد اللوتات يكون الهدف لنصفها هو 80 نقطة . والهدف للنصف الآخر هو 160 .

    - في حال حقق النصف الهدف وحقق النصف الآخر هدفه أيضا فهذا يكون شيء جميل للغاية .

    - في حال تحققت أهداف نصف العقود فقط ولم تتحقق أهداف النصف الآخر فإننا في هذه الحالة نكون لم نحقق أي ربح أو خسارة من هذه المرحلة الأخيرة .

    - لذلك نعاود الدخول مرة أخرى بنفس عدد اللوتات للمرحلة الفائتة ولكن عكس العملية السابقة .

    - أيضا ينتظر صاحب الاستراتيجية تكون عدة قمم وقيعان بسيطة قبل الدخول فعليا في الصفقة الأولى .


    فيما يلي الاكسبيرت الحالي مع الشرح البرمجي .

    الخطوات القادمة سيكون بها تعديلات تحقق كل شروط الاستراتيجية .

    جزى الله خيرا صاحب الاستراتيجية الذي يشترط على من ربح من طريقته هذه أن يتصدق بنسبة معينة من ربحه ( نسيتها صراحة ) .

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

    الكود الحالي مع الشرح بشكل بسيط :

    كود PHP:
    #property copyright "Idea by Supaplex Programing by waddah attar"
    #property link      "waddahattar@hotmail.com"
     
    //خصائص الاكسبيرت
    extern int     TakeProfit=80;
    extern int     StopLoss=80;
    extern double  FirstLots=0.1;
    extern bool    OpenBuy=true;
    extern int     LotsDouble=2;
    extern int     MagicNumber 2008;
    int    Ticket1,Ticket2;
    int    t1,t2,gT1,gT2;
    int handle;
    int init()
    {
      
    Comment("Waddah Attar Supaplex");
      return(
    0);
    }
    int deinit()
    {
      
    Comment("");
      return(
    0);
    }
    int start()
    {
      
    Procces_1();
      return(
    0);
    }
    //****************************************************************************************************************  
    // الوظيفة الخاصة بفتح عقد الشراء مع مضاعفة إن اقتضى الأمر
    void OpenBUYOrder(double Lots,int Magic)
    {
       
    double sl,tp;
     
       
    sl=Ask-StopLoss*Point;
       
    tp=Ask+TakeProfit*Point;
     
       if (
    Lots==FirstLots)
       {
         
    Ticket1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"",Magic,0,Green);
         if(
    Ticket1>0)
         {
           
    gT1=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-TakeProfit*Point,"",Magic,0,Green);
           
    gT2=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-(TakeProfit*Point),"",Magic,0,Green);
         }
         else
         {
          
    Alert("خطأ شراء "," Err = ",GetLastError()," Price = ",Ask," Lots = ",Lots);
         }
       }
    }
    // الوظيفة الخاصة بفتح عقد البيع مع مضاعفة إن اقتضى الأمر
    void OpenSELLOrder(double Lots,int Magic)
    {
       
    double sl,tp;
     
       
    sl=Bid+StopLoss*Point;
       
    tp=Bid-TakeProfit*Point;
       if (
    Lots==FirstLots)
       {
         
    Ticket1=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"",Magic,0,Red);
         if(
    Ticket1>0)
         {
           
    gT1=OrderSend(Symbol(),OP_BUYSTOP,Lots,sl,3,sl-StopLoss*Point,sl+TakeProfit*Point,"",Magic,0,Green);
           
    gT2=OrderSend(Symbol(),OP_BUYSTOP,Lots,sl,3,sl-StopLoss*Point,sl+(TakeProfit*Point),"",Magic,0,Green);
         }
         else
         {
           
    Alert("خطأ بيع "," Err = ",GetLastError()," Price = ",Bid," Lots = ",Lots);
         }
       }
    }
    // الوظيفة الرئيسية
    int Procces_1()
    {
      
    double slot,ssl,stp,bw;
    // في حال لا يوجد صفقات حالية وكان هناك صفقات معلقة فاحذفها لأنه لا داعي لها
      
    if (MyRealOrdersTotal(MagicNumber)==&& MyPendingOrdersTotal(MagicNumber)==2)
      {
        
    DeletePendingOrders(MagicNumber);
        
    RefreshRates();
        
    DeletePendingOrders(MagicNumber);
        return(
    0);
      }
    // في حال لا يوجد صفقات حالية أو صفقات معلقة فقم بفتح صفقة بيع أو صفقة شراء حسب رغبة المستخدم
      
    if (MyRealOrdersTotal(MagicNumber)==&& MyPendingOrdersTotal(MagicNumber)==2)
      {
        if (
    OpenBuy)
        {
          
    OpenBUYOrder(FirstLots,MagicNumber);
        }
        else
        {
          
    OpenSELLOrder(FirstLots,MagicNumber);
        }
        return(
    0);
      }
    // في حال تم فتح صفقة بيع أو شراء يجب وضع صفقات معلقة معاكسة لها نوعا واتجاها
      
    if (MyRealOrdersTotal(MagicNumber)==&& MyPendingOrdersTotal(MagicNumber)==0)
      {
        
    OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
        
    slot=OrderLots()*LotsDouble;
        
    ssl=OrderStopLoss();
        
    stp=OrderTakeProfit();
     
        if (
    OrderType()==OP_BUY)
        {
           
    gT1=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+StopLoss*Point,ssl-TakeProfit*Point,"",MagicNumber,0,Green);
           
    gT2=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+StopLoss*Point,ssl-(TakeProfit*Point),"",MagicNumber,0,Green);
        }
        if (
    OrderType()==OP_SELL)
        {
           
    gT1=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+TakeProfit*Point,"",MagicNumber,0,Green);
           
    gT2=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+(TakeProfit*Point),"",MagicNumber,0,Green);
        }
     
      }
      return(
    0);
    }
    // وظيفة لحساب عدد الصفقات الحالية
    int MyRealOrdersTotal(int Magic)
    {
      
    int c=0;
      
    int total  OrdersTotal();
      
    t1=-1;
      
    t2=-1;
     
      for (
    int cnt cnt total cnt++)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
        {
          if (
    t1==-1)
          {
            
    t1=OrderTicket();
          }
          else
          {
            if (
    t2==-1)
            {
              
    t2=OrderTicket();
            }
          }
          
    c++;
        }
      }
      return(
    c);
    }
    // وظيفة لحساب عدد الصفقات المعلقة فقط
    int MyPendingOrdersTotal(int Magic)
    {
      
    int c=0;
      
    int total  OrdersTotal();
     
      for (
    int cnt cnt total cnt++)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
        {
          
    c++;
        }
      }
      return(
    c);
    }
    // وظيفة لحذف الصفقات المعلقة
    int DeletePendingOrders(int Magic)
    {
      
    int total  OrdersTotal();
     
      for (
    int cnt cnt total cnt++)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
        {
          
    OrderDelete(OrderTicket());
        }
      }
      return(
    0);

    يتبع ...
    آخر تعديل بواسطة وضاح عطار ، 06-01-2008 الساعة 12:26 PM
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

  2. #2
    تاريخ التسجيل
    Mar 2005
    الإقامة
    Cairo - بداية الحكاية
    العمر
    31
    المشاركات
    498

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

    ماشاء الله تبارك الله .. سلمت يدااااك مهندس وضاح
    مشروع محترم وتعليمي جداً

  3. #3
    تاريخ التسجيل
    Apr 2007
    المشاركات
    583

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

    بالفعل رائع

    تحياتي

  4. #4
    تاريخ التسجيل
    Dec 2005
    الإقامة
    فلسطين
    المشاركات
    629

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

    مشروع رائع بارك الله فيك

  5. #5
    تاريخ التسجيل
    Apr 2006
    الإقامة
    السعودية
    العمر
    47
    المشاركات
    6,555

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

    اقتباس المشاركة الأصلية كتبت بواسطة HERO_0 مشاهدة المشاركة
    ماشاء الله تبارك الله .. سلمت يدااااك مهندس وضاح
    مشروع محترم وتعليمي جداً
    أهلا بك أخي الحبيب هيرو

    ننتظر عودتك بالسلامة
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

  6. #6
    تاريخ التسجيل
    Apr 2006
    الإقامة
    السعودية
    العمر
    47
    المشاركات
    6,555

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

    اقتباس المشاركة الأصلية كتبت بواسطة salam مشاهدة المشاركة
    بالفعل رائع

    تحياتي

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

    وإن شاء الله تستفيد من هذا المشروع
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

  7. #7
    تاريخ التسجيل
    Apr 2006
    الإقامة
    السعودية
    العمر
    47
    المشاركات
    6,555

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

    اقتباس المشاركة الأصلية كتبت بواسطة njjar مشاهدة المشاركة
    مشروع رائع بارك الله فيك
    أهلا بك أخي العزيز

    وشكرا لك
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

  8. #8
    تاريخ التسجيل
    Oct 2007
    الإقامة
    canada-كندا
    المشاركات
    891

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

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

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

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

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

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

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

    و اسف للاطالة و لنا عودة باذن الله

  9. #9
    تاريخ التسجيل
    Apr 2006
    الإقامة
    السعودية
    العمر
    47
    المشاركات
    6,555

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

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

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


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

    عندما يكون هدف نصف العقود ضعف هدف النصف الآخر فهذا الأمر لا يزيد من احتمال المضاعفات
    بل كل ما نحصل عليه هو إما ربح مضاعف جدا أو صفر لهذه المرحلة بالذات .

    أي أننا إما أن نربح جدا أو لا نربح ولا نخسر من آخر مرحلة. وفي حالة أن النتيجة هي صفر فإننا ببساطة نعيد هذه المرحلة نفسها دون الدخول في مضاعفة جديدة .

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

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

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

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

    ما رأيك أنت أن تضيف هذا الخيار للاكسبيرت

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

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

    هل من متطوع من فريق البرمجة يقوم بهذا التعديل

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

    صدقت فإن الموضوع يحتاج لقلب قوي ورأسمال أقوى لأنك ببساطة قد تجد الإيكويتي نصف الرصيد في أحد المراحل .


    و اسف للاطالة و لنا عودة باذن الله

    المناقشة في الاقتباس
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

  10. #10
    تاريخ التسجيل
    Jul 2005
    المشاركات
    357

    Thumbs up رد: مشروع برمجي : اكسبيرت سوبابلكس للمضاعفات

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

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

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

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

    فمثلاً لو كان لدينا 4 أوامر معلقة لها اندكس من 0 - 3، فبعد حذف الأمر الأول ذو الدليل 0، سوف يتغير تلقائياً اندكس بقية الأوامر، فيصبح اندكس الأمر الثاني 0 والثالث 1 والرابع 2، ولهذا فعند المرور الثاني للحلقة سوف يتم إغلاق الأمر الثالث، وسبقى الثاني بدون إغلاق. لذلك فالأفضل كتابة هذه الدالة على الشكل التالي:

    كود:
    int DeletePendingOrders(int Magic)
    {
    int total  = OrdersTotal();
    
    for (int cnt = total - 1; cnt >= 0; cnt--)
    {
     OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
     if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
     {
       OrderDelete(OrderTicket());
     }
    }
    return(0);
    }

    أطيب التمنيات..

  11. #11
    تاريخ التسجيل
    Apr 2006
    الإقامة
    السعودية
    العمر
    47
    المشاركات
    6,555

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

    أهلا بك أخي الدكتور حازم

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

    على العموم مداخلتك قيمة فعلا بارك الله فيك .

    بالنسبة للمضاعفات فهي بصراحة حل آمن لمن لديه رصيد كبير جدا . أما غير ذلك فلا وألف لا .

    لأنها ببساطة سوف تجعل من المارجن كول ضيفا عليك بشكل أكيد .

    بالنسبة للأخطاء المنطقية فهذا ممكن وأنا بصراحة لم أقصد وضعها ولكن الكمال لله وحده .

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

    هناك خطأ فعلا ( ناتج عن النسخ واللصق عدو المبرمج الأول ) لن يجعل الاكسبيرت يعمل وهو في هذا البلوك البرمجي :
    كود PHP:
      if (MyRealOrdersTotal(MagicNumber)==&& MyPendingOrdersTotal(MagicNumber)==2)
      {
        if (
    OpenBuy)
        {
          
    OpenBUYOrder(FirstLots,MagicNumber);
        }
        else
        {
          
    OpenSELLOrder(FirstLots,MagicNumber);
        }
        return(
    0);
      } 
    والصحيح هو :
    كود PHP:
      if (MyRealOrdersTotal(MagicNumber)==&& MyPendingOrdersTotal(MagicNumber)==0)
      {
        if (
    OpenBuy)
        {
          
    OpenBUYOrder(FirstLots,MagicNumber);
        }
        else
        {
          
    OpenSELLOrder(FirstLots,MagicNumber);
        }
        return(
    0);
      } 

    بالنسبة لوظيفة حذف الصفقات المعلقة فمعك حق تماما .

    ولكن لاحظ أني حللت المشكلة باستدعاء الوظيفة مرتين . لأنه عندنا صفقتين معلقتين فقط دائما .


    الآن يصبح الكود الجديد بعد التعديل وبعد تنقيح الأخطاء كما يلي :


    كود PHP:
    #property copyright "Idea by Supaplex Programing by waddah attar"
    #property link      "waddahattar@hotmail.com"
     
    //خصائص الاكسبيرت
    extern int     TakeProfit=80;
    extern int     StopLoss=80;
    extern double  FirstLots=0.1;
    extern bool    OpenBuy=true;
    extern int     LotsDouble=2;
    extern int     MagicNumber 2008;
    int    Ticket1,Ticket2;
    int    t1,t2,gT1,gT2;
    int handle;
    int init()
    {
      
    Comment("Waddah Attar Supaplex");
      return(
    0);
    }
    int deinit()
    {
      
    Comment("");
      return(
    0);
    }
    int start()
    {
      
    Procces_1();
      return(
    0);
    }
    //****************************************************************************************************************  
    // الوظيفة الخاصة بفتح عقد الشراء مع مضاعفة إن اقتضى الأمر
    void OpenBUYOrder(double Lots,int Magic)
    {
       
    double sl,tp;
     
       
    sl=Ask-StopLoss*Point;
       
    tp=Ask+TakeProfit*Point;
     
       if (
    Lots==FirstLots)
       {
         
    Ticket1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"",Magic,0,Green);
         if(
    Ticket1>0)
         {
           
    gT1=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-TakeProfit*Point,"",Magic,0,Green);
           
    gT2=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-(TakeProfit*Point),"",Magic,0,Green);
         }
         else
         {
          
    Alert("خطأ شراء "," Err = ",GetLastError()," Price = ",Ask," Lots = ",Lots);
         }
       }
    }
    // الوظيفة الخاصة بفتح عقد البيع مع مضاعفة إن اقتضى الأمر
    void OpenSELLOrder(double Lots,int Magic)
    {
       
    double sl,tp;
     
       
    sl=Bid+StopLoss*Point;
       
    tp=Bid-TakeProfit*Point;
       if (
    Lots==FirstLots)
       {
         
    Ticket1=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"",Magic,0,Red);
         if(
    Ticket1>0)
         {
           
    gT1=OrderSend(Symbol(),OP_BUYSTOP,Lots,sl,3,sl-StopLoss*Point,sl+TakeProfit*Point,"",Magic,0,Green);
           
    gT2=OrderSend(Symbol(),OP_BUYSTOP,Lots,sl,3,sl-StopLoss*Point,sl+(TakeProfit*Point),"",Magic,0,Green);
         }
         else
         {
           
    Alert("خطأ بيع "," Err = ",GetLastError()," Price = ",Bid," Lots = ",Lots);
         }
       }
    }
    // الوظيفة الرئيسية
    int Procces_1()
    {
      
    double slot,ssl,stp,bw;
    // في حال لا يوجد صفقات حالية وكان هناك صفقات معلقة فاحذفها لأنه لا داعي لها
      
    if (MyRealOrdersTotal(MagicNumber)==&& MyPendingOrdersTotal(MagicNumber)==2)
      {
        
    DeletePendingOrders(MagicNumber);
        return(
    0);
      }
    // في حال لا يوجد صفقات حالية أو صفقات معلقة فقم بفتح صفقة بيع أو صفقة شراء حسب رغبة المستخدم
      
    if (MyRealOrdersTotal(MagicNumber)==&& MyPendingOrdersTotal(MagicNumber)==0)
      {
        if (
    OpenBuy)
        {
          
    OpenBUYOrder(FirstLots,MagicNumber);
        }
        else
        {
          
    OpenSELLOrder(FirstLots,MagicNumber);
        }
        return(
    0);
      }
    // في حال تم فتح صفقة بيع أو شراء يجب وضع صفقات معلقة معاكسة لها نوعا واتجاها
      
    if (MyRealOrdersTotal(MagicNumber)==&& MyPendingOrdersTotal(MagicNumber)==0)
      {
        
    OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
        
    slot=OrderLots()*LotsDouble;
        
    ssl=OrderStopLoss();
        
    stp=OrderTakeProfit();
     
        if (
    OrderType()==OP_BUY)
        {
           
    gT1=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+StopLoss*Point,ssl-TakeProfit*Point,"",MagicNumber,0,Green);
           
    gT2=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+StopLoss*Point,ssl-(TakeProfit*Point),"",MagicNumber,0,Green);
        }
        if (
    OrderType()==OP_SELL)
        {
           
    gT1=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+TakeProfit*Point,"",MagicNumber,0,Green);
           
    gT2=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+(TakeProfit*Point),"",MagicNumber,0,Green);
        }
     
      }
      return(
    0);
    }
    // وظيفة لحساب عدد الصفقات الحالية
    int MyRealOrdersTotal(int Magic)
    {
      
    int c=0;
      
    int total  OrdersTotal();
      
    t1=-1;
      
    t2=-1;
     
      for (
    int cnt cnt total cnt++)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
        {
          if (
    t1==-1)
          {
            
    t1=OrderTicket();
          }
          else
          {
            if (
    t2==-1)
            {
              
    t2=OrderTicket();
            }
          }
          
    c++;
        }
      }
      return(
    c);
    }
    // وظيفة لحساب عدد الصفقات المعلقة فقط
    int MyPendingOrdersTotal(int Magic)
    {
      
    int c=0;
      
    int total  OrdersTotal();
     
      for (
    int cnt cnt total cnt++)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
        {
          
    c++;
        }
      }
      return(
    c);
    }
    // وظيفة لحذف الصفقات المعلقة
    int DeletePendingOrders(int Magic)
    {
    int total  OrdersTotal();
     
    for (
    int cnt total 1cnt >= 0cnt--)
    {
     
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
     if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
     {
       
    OrderDelete(OrderTicket());
     }
    }
    return(
    0);

    آخر تعديل بواسطة وضاح عطار ، 02-01-2008 الساعة 03:34 PM
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

  12. #12
    تاريخ التسجيل
    May 2007
    العمر
    42
    المشاركات
    657

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

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

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

    كما اننى اؤيد راى اخونا سوبلكس بعدم الاعتماد على الاكسبيرتات رغم احترامه لواضعيها
    واذا كان ولا بد فيجب ان تتم تحت مراقبة شخصيه بين الفينه والاخرى ولنتفادى ما حصل لكثير ممن اقرا عنهم هنا فى المنتدى من عدم تفعيل الاوامر لسبب فنى خارج عن نطاق الاكسبيرت مثل انقطاع الاتصال او تعطل نضام الوسيط
    آخر تعديل بواسطة sasooo315 ، 02-01-2008 الساعة 04:31 PM

  13. #13
    تاريخ التسجيل
    Apr 2006
    الإقامة
    السعودية
    العمر
    47
    المشاركات
    6,555

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

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

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

    شكرا لك أخي العزيز على مشاركتنا خبرتك مع هذه الاستراتيجية

    ولكن لم تقل لنا ما هي الإعدادات التي استخدمتها مع البرولنغر وكذلك الفترة المستخدمة .

    بالنسبة لأخطاء الاكسبيرت فأنا أنصح دائما بمتابعة الاكسبيرت دائما .

    ومع ذلك يمكن ببعض التقنيات البرمجية أن نقلل من هذه الأخطاء ما أمكن .
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

  14. #14
    تاريخ التسجيل
    Nov 2007
    المشاركات
    156

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

    السلام عليكم
    اخي وضاح لماذا لاتستخدم مؤشر مستويات الفبيو لتحديد نقطه الدخول من مستوى 61 والتعزيز يكون من المستوى 78 او القاع السابق.
    اعتقد الفيبو ممكن يكون الحل لمشكله تحديد مستوى التعزيز والاستوب لوز يكون الفيبو الاسبوعي(القاع او القمه او اضافه عدد معين من النقاط للقمه السابقه او طرحها من القاع السابق).
    .
    وجزاك الله خير

  15. #15
    تاريخ التسجيل
    Oct 2007
    الإقامة
    canada-كندا
    المشاركات
    891

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

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

    أما بالنسبة للهدف الثاني فما قصدته هو من خلال المتابعة اذا مر السعر بحالة تذبذب ووصلت المضاعفة الى لوت كبير و حدث انفجار ليصل السعر الى الهدف فبعدها يكون احتمال حدوث حالة تذبذب أخرى وارد بشكل كبير فان لم يصل لهدفك الثاني فبهذه الحالة ستبدأ حالة التذبذب الثانية بلوت كبير و هنا تكمن الخطورة و احتمال الوصول لعقد كبير جدا
    لذلك أظن أنه لز ترك الهدف الثاني للمستخدم ليعدله كما يشاء يكن أفضل و الله اعلم
    كود:
    #property copyright "Idea by Supaplex Programing by waddah attar"
    #property link      "waddahattar@hotmail.com"
    //خصائص الاكسبيرت
    extern int     TakeProfit=80;
    extern int     StopLoss=80;
    extern double  FirstLots=0.1;
    extern bool    OpenBuy=true;
    extern int     LotsDouble=2;
    extern int     MagicNumber = 2008;
    int    Ticket1,Ticket2;
    int    t1,t2,gT1,gT2;
    int handle;
    int hour;
    extern int   StartTime = 0 ;
    extern int   EndTime   = 23;
    int init()
    {
      Comment("Waddah Attar Supaplex");
      return(0);
    }
    int deinit()
    {
      Comment("");
      return(0);
    }
    int start()
    {
     //  تعريف الوقت
      hour = TimeHour(CurTime());
      Procces_1();
      return(0);
    }
    //****************************************************************************************************************  
    // الوظيفة الخاصة بفتح عقد الشراء مع مضاعفة إن اقتضى الأمر
    void OpenBUYOrder(double Lots,int Magic)
    {
       double sl,tp;
       
       sl=Ask-StopLoss*Point;
       tp=Ask+TakeProfit*Point;
       
       if (Lots==FirstLots && hour>=StartTime && hour<=EndTime)
       {
         Ticket1=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"",Magic,0,Green);
         if(Ticket1>0)
         {
           gT1=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-TakeProfit*Point,"",Magic,0,Green);
           gT2=OrderSend(Symbol(),OP_SELLSTOP,Lots,sl,3,sl+StopLoss*Point,sl-(TakeProfit*Point),"",Magic,0,Green);
         }
         else
         {
          Alert("خطأ شراء "," Err = ",GetLastError()," Price = ",Ask," Lots = ",Lots);
         }
       }
    }
    // الوظيفة الخاصة بفتح عقد البيع مع مضاعفة إن اقتضى الأمر
    void OpenSELLOrder(double Lots,int Magic)
    {
       double sl,tp;
       
       sl=Bid+StopLoss*Point;
       tp=Bid-TakeProfit*Point;
       if (Lots==FirstLots && hour>=StartTime && hour<=EndTime)
       {
         Ticket1=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,sl,tp,"",Magic,0,Red);
         if(Ticket1>0)
         {
           gT1=OrderSend(Symbol(),OP_BUYSTOP,Lots,sl,3,sl-StopLoss*Point,sl+TakeProfit*Point,"",Magic,0,Green);
           gT2=OrderSend(Symbol(),OP_BUYSTOP,Lots,sl,3,sl-StopLoss*Point,sl+(TakeProfit*Point),"",Magic,0,Green);
         }
         else
         {
           Alert("خطأ بيع "," Err = ",GetLastError()," Price = ",Bid," Lots = ",Lots);
         }
       }
    }
    // الوظيفة الرئيسية
    int Procces_1()
    {
      double slot,ssl,stp,bw;
    // في حال لا يوجد صفقات حالية وكان هناك صفقات معلقة فاحذفها لأنه لا داعي لها
      if (MyRealOrdersTotal(MagicNumber)==0 && MyPendingOrdersTotal(MagicNumber)==2)
      {
        DeletePendingOrders(MagicNumber);
        RefreshRates();
        DeletePendingOrders(MagicNumber);
        return(0);
      }
    // في حال لا يوجد صفقات حالية أو صفقات معلقة فقم بفتح صفقة بيع أو صفقة شراء حسب رغبة المستخدم
      if (MyRealOrdersTotal(MagicNumber)==0 && MyPendingOrdersTotal(MagicNumber)==0 && hour>=StartTime && hour<=EndTime)
      {
        if (OpenBuy)
        {
          OpenBUYOrder(FirstLots,MagicNumber);
        }
        else
        {
          OpenSELLOrder(FirstLots,MagicNumber);
        }
        return(0);
      }
    // في حال تم فتح صفقة بيع أو شراء يجب وضع صفقات معلقة معاكسة لها نوعا واتجاها
      if (MyRealOrdersTotal(MagicNumber)==2 && MyPendingOrdersTotal(MagicNumber)==0)
      {
        OrderSelect(t1,SELECT_BY_TICKET,MODE_TRADES);
        slot=OrderLots()*LotsDouble;
        ssl=OrderStopLoss();
        stp=OrderTakeProfit();
        
        if (OrderType()==OP_BUY)
        {
           gT1=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+StopLoss*Point,ssl-TakeProfit*Point,"",MagicNumber,0,Green);
           gT2=OrderSend(Symbol(),OP_SELLSTOP,slot,ssl,3,ssl+StopLoss*Point,ssl-(TakeProfit*Point),"",MagicNumber,0,Green);
        }
        if (OrderType()==OP_SELL)
        {
           gT1=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+TakeProfit*Point,"",MagicNumber,0,Green);
           gT2=OrderSend(Symbol(),OP_BUYSTOP,slot,ssl,3,ssl-StopLoss*Point,ssl+(TakeProfit*Point),"",MagicNumber,0,Green);
        }
        
      }
      return(0);
    }
    // وظيفة لحساب عدد الصفقات الحالية
    int MyRealOrdersTotal(int Magic)
    {
      int c=0;
      int total  = OrdersTotal();
      t1=-1;
      t2=-1;
      
      for (int cnt = 0 ; cnt < total ; cnt++)
      {
        OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
        {
          if (t1==-1)
          {
            t1=OrderTicket();
          }
          else
          {
            if (t2==-1)
            {
              t2=OrderTicket();
            }
          }
          c++;
        }
      }
      return(c);
    }
    // وظيفة لحساب عدد الصفقات المعلقة فقط
    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_BUYSTOP || OrderType()==OP_SELLSTOP))
        {
          c++;
        }
      }
      return(c);
    }
    // وظيفة لحذف الصفقات المعلقة
    int DeletePendingOrders(int Magic)
    {
      int total  = OrdersTotal();
      
      for (int cnt = 0 ; cnt < total ; cnt++)
      {
        OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP))
        {
          OrderDelete(OrderTicket());
        }
      }
      return(0);
    }

صفحة 1 من 10 1234567 ... الأخيرةالأخيرة

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

  1. اكسبيرت سوبابلكس بنسخته الجديدة والمطورة زي المنشار .
    By وضاح عطار in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 95
    آخر مشاركة: 10-07-2013, 07:46 PM
  2. ورشة تطوير اكسبيرت للمضاعفات
    By جرير in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 13
    آخر مشاركة: 22-04-2010, 11:23 PM
  3. غرفة تطوير اكسبيرت للمضاعفات
    By emadma in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 25
    آخر مشاركة: 14-12-2009, 10:55 PM
  4. مشروع برمجي عالي التقنية حصريا وجميع الحقوق محفوظة
    By وضاح عطار in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 26
    آخر مشاركة: 20-04-2008, 08:22 AM

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