صفحة 1 من 3 123 الأخيرةالأخيرة
النتائج 1 إلى 15 من 37
  1. #1
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,851

    افتراضي موضوع تعليمي : التعامل مع الكائنات على الشارت وإستخدام الداله OnChartEvent

    سابقا عندما كنا نريد التعامل مع الكائنات على الشارت ( معرفة هل تم الضغط على زر على الشارت - هل تم رسم كائن جديد - هل تم حذف كائن - تحرك الماوس على الشارت .... ) كنا نستخدم مكتبات
    خارجيه لكن الآن يمكننا مباشرة بتنفيذ جميع الأوامر المتعلقه بالشارت بلغة MQL4 مباشرة

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

    سنقوم بكتابة الداله في كود المؤشر
    كود PHP:
    void OnChartEvent(const int id,
                      const 
    long &lparam,
                      const 
    double &dparam,
                      const 
    string &sparam)

    وهي تأخذ أربعة قيم
    id تحفظ نوع الحدث الذي تم ( تحرك الماوس - ضغط على الشارت - تحريك كائن - ضغط على زر في الكيبورد ... )
    وأنواعها هي
    كود PHP:
    CHARTEVENT_KEYDOWN 
    حدث الضغط على زر على الكيبورد

    كود PHP:
    CHARTEVENT_MOUSE_MOVE 
    تحرك الماوس على الشارت

    كود PHP:
    CHARTEVENT_OBJECT_CREATE 
    رسم كائن جديد على الشارت

    كود PHP:
    CHARTEVENT_OBJECT_CHANGE 
    تغيير قيم كائن

    كود PHP:
    CHARTEVENT_OBJECT_DELETE 
    حذف كائن

    كود PHP:
    CHARTEVENT_CLICK 
    كليك على الشارت

    كود PHP:
    CHARTEVENT_OBJECT_CLICK 
    كليك على كائن

    كود PHP:
    CHARTEVENT_OBJECT_DRAG 
    إضافة كائن على الشارت

    كود PHP:
    CHARTEVENT_OBJECT_ENDEDIT 
    الإنتهاء من تعديل نص في الكائن

    كود PHP:
    CHARTEVENT_CHART_CHANGE 
    تعديل قيم الشارت

    كود PHP:
    CHARTEVENT_CUSTOM+
    عمل كائن فرعي محدد


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

    مثلا CHARTEVENT_OBJECT_CLICK

    lparam تحفظ قيمة الإحداثي الأفقي
    dparam تحفظ قيمة الإحداثي الراسي
    sparam تحفظ إسم الكائن الذي تم الضغط عليه

    هذه قائمة بكل حدث و تعريف له

    اضغط على الصورة لعرض أكبر

الاســـم:	س1.png
المشاهدات:	207
الحجـــم:	67.4 كيلوبايت
الرقم:	403861

    نعود الآن بالنسبه للإكسبرت الذي سنقوم بعمله

    قمت بعمل دالة لرسم الأزرار على الشارت
    كود PHP:
    void CreatePanel(string name,ENUM_OBJECT Type,string text,int XDistance,int YDistance,int Width,int Hight,
                     
    color Color_,color TextColor,color boarderColor,int fontsize)
    {
     
    ObjectCreate(0,name,Type,0,0,0);
     
    ObjectSetInteger(0,name,OBJPROP_XDISTANCE,XDistance);
     
    ObjectSetInteger(0,name,OBJPROP_YDISTANCE,YDistance);
     
    ObjectSetInteger(0,name,OBJPROP_XSIZE,Width);
     
    ObjectSetInteger(0,name,OBJPROP_YSIZE,Hight);
     
    ObjectSetString(0,name,OBJPROP_TEXT,text);
     
    ObjectSetString(0,name,OBJPROP_FONT,"Arial Bold");
     
    ObjectSetInteger(0,name,OBJPROP_FONTSIZE,fontsize);
     
    ObjectSetInteger(0,name,OBJPROP_CORNER,Panel_Corner);
     
    ObjectSetInteger(0,name,OBJPROP_COLOR,TextColor);
     
    ObjectSetInteger(0,name,OBJPROP_BORDER_COLOR,boarderColor);
     
    ObjectSetInteger(0,name,OBJPROP_BGCOLOR,Color_);
     if(
    Type==OBJ_EDIT)ObjectSetInteger(0,name,OBJPROP_ALIGN,ALIGN_CENTER);

    بداخل الدالة OnInit قمت برسم الأزرار الخاصة بالشراء و البيع و إغلاق و حذف الأوام
    كود PHP:
    CreatePanel("Panel_Buy",OBJ_BUTTON,"BUY",  1045,60,30,DodgerBlue,White,Blue,12);
       
    CreatePanel("Panel_Lot",OBJ_EDIT,"0.1",    7050,30,20,White,Black,Black,9);
       
    CreatePanel("Panel_+",OBJ_BUTTON,"+",      7538,20,10,Lime,Black,Lime,9);
       
    CreatePanel("Panel_-",OBJ_BUTTON,"-",      7572,20,10,Red,Black,Red,9);
       
    CreatePanel("Panel_Sell",OBJ_BUTTON,"SELL",100,45,60,30,OrangeRed,White,Red,12);
       
    CreatePanel("Panel_TP",OBJ_BUTTON,"TP",    1080,20,20,Blue,White,Blue,10);
       
    CreatePanel("Panel_SL",OBJ_BUTTON,"SL",    140,80,20,20,Blue,White,Blue,10);
       
    CreatePanel("Panel_TP_text",OBJ_EDIT,"0",3080,40,20,White,Black,Red,9);
       
    CreatePanel("Panel_SL_text",OBJ_EDIT,"0",100,80,40,20,White,Black,Red,9);
       if(
    Enable_CloseAll)CreatePanel("Panel_CloseAll",OBJ_BUTTON,
                                
    "CLOSE ALL",10105,70,20,Red,White,Red,8);
       if(
    Enable_DeleteAll)CreatePanel("Panel_DeleteAll",OBJ_BUTTON,
                                
    "DELETE ALL",90105,70,20,Red,White,Red,8); 
    الآن نعود مرة أخرى للداله OnChartEvent

    في البداية سأقوم بإضافة شرط لمعرفة إذا ما تم الضغط على أي زر على الشارت بإستدعاء إسمه
    كود PHP:
    if(id==CHARTEVENT_OBJECT_CLICK)
      {
      
       
    string Object_Name=ObjectGetString(0,sparam,OBJPROP_NAME);
      
       if(
    Object_Name=="Panel_Buy")
       {
        
    // open buy 
       
    }
       if(
    Object_Name=="Panel_Sell")
       {
        
    // open sell
       
    }
       if(
    Object_Name=="Panel_CloseAll")
       {   
        
    // close all
       
    }
       if(
    Object_Name=="Panel_DeleteAll")
       {
        
    // delete all
       
    }
       
      } 
    بقي فقط أن نضيف الأوامر كما هي محدده في الكومنتات لكن قبل ذلك يجب أن نقوم بمعرفة قيم حجم اللوت و الهدف و الاستوب لذلك اضفت الكود
    كود PHP:
    double  Lots=StringToDouble(ObjectDescription("Panel_Lot"));   StopLoss=StringToDouble(ObjectDescription("Panel_SL_text"));   TakeProfit=StringToDouble(ObjectDescription("Panel_TP_text")); 
    أيضا سأضيف كود آخر بحيث بعد الضغط على الأزار تعود إلى طبيعتها مره أخرى
    كود PHP:
    ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,false);   ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false); 
    وسيكون الكود في النهاية بشكل كامل
    كود PHP:
    if(id==CHARTEVENT_OBJECT_CLICK)
      {
      
       
    double StopLoss,TakeProfit;
       
    double Lots=StringToDouble(ObjectDescription("Panel_Lot"));
       
    StopLoss=StringToDouble(ObjectDescription("Panel_SL_text"));
       
    TakeProfit=StringToDouble(ObjectDescription("Panel_TP_text"));
       
    double SL,TP;
       
    int ticket;
       
    string Object_Name=ObjectGetString(0,sparam,OBJPROP_NAME);
      
       if(
    Object_Name=="Panel_Buy")
       {
        if(
    StopLoss==0)SL=0;else SL=Ask-StopLoss*point;
        if(
    TakeProfit==0)TP=0;else TP=Ask+TakeProfit*point;
        
        
    ticket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),3*P,SL,TP,"Panel EA",0,0,Blue);
        
    ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,false);
        
    ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false);
       }
       if(
    Object_Name=="Panel_Sell")
       {
        if(
    StopLoss==0)SL=0;else SL=Bid+StopLoss*point;
        if(
    TakeProfit==0)TP=0;else TP=Bid-TakeProfit*point;
        
    ticket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),3*P,SL,TP,"Panel EA",0,0,Blue);
        
    ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,false);
        
    ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false);
       }
       if(
    Object_Name=="Panel_CloseAll")
       {   
        
    CloseOrders(OP_BUY);
        
    CloseOrders(OP_SELL);
        
    ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,false);
        
    ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false);
       }
       if(
    Object_Name=="Panel_DeleteAll")
       {
        
    CloseOrders(OP_BUYLIMIT);
        
    CloseOrders(OP_SELLLIMIT);
        
    CloseOrders(OP_BUYSTOP);
        
    CloseOrders(OP_SELLSTOP);
        
    ObjectSetInteger(0,Object_Name,OBJPROP_SELECTED,false);
        
    ObjectSetInteger(0,Object_Name,OBJPROP_STATE,false);
       }
      } 
    بقي الآن أن أضيف كود لزيادة أوتقليل حجم اللوت عندما يتم الضغط على زر + أو -
    كود PHP:
     if(Object_Name=="Panel_+")
       {
        
    ObjectSetString(0,"Panel_Lot",OBJPROP_TEXT,DoubleToStr(Lots+MarketInfo(Symbol(),MODE_MINLOT),2));
       }
       if(
    Object_Name=="Panel_-")
       {
        
    Lots=MathMax(Lots-MarketInfo(Symbol(),MODE_MINLOT),MarketInfo(Symbol(),MODE_MINLOT));
        
    ObjectSetString(0,"Panel_Lot",OBJPROP_TEXT,DoubleToStr(Lots,2));
       } 
    ولا ننسى الجزء البسيط وهو دالة إغلاق الصفقات
    كود PHP:
    void CloseOrders(int type)
    {
      for(
    int cnt=OrdersTotal()-1;cnt>=0;cnt--)
      {
        
    bool select=OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
        
    int ticket=OrderTicket();
        
    double lots=OrderLots();
        
    int Otype=OrderType();
        
        if(
    OrderSymbol()==Symbol()&&Otype==type)
        {
          if(
    Otype==OP_BUY)
          {
           
    bool closeOrderClose(ticket,lots,NormalizeDouble(Bid,Digits),3*P);
            
          }
          if(
    Otype==OP_SELL)
          {
           
    closeOrderClose(ticket,lots,NormalizeDouble(Ask,Digits),3*P);
          }
          if(
    Otype>OP_SELL)
          {
           
    OrderDelete(ticket);
          }
        }
      }

    وبذلك يكون الإكسبرت جاهز للتجربه و العمل
    اضغط على الصورة لعرض أكبر

الاســـم:	س2.png
المشاهدات:	1120
الحجـــم:	7.0 كيلوبايت
الرقم:	403860
    مرفق الإكسبرت
    الملفات المرفقة الملفات المرفقة
    آخر تعديل بواسطة MR.dollar ، 16-04-2014 الساعة 02:02 AM

  2. #2
    الصورة الرمزية kira-h
    kira-h غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Oct 2011
    الإقامة
    المغرب
    المشاركات
    1,334

    افتراضي

    رائع أستاذنا الغالي، سلمت يداك على الموضوع الأكثر من رائع
    جزاك الله خيرا

  3. #3
    الصورة الرمزية Ahmed Shihab
    Ahmed Shihab غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Feb 2009
    المشاركات
    496

    افتراضي

    بارك الله تعالى فيك استاذى الكريم اسامه

  4. #4
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,851

    افتراضي

    ملحوظه بعد تغيير قيم حجم اللوت أو الهدف أو الاستوب يجب الضغط على الكيبورد Enter

    اقتباس المشاركة الأصلية كتبت بواسطة kira-h مشاهدة المشاركة
    رائع أستاذنا الغالي، سلمت يداك على الموضوع الأكثر من رائع
    جزاك الله خيرا
    اقتباس المشاركة الأصلية كتبت بواسطة Ahmed Shihab مشاهدة المشاركة
    بارك الله تعالى فيك استاذى الكريم اسامه
    جزاكم الله خير

  5. #5
    الصورة الرمزية tareef
    tareef غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2007
    الإقامة
    المملكة العربية السعودية
    المشاركات
    692

    افتراضي

    أخي الفاضل المهندس أسامة أولا نشكرك على جهدك المستمر في العطاء ونشكرك على مواضيعك الرائعة فجزاك الله خير...

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


    تقبل خالص شكري وتقديري
    توقيع العضو
    (إن الله وملائكته يصلون على النبي يا أيها الذين آمنوا صلوا عليه وسلموا تسليما)
    اللهم صلى على سيدنا محمد وعلى آله وصحبه وسلم تسليما كثيرا

  6. #6
    الصورة الرمزية tiodaronzi
    tiodaronzi غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    299

    افتراضي

    بارك الله فيك ..
    موضوع أكثر من رائع.

  7. #7
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,851

    افتراضي

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

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


    تقبل خالص شكري وتقديري
    جزاك الله خير
    ترقب سنستكملها هذا الإسبوع بإذن الله

  8. #8
    الصورة الرمزية Jmeel
    Jmeel غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Sep 2008
    الإقامة
    في أرض الله
    المشاركات
    7,610

    افتراضي

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

  9. #9
    الصورة الرمزية MR.dollar
    MR.dollar غير متواجد حالياً مشرف المتداول العربي
    تاريخ التسجيل
    Jun 2009
    الإقامة
    مصر
    المشاركات
    13,851

    افتراضي

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

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

  10. #10
    الصورة الرمزية The1
    The1 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2009
    الإقامة
    UAE
    المشاركات
    655

    افتراضي

    كعادتك مبدع دائماً

  11. #11
    الصورة الرمزية xcv114
    xcv114 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Oct 2010
    الإقامة
    مصر
    المشاركات
    1,022

    افتراضي

    رائع .. بارك الله فيك

  12. #12
    الصورة الرمزية Robo-coder
    Robo-coder غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2010
    المشاركات
    338

    افتراضي

    شكرا أستاذنا العزيز

  13. #13
    الصورة الرمزية 4N45PRO
    4N45PRO غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Apr 2006
    الإقامة
    المغرب
    المشاركات
    521

    افتراضي

    بارك الله فيك أستاذ و زادك علما

  14. #14
    الصورة الرمزية سمير محمد ارمان
    سمير محمد ارمان غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2009
    الإقامة
    مصر
    المشاركات
    834

    افتراضي

    ممتاز استاذى
    منتظر باقى الابداعات
    تحياتى لك

  15. #15
    الصورة الرمزية سمير محمد ارمان
    سمير محمد ارمان غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2009
    الإقامة
    مصر
    المشاركات
    834

    افتراضي

    السلام عليكم استاذى الكريم
    مستر دولار
    جزاك الله خير
    على كل ماتقدمه لنا
    تحياتى لك وتقديرى لك
    ............
    تم عمل الاكسبيرت بطريقة التلميذ
    ارجو ان يكون تمام
    شكرا لك استاذى
    تحياتى لك
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة 1.png‏  
    الملفات المرفقة الملفات المرفقة
    • نوع الملف: mq4 AR_1.mq4‏ (11.1 كيلوبايت, المشاهدات 141)

صفحة 1 من 3 123 الأخيرةالأخيرة

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17