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

    افتراضي الهدف والأستوب و التريلينج ستوب المخفي في الإكسبرت

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

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


    1- سنبدأ أولا بأبسط جزء وهو كيف تحدد الهدف المخفي

    الفكره هي عمل دالة للبحث عن الصفقات المفتوحه ثم يضع شروط إغلاق الصفقه بالنسبه للشراء إذا كان السعر الحالي أكبر من ( سعر فتح الصفقة + عدد نقاط الهدف المخفي ) فيتم إغلاق الصفقه
    بالنسبه للبيع إذا كان السعر الحالي أقل من ( سعر فتح الصفقه - عدد نقاط الهدف المخفي ) فيتم إغلاق الصفقه
    مثال
    كود PHP:
    void CloseOrdersHiddenTP()
    {
      for (
    int i=OrdersTotal()-1;i>=0;i--)
      {
        
    bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(
    OrderSymbol()==Symbol())
        {
          if(
    OrderType()==OP_BUY&&Bid>=OrderOpenPrice()+HiddenTP*Point)
          {
            
    bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3);
          }
          if(
    OrderType()==OP_SELL&&Ask<=OrderOpenPrice()-HiddenTP*Point)
          {
            
    bool closeS=OrderClose(OrderTicket(),OrderLots(),Bid,3);
          }
        }
      }


    2- تحدد الأستوب المخفي

    بنفس الفكرة الإغلاق على الأستوب لوز
    كود PHP:
    void CloseOrdersHiddenSL()
    {
      for (
    int i=OrdersTotal()-1;i>=0;i--)
      {
        
    bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(
    OrderSymbol()==Symbol())
        {
          if(
    OrderType()==OP_BUY&&Bid<=OrderOpenPrice()-HiddenSL*Point)
          {
            
    bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3);
          }
          if(
    OrderType()==OP_SELL&&Ask>=OrderOpenPrice()+HiddenSL*Point)
          {
            
    bool closeS=OrderClose(OrderTicket(),OrderLots(),Bid,3);
          }
        }
      }

    3- التريلينج ستوب المخفي

    الفرق بين الهدف والتريلينج ستوب أنه في التريلينج ستوب لا يوجد سعر ثابت سيغلق عنده السعر فكيف نحل هذه المشكله
    الفكره في تعريف متغير لكل صفقة جديده يتم فتحها وتكون مرتبطه بالصفقه وكلما تحرك التريلينج ستوب سوف تتغير قيمة هذا المتغير وبمجرد أن يصل السعر إلى قيمة هذا المتغير سوف تغلق الصفقه على التريلينج ستوب
    مثال دالة تستخدم المتغيرات العامه GlobalVariables لحذف قيمة التريلينج ستوب
    كود PHP:
    void HiddenTrailingStop()
    {
       for(
    int i=OrdersTotal()-1;i>=0;i--)
       {
         
    bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(
    OrderType()<=OP_SELL&&HiddenTS>0)
         {     
          if(
    OrderType()==OP_BUY)
          {
           if(
    Bid>=OrderOpenPrice()+HiddenTS*Point&&(GlobalVariableGet("TS"+OrderTicket())<Bid-HiddenTS*Point||GlobalVariableGet("TS"+OrderTicket())==0))  
           {                 
            
    GlobalVariableSet("TS"+OrderTicket(),Bid-HiddenTS*Point);   
           }
          }
          else 
          {
           if(
    Ask<=OrderOpenPrice()-HiddenTS*Point&&(GlobalVariableGet("TS"+OrderTicket())>Ask+HiddenTS*Point||GlobalVariableGet("TS"+OrderTicket())==0))  
           {                 
            
    GlobalVariableSet("TS"+OrderTicket(),Ask+HiddenTS*Point);      
           }
          }
          
         }
       }

    ثم سنقوم بعمل دالة تبحث في الصفقات المفتوحه وتقارن بينها وبين سعر التريلينج ستوب ثم تغلق الصفقه عندما يصل السعر الحالي إلى نقطة التريلينج ستوب
    مثال
    كود PHP:
    void CloseHiddenTrailingStop()
    {
      for(
    int i=OrdersTotal()-1;i>=0;i--)
      {
       
    bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(
    OrderSymbol()==Symbol())
       {
        if(
    OrderType()==OP_BUY&&GlobalVariableGet("TS"+OrderTicket())!=0)
        {
         if(
    Bid<=GlobalVariableGet("TS"+OrderTicket()))
         {
          
    bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3);
          
    GlobalVariableDel("TS"+OrderTicket());
         }
        }
        if(
    OrderType()==OP_SELL&&GlobalVariableGet("TS"+OrderTicket())!=0)
        {
         if(
    Ask>=GlobalVariableGet("TS"+OrderTicket()))
         {
          
    bool closeS=OrderClose(OrderTicket(),OrderLots(),Ask,3);
          
    GlobalVariableDel("TS"+OrderTicket());
         }
        }
       }
      }

    4- التريلينج بناء على رصيد الحساب

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

    نفس الفكره السابقه لكن بدلا من حساب النقاط سنحسب النسبة المئويه
    مثال
    كود PHP:
    void HiddenTrailingBalancePercent()
    {
      
    double ProfitPercent=AccountProfit()/AccountBalance()*100;
      
      if(
    ProfitPercent>=StartTrailingPercent&&(GlobalVariableGet("TS Percent")<ProfitPercent-StartTrailingPercent||GlobalVariableGet("TS Percent")==0))
      {
       
    GlobalVariableSet("TS Percent",ProfitPercent-StartTrailingPercent);   
      }
      
      if(
    ProfitPercent<=GlobalVariableGet("TS Percent")&&GlobalVariableGet("TS Percent")!=0)
      {
       for(
    int i=OrdersTotal()-1;i>=0;i--)
       {
        
    bool select=OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
        if(
    OrderSymbol()==Symbol())
        {
         if(
    OrderType()==OP_BUY)
         {
          
    bool closeB=OrderClose(OrderTicket(),OrderLots(),Bid,3);
         }
         if(
    OrderType()==OP_SELL)
         {
          
    bool closeS=OrderClose(OrderTicket(),OrderLots(),Ask,3);
         }
        }
       }
       
    GlobalVariableDel("TS Percent");
      } 

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

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

    افتراضي

    نتعلم من بحر علم كل يوم جديد
    لك الشكر والتقدير استاذى الكريم مستر دولار

  3. #3
    الصورة الرمزية أبو نـاصر
    أبو نـاصر غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jun 2013
    الإقامة
    السعودية
    المشاركات
    3,189

    افتراضي

    جزاك الله خيرا على الدرس الجميل


    ودائما سباق بالخير

    عزيزي
    هل ممكن شرح لـ MODE_TRADES
    ----


    وعندي سؤال آخر

    ايهما اسرع للاسكربت

    تكرار حلقات for كما فعلت اعلاه

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

    .... بصراحة اكره الحلقات والسليب

  4. #4
    الصورة الرمزية first_knight
    first_knight غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2014
    الإقامة
    المملكة العربية السعودية
    المشاركات
    170

    افتراضي

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

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة أبو نـاصر مشاهدة المشاركة
    جزاك الله خيرا على الدرس الجميل


    ودائما سباق بالخير

    عزيزي
    هل ممكن شرح لـ MODE_TRADES
    ----


    وعندي سؤال آخر

    ايهما اسرع للاسكربت

    تكرار حلقات for كما فعلت اعلاه

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

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

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

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

    افتراضي

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

  7. #7
    الصورة الرمزية السمحان
    السمحان غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Oct 2015
    الإقامة
    السعودية
    المشاركات
    310

    افتراضي

    ابداع في ابداع

    شكرا جزيلا استاذ اسامه
    جزاك الله خير

  8. #8
    الصورة الرمزية أبو نـاصر
    أبو نـاصر غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jun 2013
    الإقامة
    السعودية
    المشاركات
    3,189

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    في الدالة OrderSelect يمكنك البحث عن الصفقات المفتوحه أو الصفقات المغلقه
    إذا كنت تبحث عن الصفقات المفتوحه تستخدم MODE_TRADES وإذا كنت تبحث عن الصفقات المغلقه تستخدم MODE_HISTORY

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

    اقصد بقية الخيارات .. هل لها اهمية بالنسبة لنا

  9. #9
    الصورة الرمزية أبو نـاصر
    أبو نـاصر غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jun 2013
    الإقامة
    السعودية
    المشاركات
    3,189

    افتراضي

    سؤال أخير تكرما

    ما هو كود وضع التريلينج للاوامر المعلقة




  10. #10
    الصورة الرمزية وضاح عطار
    وضاح عطار غير متواجد حالياً عضو مميز ومشرف سابق
    تاريخ التسجيل
    Apr 2006
    الإقامة
    السعودية
    العمر
    52
    المشاركات
    7,041

    افتراضي

    ما شاء الله أخي الكريم ...

    عمل متقن وكود احترافي ...

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


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

    مثلا هدفنا 5 نقاط فقط ... نقوم بتعريف الهدف الافتراضي 50 نقطة ..

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

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

    وأيضا نفس الأمر بالنسبة للوقف .

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


    ما الذي استفدناه من هذه الفكرة ...

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

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

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

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

    افتراضي

    السلام عليكم استاذى الكريم
    ماهو الخطا الموجود هنا
    ولك الشكر والتقدير على المساعده
    تحياتى لك
    كود PHP:
     void MoveTrailingStop()
    {
       if(
    TrailingStop<MarketInfo(Symbol(),MODE_STOPLEVEL)){TrailingStop=(int)MarketInfo(Symbol(),MODE_STOPLEVEL);}
      
       for(
    int cnt=0;cnt<OrdersTotal();cnt++)
       {
          if(
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
                if(
    TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*pt,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*pt,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*pt,Digits))||(OrderStopLoss()==0))
                   {
                      
    bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*pt,Digits),OrderTakeProfit(),0,Blue);
                    
                   }
                }
             }
             else 
             {
                if(
    TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*pt,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*pt,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*pt,Digits)))||(OrderStopLoss()==0))
                   {
                      
    bool mnm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*pt,Digits),OrderTakeProfit(),0,Red);
                    
                   }
                }
             }
          }
       }
    }

     
    //---------------------------------

    void MoveBreakEven()
    {
       
    int cnt,total=OrdersTotal();
       for(
    cnt=0;cnt<total;cnt++)
       {
          if(
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
                if(
    BreakEven>0)
                {
                   if(
    NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*pt)
                   {
                      if(
    NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||OrderStopLoss()==0)
                      {
                         
    bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+movestopto*pt,Digits),OrderTakeProfit(),0,Blue);
                      
                      }
                   }
                }
             }
             else
             {
                if(
    BreakEven>0)
                {
                   if(
    NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*pt)
                   {
                      if(
    NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||OrderStopLoss()==0)
                      {
                         
    bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-movestopto*pt,Digits),OrderTakeProfit(),0,Red);
                   
                      }
                   }
                }
             }
          }
       }


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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة سمير محمد ارمان مشاهدة المشاركة
    السلام عليكم استاذى الكريم
    ماهو الخطا الموجود هنا
    ولك الشكر والتقدير على المساعده
    تحياتى لك
    كود PHP:
     void MoveTrailingStop()
    {
       if(
    TrailingStop<MarketInfo(Symbol(),MODE_STOPLEVEL)){TrailingStop=(int)MarketInfo(Symbol(),MODE_STOPLEVEL);}
      
       for(
    int cnt=0;cnt<OrdersTotal();cnt++)
       {
          if(
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
                if(
    TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*pt,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*pt,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*pt,Digits))||(OrderStopLoss()==0))
                   {
                      
    bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*pt,Digits),OrderTakeProfit(),0,Blue);
                    
                   }
                }
             }
             else 
             {
                if(
    TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*pt,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*pt,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*pt,Digits)))||(OrderStopLoss()==0))
                   {
                      
    bool mnm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*pt,Digits),OrderTakeProfit(),0,Red);
                    
                   }
                }
             }
          }
       }
    }
     
     
    //---------------------------------
     
    void MoveBreakEven()
    {
       
    int cnt,total=OrdersTotal();
       for(
    cnt=0;cnt<total;cnt++)
       {
          if(
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
                if(
    BreakEven>0)
                {
                   if(
    NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*pt)
                   {
                      if(
    NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||OrderStopLoss()==0)
                      {
                         
    bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+movestopto*pt,Digits),OrderTakeProfit(),0,Blue);
                      
                      }
                   }
                }
             }
             else
             {
                if(
    BreakEven>0)
                {
                   if(
    NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*pt)
                   {
                      if(
    NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||OrderStopLoss()==0)
                      {
                         
    bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-movestopto*pt,Digits),OrderTakeProfit(),0,Red);
                   
                      }
                   }
                }
             }
          }
       }

    ارجو المساعده
    وشكرا لك استاذى الكريم

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

    افتراضي

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

    عمل متقن وكود احترافي ...

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


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

    مثلا هدفنا 5 نقاط فقط ... نقوم بتعريف الهدف الافتراضي 50 نقطة ..

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

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

    وأيضا نفس الأمر بالنسبة للوقف .

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


    ما الذي استفدناه من هذه الفكرة ...

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

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

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

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة سمير محمد ارمان مشاهدة المشاركة
    السلام عليكم استاذى الكريم
    ماهو الخطا الموجود هنا
    ولك الشكر والتقدير على المساعده
    تحياتى لك
    كود PHP:
     void MoveTrailingStop()
    {
       if(
    TrailingStop<MarketInfo(Symbol(),MODE_STOPLEVEL)){TrailingStop=(int)MarketInfo(Symbol(),MODE_STOPLEVEL);}
      
       for(
    int cnt=0;cnt<OrdersTotal();cnt++)
       {
          if(
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
                if(
    TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*pt,Digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*pt,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-TrailingStop*pt,Digits))||(OrderStopLoss()==0))
                   {
                      
    bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*pt,Digits),OrderTakeProfit(),0,Blue);
                    
                   }
                }
             }
             else 
             {
                if(
    TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*pt,Digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*pt,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+TrailingStop*pt,Digits)))||(OrderStopLoss()==0))
                   {
                      
    bool mnm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*pt,Digits),OrderTakeProfit(),0,Red);
                    
                   }
                }
             }
          }
       }
    }
     
     
    //---------------------------------
     
    void MoveBreakEven()
    {
       
    int cnt,total=OrdersTotal();
       for(
    cnt=0;cnt<total;cnt++)
       {
          if(
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
                if(
    BreakEven>0)
                {
                   if(
    NormalizeDouble((Bid-OrderOpenPrice()),Digits)>BreakEven*pt)
                   {
                      if(
    NormalizeDouble((OrderStopLoss()-OrderOpenPrice()),Digits)<0||OrderStopLoss()==0)
                      {
                         
    bool mm=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+movestopto*pt,Digits),OrderTakeProfit(),0,Blue);
                      
                      }
                   }
                }
             }
             else
             {
                if(
    BreakEven>0)
                {
                   if(
    NormalizeDouble((OrderOpenPrice()-Ask),Digits)>BreakEven*pt)
                   {
                      if(
    NormalizeDouble((OrderOpenPrice()-OrderStopLoss()),Digits)<0||OrderStopLoss()==0)
                      {
                         
    bool nn=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-movestopto*pt,Digits),OrderTakeProfit(),0,Red);
                   
                      }
                   }
                }
             }
          }
       }


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

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

    افتراضي

    الشكر والتقدير على المساعده
    تحياتى لك

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

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