من فظلكم كيف يمكن برمجة هذا؟
النتائج 1 إلى 11 من 11
  1. #1
    تاريخ التسجيل
    May 2012
    المشاركات
    450

    11 من فظلكم كيف يمكن برمجة هذا؟

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

  2. #2
    تاريخ التسجيل
    May 2012
    المشاركات
    450

    افتراضي

    عدد نقاط تريلينغ ستوب لكل صفقه = (فارق النقاط بين الدخول و ستوب لوز)

  3. #3
    تاريخ التسجيل
    May 2012
    المشاركات
    450

    افتراضي

    up

  4. #4
    تاريخ التسجيل
    May 2012
    المشاركات
    450

    افتراضي رد:من فظلكم كيف يمكن برمجة هذا؟

    برمجت ذه لكن مايعمل ارجو المساعده

    كود PHP:
         
    int TrailingOrdersBuyTotal
    (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_BUY)
        {          
                 
          if((
    Ask-OrderOpenPrice())> (OrderOpenPrice()- OrderStopLoss()) && (OrderOpenPrice()- OrderStopLoss())>)
          { 
          
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask-(OrderOpenPrice()- OrderStopLoss()),digits),OrderTakeProfit(),0,Red);
          }
        
          
    c++;
        }
      }
      return(
    c);
    }
        
     
    int TrailingOrdersSellTotal(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_SELL)
        {
          if((
    OrderOpenPrice()- Bid)> ( OrderStopLoss()-OrderOpenPrice()) && (OrderStopLoss()-OrderOpenPrice())>)
          { 
          
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-(OrderStopLoss()-OrderOpenPrice()),digits),OrderTakeProfit(),0,Red);
          }
          
    c++;
        }
      }
      return(
    c);


  5. #5
    تاريخ التسجيل
    Oct 2010
    المشاركات
    339

    افتراضي رد:من فظلكم كيف يمكن برمجة هذا؟

    الأخ العزيز أتبع الخطوات التالية و سيعمل الستوب المتحرك

    في أخر البرنامج أضف الدالة التالية

    كود:
    void MoveTrailingStop() { int cnt,total=OrdersTotal(); for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL&&OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(TrailingStop>0) { if((NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-Point*(TrailingStop+TrailingStep),Digits))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Green); return(0); } } } else { if(TrailingStop>0) { if((NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+Point*(TrailingStop+TrailingStep),Digits)))||(OrderStopLoss()==0)) { OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red); return(0); } } } } } }

    في أي مكان من البرنامج مثلا بعد شروط الدخول أو بعد ticket -تضع ما يلي

    كود:
    if(TrailingStop>0)MoveTrailingStop();
    وفي أول البرنامج تضع المتغيرات الخارجية لكي تتحكم في المسافة التي تفضل الستوب عن السعر
    تضيف السطرين التاليين

    كود:
    extern int TrailingStop=0; extern int TrailingStep=0;
    و بالتوفيق

  6. #6
    تاريخ التسجيل
    May 2012
    المشاركات
    450

    افتراضي رد:من فظلكم كيف يمكن برمجة هذا؟

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

  7. #7
    تاريخ التسجيل
    Oct 2010
    المشاركات
    339

    افتراضي

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


    و السلام

    و الافكار كثيرة

  8. #8
    تاريخ التسجيل
    May 2012
    المشاركات
    450

    افتراضي رد:من فظلكم كيف يمكن برمجة هذا؟

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


    و السلام

    و الافكار كثيرة
    شكرا ياغالي
    الستوب المتحرك لكل صفقه هو
    كود PHP:
    TrailingStop=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits); 
    يمكن تكون اكثر من صفقه مفتوحه
    سويت هذا لكنه يعمل على الصفقه الأولى فقط و لا يعمل على البقي
    كود PHP:
    int MoveTrailingStop(int Magic)
    {
       
       for(
    int cnt=0;cnt<OrdersTotal();cnt++)
       {
          
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
              
             
                
    TrailingStop=NormalizeDouble(((OrderTakeProfit()-OrderOpenPrice())/2)/point,digits); 
                
    TrailingStep=NormalizeDouble(((OrderTakeProfit()-OrderOpenPrice())/2)/point,digits);
                if(
    TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
                   {
                      
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blue);
                    
                   }
                }
             }
             else 
             {
                
    TrailingStop=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits); 
                
    TrailingStep=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits);
                
                if(
    TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),digits)>(NormalizeDouble(Ask+TrailingStop*point,digits)))||(OrderStopLoss()==0))
                   {
                      
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,digits),OrderTakeProfit(),0,Red);
                    
                   }
                }
             }
          }
       }

    آخر تعديل بواسطة wikileaks ، 01-10-2012 الساعة 03:33 AM

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة wikileaks مشاهدة المشاركة


    شكرا ياغالي
    الستوب المتحرك لكل صفقه هو
    كود PHP:
    TrailingStop=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits); 
    يمكن تكون اكثر من صفقه مفتوحه
    سويت هذا لكنه يعمل على الصفقه الأولى فقط و لا يعمل على البقي
    كود PHP:
    int MoveTrailingStop(int Magic)
    {
       
       for(
    int cnt=0;cnt<OrdersTotal();cnt++)
       {
          
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
              
             
                
    TrailingStop=NormalizeDouble(((OrderTakeProfit()-OrderOpenPrice())/2)/point,digits); 
                
    TrailingStep=NormalizeDouble(((OrderTakeProfit()-OrderOpenPrice())/2)/point,digits);
                if(
    TrailingStop>0&&NormalizeDouble(Ask-TrailingStep*point,digits)>NormalizeDouble(OrderOpenPrice()+TrailingStop*point,digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),digits)<NormalizeDouble(Bid-TrailingStop*point,digits))||(OrderStopLoss()==0))
                   {
                      
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-TrailingStop*point,digits),OrderTakeProfit(),0,Blue);
                    
                   }
                }
             }
             else 
             {
                
    TrailingStop=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits); 
                
    TrailingStep=NormalizeDouble(((OrderOpenPrice()-OrderTakeProfit())/2)/point,digits);
                
                if(
    TrailingStop>0&&NormalizeDouble(Bid+TrailingStep*point,digits)<NormalizeDouble(OrderOpenPrice()-TrailingStop*point,digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),digits)>(NormalizeDouble(Ask+TrailingStop*point,digits)))||(OrderStopLoss()==0))
                   {
                      
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+TrailingStop*point,digits),OrderTakeProfit(),0,Red);
                    
                   }
                }
             }
          }
       }


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

    كما ذكر الأخ robo coder يمكنك أن تحفظ عدد نقاط التريلينج ستوب لكل صفقه في الكومنت
    مثلا
    كود PHP:
    OrderSend(Symbol(),OP_BUY,newlot,NormalizeDouble(Ask,Digits),3,SL,TP,DoubleToStr((TP-Ask)/point,0),MagicNumber,0,Blue); 
    ثم سوف تستخدم نفس التريلينج ستوب العادي لكن سوف تجعل نقاط التريلينج ستوب هو الكومنت لكل صفقه وليس كمتغير خارجي
    كود PHP:
    void MoveTrailingStop()
    {
       
    int cnt,total=OrdersTotal();
       for(
    cnt=0;cnt<total;cnt++)
       {
          
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
          
    double trailingstop=StrToDouble(OrderComment());
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
                if(
    TrailingStop>0&&NormalizeDouble(Ask,Digits)>NormalizeDouble(OrderOpenPrice()+trailingstop*Point,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-trailingstop*Point,Digits))||(OrderStopLoss()==0))
                   {
                      
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-trailingstop*Point,Digits),OrderTakeProfit(),0,Blue);
                  }
                }
             }
             else 
             {
                if(
    TrailingStop>0&&NormalizeDouble(Bid,Digits)<NormalizeDouble(OrderOpenPrice()-trailingstop*Point,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+trailingstop*Point,Digits)))||(OrderStopLoss()==0))
                   {
                      
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+trailingstop*Point,Digits),OrderTakeProfit(),0,Red);
                    }
                }
             }
          }
       }

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

  10. #10
    تاريخ التسجيل
    Oct 2010
    المشاركات
    339

    افتراضي

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

    كما ذكر الأخ robo coder يمكنك أن تحفظ عدد نقاط التريلينج ستوب لكل صفقه في الكومنت
    مثلا
    كود PHP:
    OrderSend(Symbol(),OP_BUY,newlot,NormalizeDouble(Ask,Digits),3,SL,TP,DoubleToStr((TP-Ask)/point,0),MagicNumber,0,Blue); 
    ثم سوف تستخدم نفس التريلينج ستوب العادي لكن سوف تجعل نقاط التريلينج ستوب هو الكومنت لكل صفقه وليس كمتغير خارجي
    كود PHP:
    void MoveTrailingStop()
    {
       
    int cnt,total=OrdersTotal();
       for(
    cnt=0;cnt<total;cnt++)
       {
          
    OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
          
    double trailingstop=StrToDouble(OrderComment());
          if(
    OrderType()<=OP_SELL&&OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber)
          {
             if(
    OrderType()==OP_BUY)
             {
                if(
    TrailingStop>0&&NormalizeDouble(Ask,Digits)>NormalizeDouble(OrderOpenPrice()+trailingstop*Point,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-trailingstop*Point,Digits))||(OrderStopLoss()==0))
                   {
                      
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-trailingstop*Point,Digits),OrderTakeProfit(),0,Blue);
                  }
                }
             }
             else 
             {
                if(
    TrailingStop>0&&NormalizeDouble(Bid,Digits)<NormalizeDouble(OrderOpenPrice()-trailingstop*Point,Digits))  
                {                 
                   if((
    NormalizeDouble(OrderStopLoss(),Digits)>(NormalizeDouble(Ask+trailingstop*Point,Digits)))||(OrderStopLoss()==0))
                   {
                      
    OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+trailingstop*Point,Digits),OrderTakeProfit(),0,Red);
                    }
                }
             }
          }
       }

    هذا ما قصدته

    شكرا أسامة

  11. #11
    تاريخ التسجيل
    May 2012
    المشاركات
    450

    افتراضي

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