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

    افتراضي دورة صناعة الاكسبيرتات

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

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


    كما وعدتكم سنبدأ من الآن إن شاء الله بدورة خاصة للاكسبيرتات .


    مقدمة عن الاكسبيرتات:

    يجب التفكير في الاكسبيرتات على أنها استراتيجية مؤتمتة آليا. أي لا بد للاكسبيرت أن يعتمد على استراتيجية معينة تكون في الأساس ناجحة.

    ونحن نلجأ عادة للاكسبيرتات في حالات معينة مثل:

    - عدم القدرة على المتابعة اللصيقة للشاشة.

    - عدم القدرة على مجاراة السرعة التي تتطلبها الاستراتيجية.

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

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

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

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

    هناك الكثير من الأمور الأخرى التي تجعلنا نلجأ إلى الاكسبيرتات وطبعا هناك سبب مادي بحت.

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



    الشروط الواجب توفرها في الاكسبيرت:

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

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

    - يجب على الاكسبيرت أن يتعامل مع الأخطاء التي قد تحصل أثناء فتح الصفقات بحذر شديد.

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

    - أن يكون الاكسبيرت مرنا جدا من حيث الاستخدام والخصائص المتوفرة تكون واضحة.

    - أن يعالج جميع حالات الاستراتيجية التي يتبعها وأن يكون عنده الحلول المناسبة لأي احتمال.

    - أن يكون متضمنا فيه معالجة للمخاطرة المطلوبة وأن لا يتجاوزها بأي حال من الأحوال.


    الفرق بين المؤشر والاكسبيرت:

    - المؤشر له القدرة على إظهار رسوم على الشارت بينما الاكسبيرت لا يستطيع ذلك.

    - المؤشر لا يستطيع فتح أو إغلاق الصفقات ولكن الاكسبيرت يستطيع ذلك.

    - المؤشر يعمل دائما حتى في حال كان البرنامج غير متصل بالانترنت بينما الاكسبيرت لا يعمل إلا إذا كان البرنامج متصلا بالانترنت.

    - المؤشر يعمل على بيانات الأسعار الحديثة والقديمة بينما الاكسبيرت لا يعمل إلا على آخر سعر فقط.

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



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

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

    ثانيا يجب فحص الاكسبيرت على أربع مراحل:

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

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

    -- الثالثة: فحص الاكسبيرت لمدة لا تقل عن الشهر على حساب ديمو.

    -- الرابعة: فحص الاكسبيرت على حساب حقيقي مع مراقبة لصيقة له في البداية.




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

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



    لنبدأ على بركة الله


    فكرة الاكسبيرت التي سننفذها هي:

    مع بداية كل يوم جديد في الساعة 12 ليلا يقوم الاكسبيرت بفتح صفقتين معلقتين بالشروط التالية:

    - صفقة شراء فوق سعر الإغلاق لليوم المنتهي بعدد محدد من النقاط وبهدف محدد ووقف محدد.

    - صفقة بيع تحت سعر الإغلاق لليوم المنتهي بعدد محدد من النقاط وبهدف محدد ووقف محدد.

    - في حال تفعلت صفقة الشراء فإنه يقوم بحذف صفقة البيع المعلقة آليا.

    - في حال تفعلت صفقة البيع فإنه يقوم بحذف صفقة الشراء المعلقة آليا.

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

  2. #2
    تاريخ التسجيل
    Jun 2005
    الإقامة
    السعودية
    المشاركات
    1,701

    افتراضي رد: دورة صناعة الاكسبيرتات

    متابعينك .. وفقك الله.

  3. #3
    تاريخ التسجيل
    Sep 2005
    الإقامة
    EGYPT
    المشاركات
    478

    افتراضي رد: دورة صناعة الاكسبيرتات

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

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

    افتراضي رد: دورة صناعة الاكسبيرتات

    بالتوفيق أخ وضاح
    معك بالصف الاول

  5. #5
    تاريخ التسجيل
    Sep 2006
    الإقامة
    المملكة العربية السعودية
    المشاركات
    2,924

    افتراضي رد: دورة صناعة الاكسبيرتات

    جزاك الله كل خير

  6. #6
    تاريخ التسجيل
    Sep 2004
    المشاركات
    2,012

    افتراضي رد: دورة صناعة الاكسبيرتات

    بالتوفيق ومعاكككككككككككككككك على الخط

  7. #7
    تاريخ التسجيل
    Feb 2006
    المشاركات
    129

    افتراضي رد: دورة صناعة الاكسبيرتات

    مشكور والله يوفقك

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

    افتراضي رد: دورة صناعة الاكسبيرتات

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

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

    أشكر الإخوة الكرام الذين سوف يشاركونني هذه الدورة وأرجو لهم كل التوفيق والنجاح .

    سوف نكتب فكرة الاكسبيرت الذي نريد صناعته مرة أخرى لنتذكرها ونمشي عليها:

    مع بداية كل يوم جديد في الساعة 12 ليلا يقوم الاكسبيرت بفتح صفقتين معلقتين بالشروط التالية:

    - صفقة شراء فوق سعر الإغلاق لليوم المنتهي بعدد محدد من النقاط وبهدف محدد ووقف محدد.

    - صفقة بيع تحت سعر الإغلاق لليوم المنتهي بعدد محدد من النقاط وبهدف محدد ووقف محدد.

    - في حال تفعلت صفقة الشراء فإنه يقوم بحذف صفقة البيع المعلقة آليا.

    - في حال تفعلت صفقة البيع فإنه يقوم بحذف صفقة الشراء المعلقة آليا.

    - في حال انتهى اليوم ولم تتفعل أي صفقة فإنه يحذف الصفقتين ويبدأ من جديد.


    خصائص الاكسبيرت الجديد:

    - اسمه هو Buy_Sell_Day

    - له خاصية Step وهي عدد النقاط التي تعلو أو تدنو من سعر الإغلاق لليوم السابق.

    - له خاصية Takeprofit وهي عدد نقاط الربح.

    - له خاصية Stoploss وهي نقاط الوقف.

    - له خاصية Lots وهي حجم اللوتات لكل صفقة.



    والآن لنحلل طريقة عمل الاكسبيرت بطريقة برمجية تحليلية:

    - يفحص الاكسبيرت هل دخل يوم جديد.

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

    - يضيف الاكسبيرت الصفقات المعلقة بالشروط المحددة.

    - يفحص الآن في كل مرة هل تفعلت إحدى الصفقتين أم لا.

    - في حال تفعلت صفقة فيجب حذف الصفقة المعلقة الأخرى.

    - في حال إغلاق الصفقة بربح أو خسارة فإنه ينتظر بدء يوم جديد ليعيد العملية مرة أخرى.


    والآن إلى الكود.


    نبدأ بالويزارد الخاص بعمل اكسبيرت من برنامج الميتاإيديتور.

    وعندما ننتهي سيكون قالب كود الاكسبيرت الأولي على الشكل التالي:

    كود PHP:
    //+------------------------------------------------------------------+
    //|                                                 Byu_Sell_Day.mq4 |
    //|                              Copyright © 2007, www.****forex.net |
    //|                                         http://www.****forex.net |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2007, www.****forex.net"
    #property link      "http://www.****forex.net"
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
    //----
       
    //----
       
    return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //----
       
    //----
       
    return(0);
      }
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
      {
    //----
       
    //----
       
    return(0);
      }
    //+------------------------------------------------------------------+ 
    نكتب الخصائص التالية للاكسبيرت مع القيم الافتراضية:

    كود PHP:
    extern int Step=20;
    extern int Takeprofit=50;
    extern int Stoploss=50;
    extern double Lots=1
    سوف نضيف متحولا داخليا باسم Magicnumber ونعطيه قيمة عشوائية ثابتة وذلك لكي يستطيع الاكسبيرت التعامل فقط مع صفقاته.

    كود PHP:
    int Magicnumber=234561
    لا يوجد شيء نعمله في الوظيفية init والوظيفة deinit

    عملنا كله سيكون في الوظيفة start وسوف نضيف نحن وظائف خاصة مساعدة.


    إن فتح الصفقات يكون دائما في الساعة 0 أي الساعة 12 صباحا ولذلك لن يفتح الاكسبيرت أي صفقة بعد الساعة 12 صباحا.

    لذلك فإن كود فتح الصفقات المعلقة سيكون على الشكل التالي:

    كود PHP:
    int start()
    {
      if(
    Hour()==&& Minute()>&& MyOrdersTotal(Magicnumber)==0)
      {
        
    double DayClose=iClose(Symbol(),PERIOD_D1,1);
        
    double BuyPrice=DayClose+Step*Point;
        
    double BuyTP=BuyPrice+Takeprofit*Point;
        
    double BuySL=BuyPrice-Stoploss*Point;
        
        
    double SellPrice=DayClose-Step*Point;
        
    double SellTP=SellPrice-Takeprofit*Point;
        
    double SellSL=SellPrice+Stoploss*Point;
        
        
    OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyPrice,3,BuySL,BuyTP,"",Magicnumber,0,Green);
        
    OrderSend(Symbol(),OP_SELLSTOP,Lots,SellPrice,3,SellSL,SellTP,"",Magicnumber,0,Green);
      }
      return(
    0);

    في شرط فتح الصفقات المعلقة وضعنا ثلاثة شروط:

    الأول أن الساعة 0 وتعني أن 12 ليلا قد دخلت وأن يوما جديدا قد بدأ.


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

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

    واستخدمنا لذلك وظيفة خاصة من صنعنا هي MyOrdersTotal وأدخلنا فيها الرقم السحري الذي يميز صفقات الاكسبيرت عن غيره.

    هذه الوظيفة لها الكود التالي:

    كود PHP:
    int MyOrdersTotal(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())
        {
          
    c++;
        }
      }
      return(
    c);

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


    إذا تحققت الشروط السابقة فإنه يقوم بتجهيز معلومات صفقة البيع وصفقة الشراء ثم يرسل أمر تنفيذها فعليا على الحساب بواسطة الوظيفة OrderSend


    صفقة الشراء المعلقة ستكون أعلى من السعر الحالي ولذلك فإن نوعها سيكون OP_BUYSTOP

    أما صفقة البيع المعلقة ستكون أسفل السعر الحالي ونوعها سيكون OP_SELLSTOP

    استطعنا الحصول على سعر الإغلاق لليوم المنتهي السابق عن طريق الوظيفة iClose والتي تعطينا معلومات الإغلاق لأي زوج ولأي فريم ولأي شمعة نريد.

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

    لأن الشمعة رقم صفر هي الشمعة اليومية الجديدة التي تكونت من عشر دقائق فقط.

    ونحن نريد الشمعة التي قبلها ورقمها واحد وهي تمثل الشمعة اليومية لليوم المنتهي.

    بعد ذلك حسبنا سعر الدخول وسعر الهدف وسعر الوقف لعملية البيع وعملية الشراء

    ثم أرسلنا هذه المعلومات للوظيفة OrderSend.
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

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

    افتراضي رد: دورة صناعة الاكسبيرتات

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

    نكمل ما بدأنا به مع الاكسبيرت السابق

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

    كما أنها تعتبر من الوظائف الخاصة بالاكسبيرتات فقط والتي لا يستطيع المؤشر بأي شكل من الأشكال أن ينفذها.

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

    البيع والشراء الفوري يعني من السعر الحالي ( آخر سعر للزوج )

    ويكون الشراء من سعر الطلب Ask والبيع من سعر العرض Bid

    الشراء المعلق له نوعان :

    الأول شراء محدود Buy Limit ويكون من سعر أدنى من السعر الحالي.

    وهو النوع من الصفقات الذي تضعه على دعم تتوقع أن يرتد منه السعر.

    الثاني شراء وقف Buy Stop ويكون من سعر أعلى من السعر الحالي.

    وهو النوع من الصفقات الذي تضعه على مقاومة تتوقع أن يكسرها السعر.

    البيع المعلق له نوعان أيضا:

    الأول بيع محدود Sell Limit ويكون من سعر أعلى من السعر الحالي.

    وهو النوع من الصفقات الذي تضعه على مقاومة تتوقع أن يرتد عنها السعر.

    الثاني بيع وقف Sell Stop ويكون من سعر أدنى من السعر الحالي.

    وهو النوع من الصفقات الذي تضعه على دعم تتوقع أن يخترقها السعر.

    وهذه الوظيفة لها البارامترات التالية :

    كود PHP:
    int OrderSendstring symbolint cmddouble volumedouble priceint slippagedouble stoplossdouble 
    takeprofit
    string comment=NULLint magic=0datetime expiration=0color arrow_color=CLR_NONE
    في حال نجحت الوظيفة في مهمتها فإنها ستعود بقيمة تعبر عن رقم الصفقة وهو أكبر من الصفر حتما.

    أما في حال فشلت لأي سبب من الأسباب فإنها ستعود بقيمة -1

    يجب دائما بعد كل تنفيذ لهذه الوظيفة أن نفحص القيمة العائدة منها.

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

    أو يمكن أن السوق مقفل أو السيرفر مشغول وهكذا.

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

    أول بارامتر لهذه الوظيفة هي اسم الزوج أو السلعة التي نريد إجراء الصفقة عليها .

    وهي متحول نصي نكتب فيه "GBPUSD" مثلا أو نقوم بدلا من ذلك بوضع المتحول Symbol

    والذي يحتوي اسم الزوج الذي يعمل عليه الاكسبيرت حاليا وهي الطريقة المتبعة غالبا .

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

    البارامتر الثاني هو نوع الصفقة التي نريد اجرائها على الزوج المحدد وهو له هذه القيم :

    كود PHP:
    OP_BUY == ==Buying position.  == شراء فوري
    OP_SELL 
    == ==Selling position. == بيع فوري
    OP_BUYLIMIT 
    == ==Buy limit pending position. == شراء معلق من سعر أدنى من السعر الحالي
    OP_SELLLIMIT 
    == ==Sell limit pending position. == بيع معلق من سعر أعلى من السعر الحالي
    OP_BUYSTOP 
    == ==Buy stop pending position. == شراء معلق من سعر أعلى من السعر الحالي
    OP_SELLSTOP 
    == ==Sell stop pending position. == بيع معلق من سعر أدنى من السعر الحالي 

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

    البارامتر الثالث هو حجم العقد أو اللوت لهذه الصفقة ويمثل الرقم 1 لوت واحد أما الرقم 0.1 فيمثل ميني لوت

    فلو أردنا شراء ثلاثة عقود كبيرة و ثلاثة عقود ميني فإن الرقم سيكون 3.3 وهكذا

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

    لأن البروكر لن يقبل أسعارا غير متوافقة مع سعر السوق الحالي وسوف تفشل الصفقة الفورية .

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

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

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

    افتراضي رد: دورة صناعة الاكسبيرتات

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

    فلو فرضنا أننا أردنا الشراء عند السعر 1.9654 بتسامح قدره 3 نقاط فإن مجال الشراء المسموح هو من 1.9654 إلى 1.9657


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

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

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

    كود PHP:
    Ask-Stoploss*Point 

    حيث المتحول Stoploss يساوي الخمسين وقد تم ضربه بالقيمة Point لتحويله إلى رقم عشري مناسب لسعر الزوج .

    مثلا المتحول Ask يساوي 1.9525 فإن وقف الخسارة سيكون 1.9525 - 50 * 0.0001 = 1.9475


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

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

    كود PHP:
    Ask+Takeprofit*Point 
    وله نفس شرح الوقف سابقا

    البارامتر الثامن هو عبارة عن نص يمكنك وضع ملاحظة معينة تخزن مع معلومات صفقتك نفسها يمكنك قرائتها فيما بعد .


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

    معرفة صفقاته من صفقات غيره . فيقوم بمعالجة صفقاته فقط دون أن يمس الصفقات الأخرى .

    البارامتر العاشر هو تاريخ انتهاء الصلاحية وهو فقط للصفقات المعلقة بحيث تستطيع تحديد تاريخ معين يتم فيه حذف هذه الصفقة المعلقة في حال لم يصل السعر السوقي للسعر المحدد فيها .

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

    وهذا مثال عن تنفيذ صفقة شراء

    كود PHP:
    int ticket;
      if(
    iRSI(NULL,0,14,PRICE_CLOSE,0)<25)
        {
         
    ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,Green);
         if(
    ticket<0)
           {
            Print(
    "OrderSend failed with error #",GetLastError());
            return(
    0);
           }
        } 
    توقيع العضو
    اثنان لا يجتمعان علم وسوء خلق

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

    افتراضي رد: دورة صناعة الاكسبيرتات

    الاكسبيرت الجديد حاليا يقوم بفتح الصفقات المعلقة يوميا.

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


    الكود الحالي للوظيفة start هي على الشكل التالي:

    كود PHP:
    int start()
    {
      if(
    Hour()==&& Minute()>&& MyOrdersTotal(Magicnumber)==0)
      {
        
    double DayClose=iClose(Symbol(),PERIOD_D1,1);
        
    double BuyPrice=DayClose+Step*Point;
        
    double BuyTP=BuyPrice+Takeprofit*Point;
        
    double BuySL=BuyPrice-Stoploss*Point;
     
        
    double SellPrice=DayClose-Step*Point;
        
    double SellTP=SellPrice-Takeprofit*Point;
        
    double SellSL=SellPrice+Stoploss*Point;
     
        
    OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyPrice,3,BuySL,BuyTP,"",Magicnumber,0,Green);
        
    OrderSend(Symbol(),OP_SELLSTOP,Lots,SellPrice,3,SellSL,SellTP,"",Magicnumber,0,Green);
      }
      return(
    0);


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

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


    سنستخدم وظيفتين إحداهما لحذف الصفقات المعلقة التي لم تنفذ والوظيفة الثانية هي إغلاق الصفقات المنفذة مهما كانت النتيجة.

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

    يصبح الشرط على الشكل التالي :

    كود PHP:
    if(Hour()==&& Minute()<&& MyOrdersTotal(Magicnumber)>0)
    {
    DeletePendingOrders(Magicnumber);
    CloseOrders(Magicnumber);

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

    في حال تحققت الشروط السابقة يقوم الاكسبيرت بحذف الصفقات المعلقة وإغلاق الصفقات المفتوحة.



    الوظيفة المسؤولة عن حذف الأوامر المعلقة هي :


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

    هذه الوظيفة تقوم بحذف كل الصفقات المعلقة والتي ليست من النوع OP_BUY أو OP_SELL

    لأنه لا يمكن حذف الصفقات من هذا النوع.


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

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

    تقنية الحذف هي عن طريق اختيار وتحديد الصفقة بواسطة الوظيفة OrderSelect والتي لها ثلاثة بارامترات.

    الأول هو رقم الصفقة التي نريد تحديدها.

    الثاني هو نوع رقم الصفقة هل هو رقم تسلسلي أو رقم التيكيت.

    الثالث هو لتحديد خزان الصفقات التي نريد الاختيار منها هل هو الصفقات الحالية أو الصفقات الهيستوري.

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

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

    هذه الوظيفة تحذف لنا أي صفقة يمكن حذفها من خلال رقمها التيكيت.

    وهذا الرقم حصلنا عليه من خلال الوظيفة OrderTicket.

    وطبعا لا يمكن استخدام OrderTicket إلا بعد أن نستخدم الوظيفة OrderSelect

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

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

    افتراضي رد: دورة صناعة الاكسبيرتات

    أما الوظيفة المسؤولة عن إغلاق الصفقات المنفذة فهي :


    كود PHP:
    int CloseOrders(int Magic)
    {
      
    int total  OrdersTotal()-1;
      
      for (
    int cnt total cnt cnt--)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
        {
          if (
    OrderType()==OP_BUY)
          {
            
    OrderClose(OrderTicket(),OrderLots(),Bid,3);
          }
          
          if (
    OrderType()==OP_SELL)
          {
            
    OrderClose(OrderTicket(),OrderLots(),Ask,3);
          }
        }
      }
      return(
    0);

    هذه الوظيفة بنفس تقنية الوظيفة السابقة ولكنها تبحث فقط عن الوظائف المنفذة وليس المعلقة

    في حال وجدت وظيفة شراء فإنها تغلقها على السعر Bid عن طريق الوظيفة OrderClose


    وهي تحتاج لرقم التيكيت للوظيفة التي نريد إغلاقها

    وهو ما حصلنا عليه بعد أن حددنا الصفقة المطلوبة.

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

    لنفرض أن لدينا صفقة فيها 10 لوت فنحن نستطيع عن طريق هذه الوظيفة إغلاق 5 لوتات فقط وترك الباقي.

    وهي أيضا تحتاج للسعر الذي نريد إغلاق الصفقة عليه وهو Bid بالنسبة للشراء. وAsk بالنسبة للبيع.

    بعد إغلاق كل صفقة نحتاج لتحديث العدادات كما شرحنا سابقا.


    هاتين الوظيفتين هامتين جدا لنا في المستقبل لحذف الصفقات أو أغلاقها.


    الآن يصبح الكود النهائي على الشكل التالي وهو جاهز للعمل وبدون مشاكل.

    كود PHP:
    //+------------------------------------------------------------------+
    //|                                                 Byu_Sell_Day.mq4 |
    //|                              Copyright © 2007, www.****forex.net |
    //|                                         http://www.****forex.net |
    //+------------------------------------------------------------------+
    #property copyright "Copyright © 2007, www.****forex.net"
    #property link      "http://www.****forex.net"

    extern int Step=20;
    extern int Takeprofit=50;
    extern int Stoploss=50;
    extern double Lots=1;
    int Magicnumber=234561;
    //+------------------------------------------------------------------+
    //| expert initialization function                                   |
    //+------------------------------------------------------------------+
    int init()
      {
    //----
       
    //----
       
    return(0);
      }
    //+------------------------------------------------------------------+
    //| expert deinitialization function                                 |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //----
       
    //----
       
    return(0);
      }
    //+------------------------------------------------------------------+
    //| expert start function                                            |
    //+------------------------------------------------------------------+
    int start()
    {
      if(
    Hour()==&& Minute()<&& MyOrdersTotal(Magicnumber)>0)
      {
        
    DeletePendingOrders(Magicnumber);
        
    CloseOrders(Magicnumber);
      }
      if(
    Hour()==&& Minute()>&& MyOrdersTotal(Magicnumber)==0)
      {
        
    double DayClose=iClose(Symbol(),PERIOD_D1,1);
        
    double BuyPrice=DayClose+Step*Point;
        
    double BuyTP=BuyPrice+Takeprofit*Point;
        
    double BuySL=BuyPrice-Stoploss*Point;
        
        
    double SellPrice=DayClose-Step*Point;
        
    double SellTP=SellPrice-Takeprofit*Point;
        
    double SellSL=SellPrice+Stoploss*Point;
        
        
    OrderSend(Symbol(),OP_BUYSTOP,Lots,BuyPrice,3,BuySL,BuyTP,"",Magicnumber,0,Green);
        
    OrderSend(Symbol(),OP_SELLSTOP,Lots,SellPrice,3,SellSL,SellTP,"",Magicnumber,0,Green);
      }
      return(
    0);
    }
    int MyOrdersTotal(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())
        {
          
    c++;
        }
      }
      return(
    c);
    }
    int DeletePendingOrders(int Magic)
    {
      
    int total  OrdersTotal()-1;
      
      for (
    int cnt total cnt cnt--)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()!=OP_BUY || OrderType()!=OP_SELL))
        {
          
    OrderDelete(OrderTicket());
        }
      }
      return(
    0);
    }
    int CloseOrders(int Magic)
    {
      
    int total  OrdersTotal()-1;
      
      for (
    int cnt total cnt cnt--)
      {
        
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        if (
    OrderMagicNumber() == Magic && OrderSymbol()==Symbol())
        {
          if (
    OrderType()==OP_BUY)
          {
            
    OrderClose(OrderTicket(),OrderLots(),Bid,3);
          }
          
          if (
    OrderType()==OP_SELL)
          {
            
    OrderClose(OrderTicket(),OrderLots(),Ask,3);
          }
        }
      }
      return(
    0);

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

  13. #13
    تاريخ التسجيل
    Sep 2006
    الإقامة
    المملكة العربية السعودية
    المشاركات
    2,924

    افتراضي رد: دورة صناعة الاكسبيرتات

    جزاك الله كل خير

  14. #14
    تاريخ التسجيل
    Nov 2005
    المشاركات
    158

    افتراضي رد: دورة صناعة الاكسبيرتات

    الله يعطيك ألف عافيه استاذ وضاح

    لدي بعض الاستفسارات لو تكرمت..

    1 ) لو أردت ان يقوم الاكسبيرت بالاحتفاظ في الصفقه المعاكسه
    فمثلاً تفعل أمر الشراء.. ولم يتفعل امر البيع بعد
    هنا سيقوم الاكسبيرت بحذف امر البيع !!
    أريده ان يقوم بحذف امر الشراء فقط بحيث لا يشتري مره اخرى ولكن يمكنه البيع فقط
    وعند نهاية اليوم يقوم بحذف الأوامر التي لم تتفعل بعد

    2) أريد ان يقوم الاكسبيرت بعمل امر شراء ليمت ايضاً في حال كان السعر أعلى من مستوى الدخول المحدد
    فمثلاً..
    أريد أن يقوم الاكسبيرت بالشراء عند مستوى المقاومة الأولى R1
    ففي حال كان السعر أعلى من R1 يقوم بوضع شراء ليمت
    وفي حال كان السعر أدنى من R1 يقوم بوضع أمر شراء ستوب

    3) تعلم ان بعض الشركات لا تسمح بعمل أوامر معلقه عند سعر قريب من السعر الحالي بـ 10 نقاط
    فكيف يمكن لنا ان نقول للاكسبيرت ان يتابع حركة السعر بحيث اذا لم يستطع وضع امر الشراء فسيقوم بمتابعة السعر الحالي والتنفيذ مباشره في حالة ملامسة سعر الشراء المطلوب

    أتمنى أن لا اكون قد استبقت الدروس القادمه
    وفي انتظار ردك استاذي

    تحياتي لك
    أخوك عادل الماجد

  15. #15
    تاريخ التسجيل
    Oct 2006
    الإقامة
    (بريطانيا) + (السعودية)
    العمر
    39
    المشاركات
    1,048

    افتراضي رد: دورة صناعة الاكسبيرتات

    كنت أنتظر الموضوع هذا منك

    شرحك رااااااااائع ماشاء الله تبارك الله ، مافي أسهل من وصول المعلومة والفكرة

صفحة 1 من 12 123456711 ... الأخيرةالأخيرة

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

  1. طلب صناعة إكسبرت RSI
    By FOREX_WAR in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 22
    آخر مشاركة: 29-04-2017, 10:58 PM
  2. طلب = صناعة سكربت
    By cobra100 in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 6
    آخر مشاركة: 28-10-2008, 02:41 PM
  3. طريقة صناعة الاكسبيرتات الاليه
    By ماجد كو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 24
    آخر مشاركة: 05-05-2008, 03:02 PM

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