سؤال للمبرمجين والفائدة للجميع
النتائج 1 إلى 8 من 8
  1. #1
    تاريخ التسجيل
    Apr 2011
    المشاركات
    24

    افتراضي سؤال للمبرمجين والفائدة للجميع

    السلام عليكم يا اخوان...
    هل توجد امكانية برمجة الاكسبيرتات للعمل بالطريقة الاتية:
    اذا قام الاكسبيرت بعمل صفقة بيع, تكون الصفقة التي تليها شراء والتي بعدها بيع وهكذا..
    بحيث ان الاكسبيرت يقوم بعملية الشراء عند اكتمال شروط الدخول للشراء وعدم الدخول بصفقة شراء اخرى في نفس الشروط التي دخل عليها مسبقا..

    لان الخلل في هذه الطريقى ان الشروط تصلح ل10 نقاط ولكن في حال اغلاق الصفقة, تفتح نفس الصفقة من جديد بسبب اكتمال نفس الشروط السابقة, في حين ان الشروط ستتغير الى بيع بعد وقت قليل...

    او هل بالامكان عمل مؤقت بين اغلاق الصفقة وفتح اخرى؟؟؟

    ارجو من الاخوة المبرمجين التكرم بافادتنا ولكم جزيل الشكر...

  2. #2
    تاريخ التسجيل
    Mar 2007
    الإقامة
    سيول - كوريا الجنوبية
    المشاركات
    631

    افتراضي

    الحل أن تختبر آخر صفقة مغلقة في الـHistory، فإن كانت شراءً مثلاً وأغلقت على ربح (أو خسارة لو أن هذه طريقتك) فلا تفتح صفقة جديدة من نفس النوع

    يعني:
    قبل فتح أي صفقة، تتأكد من:
    ١. تحقق الشروط
    ٢. عدم وجود صفقة مفتوحة من نفس الاتجاه
    ٣. أن تكون آخر صفقة مغلقة من الاتجاه الآخر

    ولو تريد الكود فأخبرني

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

    افتراضي

    الاخ العزيز

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

  4. #4
    تاريخ التسجيل
    Apr 2011
    المشاركات
    24

    افتراضي

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

  5. #5
    تاريخ التسجيل
    Mar 2009
    الإقامة
    القاهرة
    المشاركات
    401

    افتراضي

    OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
    if((OrderType()==OP_SELL)){

    OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
    if((OrderType()==OP_BUY)){

    هاتحط الكود ده الاول اما تتوافر شروط الامر الشراء

    والثانى للبيع
    اتمنى يكون واضح

  6. #6
    تاريخ التسجيل
    Apr 2011
    المشاركات
    24

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة wise_investor23 مشاهدة المشاركة
    OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
    if((OrderType()==OP_SELL)){

    OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
    if((OrderType()==OP_BUY)){

    هاتحط الكود ده الاول اما تتوافر شروط الامر الشراء

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

  7. #7
    تاريخ التسجيل
    Mar 2009
    الإقامة
    القاهرة
    المشاركات
    401

    افتراضي

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


    غير الكود عشان يبقى كده


    OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
    if((OrderType()==OP_SELL)&&(OrderSymbol()== OrderSymbol())){

    OrderSelect(OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY);
    if((OrderType()==OP_BUY)&&(OrderSymbol()== OrderSymbol())){


  8. #8
    تاريخ التسجيل
    Apr 2011
    المشاركات
    24

    افتراضي

    تشكر ياغالي
    عزيزي وايز بخصوص خاصية الموني مانجمنت... الكود الوحيد اللي حصلته بالنت هو هذا
    //-- external input
    extern double LotPercent = 2.0 // mean 2.0%

    //-- pass variable
    double LotSize;

    void LotsCalc() {
    if(MarketInfo(Symbol(),MODE_MINLOT) == 0.1) int LotsDigit = 1;
    else if(MarketInfo(Symbol(),MODE_MINLOT) == 0.01) LotsDigit = 2;
    double MinLots = NormalizeDouble(MarketInfo(Symbol(),MODE_MINLOT),L otsDigit);
    double MaxLots = NormalizeDouble(MarketInfo(Symbol(),MODE_MAXLOT),L otsDigit);
    double AcFrMar = NormalizeDouble(AccountFreeMargin(),2);

    LotSize = (AcFrMar*(LotsPercent/100))/1000;

    if(LotSize > MaxLots) LotSize = MaxLots;
    if(LotSize < MinLots) LotSize = MinLots;
    }
    هل هو الكود الصحيح؟؟
    وبخصوص تعديلك الاخير على الاكسبيرت, اذا كان بيفتح الصفقات بناء على اللي قبلها, كيف بيفتح اول صفقه بناء على ماذا؟؟

    اشكرك عزيزي عسى الله لايحرمنا من خبرتك بهذا المجال