صفحة 437 من 691 الأولىالأولى ... 337387427431432433434435436437438439440441442443447487537 ... الأخيرةالأخيرة
النتائج 6,541 إلى 6,555 من 10363
  1. #6541
    الصورة الرمزية forex007
    forex007 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2015
    الإقامة
    مصر
    المشاركات
    206

    افتراضي

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

    كود PHP:
    double ablue=iCustom(NULL,0,"BigTrendFx",5,1);
    double ared=iCustom(NULL,0,"BigTrendFx",4,1);
     
     
    if(
    ablue>aredComment("BUY");
    if(
    ablue<aredComment("SELL"); 
    جزاك الله خير اخي جميل وغفر الله لك ولوالديك ,,,
    سوف اقوم بالتجربه إن شاء الله يضبط

  2. #6542
    الصورة الرمزية first knight
    first knight غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Sep 2014
    الإقامة
    مصر
    المشاركات
    26

    افتراضي

    السلام عليكم ورحمة الله وبركاتة
    وظيفة تحريك التريلينج استوب
    كود:
    //----//   
     void MoveTrailingStop()
    {
       
       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);
                    
                   }
                }
             }
          }
       }
    }
    
     //----//
    ما المقصود بالكود التالي
    كود:
    OrderType()<=OP_SELL

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة first knight مشاهدة المشاركة
    السلام عليكم ورحمة الله وبركاتة
    وظيفة تحريك التريلينج استوب
    كود:
    //----//   
     void MoveTrailingStop()
    {
       
       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);
                    
                   }
                }
             }
          }
       }
    }
     
     //----//
    ما المقصود بالكود التالي
    كود:
    OrderType()<=OP_SELL
    وعليكم السلام ورحمة الله
    لاحظ في الجدول ترتيب انواع البيع والشراء ، في سؤالك نعني أن يكون أما شراء أو بيع ولايشمل البحث عن الأوردرات الأكبر من 1 في ترتيب الأنواع .
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة k.png‏  
    توقيع العضو
    اعتذر لمن لن أتمكن من تنفيذ طلبه بسبب عدم قناعتي بالفكرة

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

    افتراضي

    اشكرك كثيرا استاذي جميل
    لفد قمت بازالتها
    كما ازالة else ووضع مكانها if order type open sell
    هل الكود الان صحيح ام به خطاء
    كود:
    //----//   
     void MoveTrailingStop()
    {
       
       for(int cnt=0;cnt<OrdersTotal();cnt++)
       {
          if(OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
          if(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);
                    
                   }
                }
             }
            if(OrderType()==OP_SELL)
             {
                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);
                    
                   }
                }
             }
          }
       }
    }
    
     //----//
    الملفات المرفقة الملفات المرفقة
    آخر تعديل بواسطة first_knight ، 10-05-2015 الساعة 10:34 PM

  5. #6545
    الصورة الرمزية forex007
    forex007 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2015
    الإقامة
    مصر
    المشاركات
    206

    افتراضي

    السلام عليكم ورحمة الله وبركاتة
    شباب سؤال كيف بحول مؤشر ديمارك الى اكسبيرت
    المؤشر مرفق
    ادخل على خصائص المؤشر وقوم بتفعيل خاصيه TakeLines حتى يتم توضيح الاهداف
    اضغط على الصورة لعرض أكبر

الاســـم:	EURUSDH1.png
المشاهدات:	81
الحجـــم:	50.1 كيلوبايت
الرقم:	433976

    كما نلاحظ عند تفعيل takelines تظهر خطوط زرقاء منقطه وهي اهداف كسر الخط الازرق
    وخطوط حمراء منقطه وهي اهداف كسر الخط الاحمر

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

    الملفات المرفقة الملفات المرفقة

  6. #6546
    الصورة الرمزية اعصار ريتا
    اعصار ريتا غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jan 2007
    الإقامة
    السعودية
    المشاركات
    438

    افتراضي

    السلام عليكم

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

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

    كود:
     
    int barshift=iBarShift(Symbol(),0,LastopenOrderTime(),false);
    double low=Low[iLowest(Symbol(),0,MODE_LOW,barshift,0)];
    double high=High[iHighest(Symbol(),0,MODE_HIGH,barshift,0)]; 
     
     
    datetime LastopenOrderTime(){
    for(int i=OrdersHistoryTotal();i>0;i--){
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
    return(OrderOpenTime());
    }
    }
    return(0);
    }

  7. #6547
    الصورة الرمزية نهادصبري
    نهادصبري غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2015
    المشاركات
    6

    افتراضي

    لسلام عليكم طلب مؤشر KorHarmonics الجديد حيث المؤشر القديم لايعمل عندي ارجو المساعدة

  8. #6548
    الصورة الرمزية forex007
    forex007 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2015
    الإقامة
    مصر
    المشاركات
    206

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة نهادصبري مشاهدة المشاركة
    لسلام عليكم طلب مؤشر KorHarmonics الجديد حيث المؤشر القديم لايعمل عندي ارجو المساعدة
    عليكم السلام
    مرفق اصدار يعمل بدون مشاكل ,,,
    هذا منتدى خاص بالمؤشر هنا
    http://tradingarsenal.com/korharmoni...r-releases-32/
    الملفات المرفقة الملفات المرفقة

  9. #6549
    الصورة الرمزية forex007
    forex007 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2015
    الإقامة
    مصر
    المشاركات
    206

    افتراضي

    لدي سؤال ياشباب ,,,
    كيف اعمل اكسبيرت اذا ظهرت اشارة شراء يدخل واذا ظهرت اشارة بيع ايضا يدخل
    كنا نستخدم عدد الصفقات المفتوحه من نفس نوع ماجيك نمبر ونقول للاكسبيرت اذا لايوجد صفقات مفتوحه ادخل كذا ..
    لكن انا ارغب اذا ظهرت اشارة شراء بيدخل او هدف او استوب اذا ظهرت اشارة بيع وصفقه شراء مفتوحة يدخل صفقة بيع او هدف او استوب
    كمثال :
    تقاطع ستوكاستك تحت مستوى 20 هنا بندخل شراء بهدف واستوب وحجم لوت بنسبه مخاطرة لنفرض حجم لوت 1
    وكانت صفقة الشراء مفتوحة وظهرت لدينا صفقة بيع تقاطع فوق مستوى 80 مفروض بتاخذ نفس حجم لوت الصفقه مفتوحة حاليا بنفس ماجيك نمبر وهنا لدينا الحجم 1 ندخل بيع ايضا
    بمعنى يكون الدخول مره واحدة حسب نوع الصفقة شراء او بيع ولوت في اول صفقه يتم احتسابه بنسبة مئويه للمخاطرة لكن العقد التالي ولدينا صفقة مفتوحة بتاخذ حجم لوت الصفقة المفتوحة


  10. #6550
    الصورة الرمزية اعصار ريتا
    اعصار ريتا غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jan 2007
    الإقامة
    السعودية
    المشاركات
    438

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة forex007 مشاهدة المشاركة
    لدي سؤال ياشباب ,,,
    كيف اعمل اكسبيرت اذا ظهرت اشارة شراء يدخل واذا ظهرت اشارة بيع ايضا يدخل
    كنا نستخدم عدد الصفقات المفتوحه من نفس نوع ماجيك نمبر ونقول للاكسبيرت اذا لايوجد صفقات مفتوحه ادخل كذا ..
    لكن انا ارغب اذا ظهرت اشارة شراء بيدخل او هدف او استوب اذا ظهرت اشارة بيع وصفقه شراء مفتوحة يدخل صفقة بيع او هدف او استوب
    كمثال :
    تقاطع ستوكاستك تحت مستوى 20 هنا بندخل شراء بهدف واستوب وحجم لوت بنسبه مخاطرة لنفرض حجم لوت 1
    وكانت صفقة الشراء مفتوحة وظهرت لدينا صفقة بيع تقاطع فوق مستوى 80 مفروض بتاخذ نفس حجم لوت الصفقه مفتوحة حاليا بنفس ماجيك نمبر وهنا لدينا الحجم 1 ندخل بيع ايضا
    بمعنى يكون الدخول مره واحدة حسب نوع الصفقة شراء او بيع ولوت في اول صفقه يتم احتسابه بنسبة مئويه للمخاطرة لكن العقد التالي ولدينا صفقة مفتوحة بتاخذ حجم لوت الصفقة المفتوحة


    تستخدم نفس الداله ولكن نوع الصفقه
    كود:
    int TotalOrders(int type)
     {
     int cnt=0;
       for(int i =0;i<OrdersTotal();i++){
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
           if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()&&OrderType()==type){
             cnt++;
           }
         }
       }
        return(cnt);
      }
     
     
     
     
    (if  (TotalOrders(OP_BUY)<1
    open buy=====
     
    (if  (TotalOrders(OP_SELL)<1
    OPEN SEEL

  11. #6551
    الصورة الرمزية forex007
    forex007 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2015
    الإقامة
    مصر
    المشاركات
    206

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة اعصار ريتا مشاهدة المشاركة
    تستخدم نفس الداله ولكن نوع الصفقه
    كود:
    int TotalOrders(int type)
     {
     int cnt=0;
       for(int i =0;i<OrdersTotal();i++){
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
           if(OrderSymbol()==Symbol() && MagicNumber==OrderMagicNumber()&&OrderType()==type){
             cnt++;
           }
         }
       }
        return(cnt);
      }
     
     
     
     
    (if  (TotalOrders(OP_BUY)<1
    open buy=====
     
    (if  (TotalOrders(OP_SELL)<1
    OPEN SEEL
    جزاك الله خير اخي الحبيب
    كيف بجعل الصفقه الثانيه بتاخذ حجم لوت الصفقه الاولى المفتوحه ؟
    بمعنى لو دخلت العقد الاول بمخاطرة 1% وظهرت صفقه ثانية كيف تجعلها تدخل بنفس حجم لوت ؟
    مثل داخل دالة حساب حجم المخاطرة اذا كانت صفقة تحمل نفس ماجيك نمبر ومفتوحة حاليا تقوم باعادة حجم لوت المفتوح ..
    او تقوم باعادة حجم لوت المخاطرة اذا وضعت له 1 % والاستوب 25 اذا ضرب الاستوب تكون خسرت 1 %
    شكرا لك

  12. #6552
    الصورة الرمزية forex007
    forex007 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2015
    الإقامة
    مصر
    المشاركات
    206

    افتراضي

    سؤال اخر ماقبل الغداء
    في هذا المؤشر ماعرفت كيف اوصل للدخول مع السهم بمعنى مجرد اغلاق شمعه وظهر سهم بدخل
    لم استطيع الوصول للاسهم لانه غير موجود لهم خصائص !!!
    الملفات المرفقة الملفات المرفقة

  13. #6553
    الصورة الرمزية اعصار ريتا
    اعصار ريتا غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jan 2007
    الإقامة
    السعودية
    المشاركات
    438

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة forex007 مشاهدة المشاركة
    جزاك الله خير اخي الحبيب
    كيف بجعل الصفقه الثانيه بتاخذ حجم لوت الصفقه الاولى المفتوحه ؟
    بمعنى لو دخلت العقد الاول بمخاطرة 1% وظهرت صفقه ثانية كيف تجعلها تدخل بنفس حجم لوت ؟
    مثل داخل دالة حساب حجم المخاطرة اذا كانت صفقة تحمل نفس ماجيك نمبر ومفتوحة حاليا تقوم باعادة حجم لوت المفتوح ..
    او تقوم باعادة حجم لوت المخاطرة اذا وضعت له 1 % والاستوب 25 اذا ضرب الاستوب تكون خسرت 1 %
    شكرا لك
    تحتاج داله لحساب حجم اللوت بناء على الاستوب لوز
    كود:
     
     double LotManage(int stoploss)
      {
      
        double percent = (AccountBalance() *  RiskPercent) /100;
        double lot;
        if(MarketInfo(Symbol(),MODE_LOTSIZE)==100000)lot=(percent/stoploss)/10;
         if(MarketInfo(Symbol(),MODE_LOTSIZE)==10000)lot=(percent/stoploss)/1;
          if(MarketInfo(Symbol(),MODE_LOTSIZE)==1000)lot=(percent/stoploss)/0.1;
          if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT);
          if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
          
           
           return (lot);
      }  
    سيفتح الصفقه الاخرى بنفس الحجم بما انها لم تغلق بعد

    بامكانك معرفة حجم لوت الصفقه المفتوحه
    كود:
    double LastLot(){
    for(int i=OrdersTotal();i>=0;i--){
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
    return(OrderLots());
    
     }
    }
    return(0);
    }  
    آخر تعديل بواسطة اعصار ريتا ، 14-05-2015 الساعة 03:27 PM

  14. #6554
    الصورة الرمزية اعصار ريتا
    اعصار ريتا غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jan 2007
    الإقامة
    السعودية
    المشاركات
    438

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة forex007 مشاهدة المشاركة
    سؤال اخر ماقبل الغداء
    في هذا المؤشر ماعرفت كيف اوصل للدخول مع السهم بمعنى مجرد اغلاق شمعه وظهر سهم بدخل
    لم استطيع الوصول للاسهم لانه غير موجود لهم خصائص !!!
    السهم يظهر عند تقاطع المؤشرين بالاسفل

    كود:
    double buy=iCustom(NULL,0,"Amjadepp_OPEN",0,1);  
        double sell=iCustom(NULL,0,"Amjadepp_OPEN",1,1); 
         double buy1=iCustom(NULL,0,"Amjadepp_OPEN",0,2);  
        double sell1=iCustom(NULL,0,"Amjadepp_OPEN",1,2);


    ثم في شروط البيع والشراء

    كود:
     if (buy>sell &&buy1<sell1)===open buy
        if (sell>buy&&sell1<buy1)===open sell

  15. #6555
    الصورة الرمزية forex007
    forex007 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2015
    الإقامة
    مصر
    المشاركات
    206

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة اعصار ريتا مشاهدة المشاركة
    تحتاج داله لحساب حجم اللوت بناء على الاستوب لوز
    كود:
     
     double LotManage(int stoploss)
      {
      
        double percent = (AccountBalance() *  RiskPercent) /100;
        double lot;
        if(MarketInfo(Symbol(),MODE_LOTSIZE)==100000)lot=(percent/stoploss)/10;
         if(MarketInfo(Symbol(),MODE_LOTSIZE)==10000)lot=(percent/stoploss)/1;
          if(MarketInfo(Symbol(),MODE_LOTSIZE)==1000)lot=(percent/stoploss)/0.1;
          if(lot<MarketInfo(Symbol(),MODE_MINLOT))lot=MarketInfo(Symbol(),MODE_MINLOT);
          if(lot>MarketInfo(Symbol(),MODE_MAXLOT))lot=MarketInfo(Symbol(),MODE_MAXLOT);
          
           
           return (lot);
      }  
    سيفتح الصفقه الاخرى بنفس الحجم بما انها لم تغلق بعد

    بامكانك معرفة حجم لوت الصفقه المفتوحه
    كود:
    double LastLot(){
    for(int i=OrdersTotal();i>=0;i--){
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
    if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
    return(OrderLots());
    
     }
    }
    return(0);
    }  
    اقتباس المشاركة الأصلية كتبت بواسطة اعصار ريتا مشاهدة المشاركة
    السهم يظهر عند تقاطع المؤشرين بالاسفل

    كود:
    double buy=iCustom(NULL,0,"Amjadepp_OPEN",0,1);  
        double sell=iCustom(NULL,0,"Amjadepp_OPEN",1,1); 
         double buy1=iCustom(NULL,0,"Amjadepp_OPEN",0,2);  
        double sell1=iCustom(NULL,0,"Amjadepp_OPEN",1,2);


    ثم في شروط البيع والشراء

    كود:
     if (buy>sell &&buy1<sell1)===open buy
        if (sell>buy&&sell1<buy1)===open sell
    جزاك الله خير اخي اعصار
    بارك الله فيك
    جاري التجربة

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

  1. موضوع مخصص للاكسبيرتات اللتي يستخدمها الاعضاء على الحقيقي,,عندك اكسبيرت ممتاز ضعه هنا
    By محمد معمو in forum برمجة المؤشرات واكسبرتات التداول - Experts Advisor EA
    مشاركات: 11
    آخر مشاركة: 15-12-2023, 02:03 PM
  2. عااااااااااااجل ( موضوع مخصص للفرص الفورية)!!!
    By عاشق الذبذبـة in forum توقعات وتوصيات سوق العملات
    مشاركات: 280
    آخر مشاركة: 27-08-2009, 10:30 PM

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


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