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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة crownpearl77 مشاهدة المشاركة
    معذرة يا استاذنا يبدو انني اسأت الشرح لما اريد
    نتحدث بالتفصيل:-
    for(int j2=0;j2<60;j2++)
    {
    datetime dt2 = iTime(NULL,1,60);

    double O1h21 = iOpen(NULL,1,iBarShift(NULL,1,dt2)-j2);
    double H1h21 = iHigh(NULL,1,iBarShift(NULL,1,dt2)-j2);
    double L1h21 = iLow(NULL,1,iBarShift(NULL,1,dt2)-j2);
    if (mLh21>L1h21) mLh21 = L1h21;
    if (mHh21<H1h21) mHh21 = H1h21;
    }
    double C1h21 = iClose(NULL,1,iBarShift(NULL,1,dt2)-j2)
    اولا معذرة فقد اخطأت وكتبت i وهي في الحقيقة j2
    هذا الجزء المطلوب منه حساب اعلي هاي و اقل لوو لفترة 60 دقيقة سابقة و معها السعر الحالي عن طريق i close
    يتم تجديد الحسابات كل تك عن طريق تغير i close و تجديد اعلي سعر و اقل سعر كل دقيقة عن طريق اجراء الحسابات علي اخر 60 دقيقة فقط
    - هذه القيم يتم دخالها في معادلات بعدها لرسم 3 خطوط حمراء في الشاشة تتحرك باستمرار كلما تحرك السعر
    هناك مشكلتين هنا
    الاولي انني لا بد ان اخرج من الفريم الذي انظر اليه ليجدد المؤشر حساباته
    الثانية اثناء الباك تست يقوم بالحساب لفترة ساعة واحدة فقط بمعني انني اذا اردت عمل باك تست ليوم سابق فان المؤشر يقوم بحساب اول ساعة في اليوم فقط ثم لا يعطي اي اسهم ولذلك اضفت انا السطر k في محاولة لاطالة عمره 3 ساعات اضافية
    المطلوب هنا ان يجدد المؤشر حساباته تلقائياوان يقوم بعمل باك تست لفترة طويلة وليست ساعة واحدة
    --------------------------------------------------------------------
    نقطة اخري وهي تتعلق بالسهم الذي اضفته حضرتك للمؤشر
    قلنا اننا نحسب اعلي هاي واقل لوو ل 60 دقيقة سابقة لاجراء حسابات عليها
    مطلوب ايضا ان يقوم البرنامج بعد ظهور السهم بتحديد اعلي نقطة وصل اليها السعر و اقل نقطة بعد ظهور السهم لاجراء حسابات اخري عليهم
    ( ممكن تكون اعلي نقطة وصل اليها السعر اقل من اعلي نقطة في ال 60 دقيقة السابقة لذلك يجب ان يحتفظ باعلي نقطة بعد ظهور السهم في متغير منفصل )
    ----------------------------------------------------------------------
    تفضل المؤشر في المرفقات
    بالنسبه للجزء الأول وهو إستخدام الحلقات لإستخراج أعلى هاي وأقل لو فلست بحاجه إلى إستخدامه فأنت فقط ستزيد تعقيد الكود فالأسهل لك هو إستخدام الداله iHighest و iLowest مباشرة
    كود PHP:
     double mHh21=High[iHighest(Symbol(),1,MODE_HIGH,60,0)];
                      
    double mLh21=Low[iLowest(Symbol(),1,MODE_LOW,60,0)]; 
    لحساب أعلى هاي وأقل لو لآخر 60 شمعه أو 60 دقيقه كما ذكرت بما أننا سنستخدم فريم 1 دقيقه

    الجزء الآخر وهو حساب أعلى هاي وأقل لو بعد ظهور السهم
    فيمكنك تعريف متغير DateTime بحيث عندما يظهر السهم يأخذ هذا المتغير قيمة توقيت الشمعه التي ظهر بها السهم
    كود PHP:
    SellArrow=Time[0]; 
    الآن بعد أن عرفت شمعة ظهور السهم بنفس الطريقه تستطيع حساب أعلى هاي وأقل لو من بداية شمعة ظهور السهم حتى الشمعه الحاليه
    كود PHP:
     if(SellArrow!=0){
                     
    double HHigh=High[iHighest(Symbol(),1,MODE_HIGH,BarH,0)];
                      
    Level("HUp"HHigh+Up*Point*Q,Green,day_Line_Width);
                      
    Level("HDn"HHigh+Down*Point*Q,Green,day_Line_Width);
                      }
                     if(
    BuyArrow!=0){
                     
    double LLow=Low[iLowest(Symbol(),1,MODE_LOW,BarL,0)]; 
                      
    Level("LUp"LLow+Up*Point*Q,Green,day_Line_Width);
                      
    Level("LDn"LLow+Down*Point*Q,Green,day_Line_Width);
                      } 
    المؤشر في المرفقات
    بالنسبه للإكسبرت فسوف نحتاج إلى عمله في إكسبرت مستقل وليس أن نضع أوامر الدخول والخروج في نفس المؤشر
    الملفات المرفقة الملفات المرفقة
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  2. #17
    الصورة الرمزية crownpearl77
    crownpearl77 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jul 2009
    الإقامة
    مصر
    المشاركات
    6,986

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    تفضل المؤشر في المرفقات
    بالنسبه للجزء الأول وهو إستخدام الحلقات لإستخراج أعلى هاي وأقل لو فلست بحاجه إلى إستخدامه فأنت فقط ستزيد تعقيد الكود فالأسهل لك هو إستخدام الداله iHighest و iLowest مباشرة
    كود PHP:
     double mHh21=High[iHighest(Symbol(),1,MODE_HIGH,60,0)];
    double mLh21=Low[iLowest(Symbol(),1,MODE_LOW,60,0)]; 
    لحساب أعلى هاي وأقل لو لآخر 60 شمعه أو 60 دقيقه كما ذكرت بما أننا سنستخدم فريم 1 دقيقه

    الجزء الآخر وهو حساب أعلى هاي وأقل لو بعد ظهور السهم
    فيمكنك تعريف متغير DateTime بحيث عندما يظهر السهم يأخذ هذا المتغير قيمة توقيت الشمعه التي ظهر بها السهم
    كود PHP:
    SellArrow=Time[0]; 
    الآن بعد أن عرفت شمعة ظهور السهم بنفس الطريقه تستطيع حساب أعلى هاي وأقل لو من بداية شمعة ظهور السهم حتى الشمعه الحاليه
    كود PHP:
     if(SellArrow!=0){
    double HHigh=High[iHighest(Symbol(),1,MODE_HIGH,BarH,0)];
    Level("HUp"HHigh+Up*Point*Q,Green,day_Line_Width);
    Level("HDn"HHigh+Down*Point*Q,Green,day_Line_Width);
    }
    if(
    BuyArrow!=0){
    double LLow=Low[iLowest(Symbol(),1,MODE_LOW,BarL,0)]; 
    Level("LUp"LLow+Up*Point*Q,Green,day_Line_Width);
    Level("LDn"LLow+Down*Point*Q,Green,day_Line_Width);

    المؤشر في المرفقات
    بالنسبه للإكسبرت فسوف نحتاج إلى عمله في إكسبرت مستقل وليس أن نضع أوامر الدخول والخروج في نفس المؤشر
    الف الف مليون شكرا لك يا استاذنا علي التعديل بارك الله فيك وجعله الله في ميزان حسناتك
    انا الان اجرب المؤشر بعد التعديل ولكن عندي سؤال
    ما هو الفرق بين ما تفضلت حضرتك بالغاءه من برمجتي وهو الاتي
    for(int k=0;k<100;k++)
    for(int j2=0;j2<60;j2++)
    {
    datetime dt2 = iTime(NULL,1,60);

    double O1h21 = iOpen(NULL,1,iBarShift(NULL,1,dt2)-j2);
    double mHh21 = iHighest(NULL,1,iBarShift(NULL,1,dt2)-j2);
    double mLh21 = iLowest(NULL,1,iBarShift(NULL,1,dt2)-j2);
    if (mLh21>L1h21) mLh21 = L1h21;
    if (mHh21<H1h21) mHh21 = H1h21;
    وبين السطرين الذين تفضلت حضرتك باضافتهم و هم
    double mHh21=High[iHighest(Symbol(),1,MODE_HIGH,60,0)];
    double mLh21=Low[iLowest(Symbol(),1,MODE_LOW,60,0)];
    لان هذا التعديل هو فعلا رائع واعطي دقة اعلي في الباك تست بالنسبة لرسم الاسهم كاشارات بيع و شراء ولكنه سيهدم استراتيجيتي بالكامل في اسلوب تحديد الهدف
    اريد ان افهم الفرق بعد اذن حضرتك حتي استطيع ان اوضح لك اين المشكلة لكي يمكن الوصول الي حل يجمع بين الميزتين
    والف الف شكر مقدما يا استاذنا
    توقيع العضو
    الاستراتيجية الموجوزمنية في التداول

  3. #18
    الصورة الرمزية crownpearl77
    crownpearl77 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jul 2009
    الإقامة
    مصر
    المشاركات
    6,986

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    تفضل المؤشر في المرفقات
    بالنسبه للجزء الأول وهو إستخدام الحلقات لإستخراج أعلى هاي وأقل لو فلست بحاجه إلى إستخدامه فأنت فقط ستزيد تعقيد الكود فالأسهل لك هو إستخدام الداله iHighest و iLowest مباشرة
    كود PHP:
     double mHh21=High[iHighest(Symbol(),1,MODE_HIGH,60,0)];
    double mLh21=Low[iLowest(Symbol(),1,MODE_LOW,60,0)]; 
    لحساب أعلى هاي وأقل لو لآخر 60 شمعه أو 60 دقيقه كما ذكرت بما أننا سنستخدم فريم 1 دقيقه

    الجزء الآخر وهو حساب أعلى هاي وأقل لو بعد ظهور السهم
    فيمكنك تعريف متغير DateTime بحيث عندما يظهر السهم يأخذ هذا المتغير قيمة توقيت الشمعه التي ظهر بها السهم
    كود PHP:
    SellArrow=Time[0]; 
    الآن بعد أن عرفت شمعة ظهور السهم بنفس الطريقه تستطيع حساب أعلى هاي وأقل لو من بداية شمعة ظهور السهم حتى الشمعه الحاليه
    كود PHP:
     if(SellArrow!=0){
    double HHigh=High[iHighest(Symbol(),1,MODE_HIGH,BarH,0)];
    Level("HUp"HHigh+Up*Point*Q,Green,day_Line_Width);
    Level("HDn"HHigh+Down*Point*Q,Green,day_Line_Width);
    }
    if(
    BuyArrow!=0){
    double LLow=Low[iLowest(Symbol(),1,MODE_LOW,BarL,0)]; 
    Level("LUp"LLow+Up*Point*Q,Green,day_Line_Width);
    Level("LDn"LLow+Down*Point*Q,Green,day_Line_Width);

    المؤشر في المرفقات
    بالنسبه للإكسبرت فسوف نحتاج إلى عمله في إكسبرت مستقل وليس أن نضع أوامر الدخول والخروج في نفس المؤشر
    لا اعرف ان كان كلامي مضبوط ام لا
    ولكن الجزء المعلم بالحمر اعتقد ان البرنامج يحسب اعلي نقطة و اقل نقطة بعد ظهور السهم ولكن اعتقد ان المشكلة هي انه يستخدمها داخل البرنامج بالكامل
    انا اريد اعلي نقطة و اقل نقطة خلال 60 دقيقة كشئ لوحده يدخل في البرنامج اما اعلي نقطة بعد تكون السهم فغرضها رسم الخطين الموضحين في هذا الامر
    Level("HUp", HHigh-Up*Point*Q,Green,day_Line_Width);
    Level("HDn", HHigh-Down*Point*Q,Green,day_Line_Width);
    }
    if(BuyArrow!=0){
    double LLow=Low[iLowest(Symbol(),1,MODE_LOW,BarL,0)];
    Level("LUp", LLow+Up*Point*Q,Green,day_Line_Width);
    Level("LDn", LLow+Down*Point*Q,Green,day_Line_Width);
    }
    وشكرا لك علي مجهودك في تعليمنا
    توقيع العضو
    الاستراتيجية الموجوزمنية في التداول

  4. #19
    الصورة الرمزية crownpearl77
    crownpearl77 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jul 2009
    الإقامة
    مصر
    المشاركات
    6,986

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة crownpearl77 مشاهدة المشاركة
    لا اعرف ان كان كلامي مضبوط ام لا
    ولكن الجزء المعلم بالحمر اعتقد ان البرنامج يحسب اعلي نقطة و اقل نقطة بعد ظهور السهم ولكن اعتقد ان المشكلة هي انه يستخدمها داخل البرنامج بالكامل
    انا اريد اعلي نقطة و اقل نقطة خلال 60 دقيقة كشئ لوحده يدخل في البرنامج اما اعلي نقطة بعد تكون السهم فغرضها رسم الخطين الموضحين في هذا الامر
    Level("HUp", HHigh-Up*Point*Q,Green,day_Line_Width);
    Level("HDn", HHigh-Down*Point*Q,Green,day_Line_Width);
    }
    if(BuyArrow!=0){
    double LLow=Low[iLowest(Symbol(),1,MODE_LOW,BarL,0)];
    Level("LUp", LLow+Up*Point*Q,Green,day_Line_Width);
    Level("LDn", LLow+Down*Point*Q,Green,day_Line_Width);
    }
    وشكرا لك علي مجهودك في تعليمنا
    اعتذر عن هذه المشاركة فانا لم انتبه الي شرحك
    الهاي لل 60 دقيقة غير الهاي بعد السهم اعتذر عن اللبس
    لكن الاهم الان ما الفرق بين اسلوب الحلقات الذي كتبته انا وبين الاوامر التي استبدلتها حضرتك
    لانها افقدتني واحدة من اهم مميزات الاستراتيجية
    فهل ممكن العودة مرة اخري للحلقات
    او تعلمني حضرتك ما الفرق حتي اصل الي المشكلة واعرضها علي حضرتك مرة اخري
    تحياتي لاستاذنا
    توقيع العضو
    الاستراتيجية الموجوزمنية في التداول

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

    افتراضي

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

  6. #21
    الصورة الرمزية crownpearl77
    crownpearl77 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jul 2009
    الإقامة
    مصر
    المشاركات
    6,986

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    الفرق فقط أننا عندما نحاول كتابة أي كود سواء عمل إكسبرت أو مؤشر نبحث عن أسهل وأبسط الطرق حتى لا تستهلك جزء كبيرة من الذاكره
    بالنسبه لطريقتك فهي صحيحه لكن لماذا أستخدم الحلقات بحيث يظل يقارن بين كل شمعه والسابقه لها خلال 60 شمعة حتى يبحث عن أعلى وأقل شمعه في حين أنه يوجد داله مباشرة تمكنني من إستخراج أعلى هاي وأقل لو خلال الفتره التي أريد تحديدها مباشره
    وإذا أردت يمكنك إلغاء هذا الجزء وإستخدام الحلقات لن تختلف النتيجه
    لا اعرف استاذنا حضرتك تقول انه لا يوجد فرق و لكن في المؤشر تغيرت تماما القيم التي تذهب الي up , down
    مما اثر علي الاستراتيجية بالكامل
    رجاء استاذنا اعادة الحلقات مرة اخري مع الاحتفاظ بجميع التعديلات الاخري كما هي ( و منها اجراء الباك تست لفترة طويلة )
    رجاء لحضرتك تجربه باك تست ليوم سابق فقط علي الاقل
    ثانيا حضرتك قلت لا يمكن عمل اكسبرت علي نفس المؤشر.... ممكن حضرتك تشرح لي لماذا لا يمكن
    والف شكر استاذنا علي مساعدتك
    توقيع العضو
    الاستراتيجية الموجوزمنية في التداول

  7. #22
    الصورة الرمزية crownpearl77
    crownpearl77 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jul 2009
    الإقامة
    مصر
    المشاركات
    6,986

    افتراضي

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

  8. #23
    الصورة الرمزية miko
    miko غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Nov 2011
    الإقامة
    السعوديه
    المشاركات
    10

    افتراضي

    يااخوانا ماتفهمونا معاكم في هذا المجال الكبيره

  9. #24
    الصورة الرمزية crownpearl77
    crownpearl77 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jul 2009
    الإقامة
    مصر
    المشاركات
    6,986

    افتراضي

    Level("HUp", HHigh+Up*Point*Q,Red,day_Line_Width);
    Level("HDn", HHigh+Down*Point*Q,Red,day_Line_Width);
    استاذي العزيز
    هذا الامر الذي اضفته حضرتك هو المسئول عن رسم الهدف الاول و الثاني بعد ظهور السهم
    وهو يحدد عدد نقاط معين من سعر ظهور السهم و حتي الهدف عند احد الخطين
    اريد بعد اذنك الا يتكرر السهم الا بعد ان ينعكس السعر عن نقطة ظهور اول سهم بالمقدار الموضح في المعادلة التي تحدد الهدف
    بمعني ظهر السهم عند 3400 مثلا
    الهدف شراء و طبقا للمعادلة الاتية
    Level("HUp", HHigh+Up*Point*Q,Red,day_Line_Width); يكون الهدف 40 نقطة مثلا اي 3440 مثلا
    اريد الا يظهر السهم الثاني الا بعد انعكاس السعر بمقدار الهدف اي 40 نقطة
    يعني لا يظهر السهم الثاني الا عند 3360
    ولا يظهر الثالث الا عند 3320 و هكذا لانها ستكون نقاط تعزيز
    و الف شكر لك استاذنا
    توقيع العضو
    الاستراتيجية الموجوزمنية في التداول

  10. #25
    الصورة الرمزية crownpearl77
    crownpearl77 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Jul 2009
    الإقامة
    مصر
    المشاركات
    6,986

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة crownpearl77 مشاهدة المشاركة
    Level("HUp", HHigh+Up*Point*Q,Red,day_Line_Width);
    Level("HDn", HHigh+Down*Point*Q,Red,day_Line_Width);
    استاذي العزيز
    هذا الامر الذي اضفته حضرتك هو المسئول عن رسم الهدف الاول و الثاني بعد ظهور السهم
    وهو يحدد عدد نقاط معين من سعر ظهور السهم و حتي الهدف عند احد الخطين
    اريد بعد اذنك الا يتكرر السهم الا بعد ان ينعكس السعر عن نقطة ظهور اول سهم بالمقدار الموضح في المعادلة التي تحدد الهدف
    بمعني ظهر السهم عند 3400 مثلا
    الهدف شراء و طبقا للمعادلة الاتية
    Level("HUp", HHigh+Up*Point*Q,Red,day_Line_Width); يكون الهدف 40 نقطة مثلا اي 3440 مثلا
    اريد الا يظهر السهم الثاني الا بعد انعكاس السعر بمقدار الهدف اي 40 نقطة
    يعني لا يظهر السهم الثاني الا عند 3360
    ولا يظهر الثالث الا عند 3320 و هكذا لانها ستكون نقاط تعزيز
    و الف شكر لك استاذنا
    في حالة ظهور السهم الثاني يتم الغاء الاوامر في اعلي الاقتباس و يرسم مكانها خط واحد في منتصف المسافة بين دخول السهم الاول و دخول السهم الثاني
    و في حالة ظهور السهم الثالث يرسم الخط في منتصف المسافة بين السهم الاول و السهم الثالث و هكذا
    توقيع العضو
    الاستراتيجية الموجوزمنية في التداول

  11. #26
    الصورة الرمزية حسن الهلالي
    حسن الهلالي غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Nov 2010
    الإقامة
    مصر
    المشاركات
    935

    افتراضي

    السلام عليكم

    جزاكم الله خيرا اخواني الكرام على المجهود الكبير

    جربت المؤشر المرفق في هذه المشاركة

    https://forum.arabictrader.com/t134746.html#post2264878

    جربته على الباك تست ، لا يعطي اي شئ، وكانه غير موجوده، هل هناك اي خطوات مطلوبة ؟

صفحة 2 من 2 الأولىالأولى 12

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