صفحة 170 من 689 الأولىالأولى ... 70120160164165166167168169170171172173174175176180220270670 ... الأخيرةالأخيرة
النتائج 2,536 إلى 2,550 من 10335
  1. #2536
    الصورة الرمزية ahmedessam58
    ahmedessam58 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2008
    الإقامة
    مصر
    المشاركات
    493

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    كود PHP:
    (Tenkan-Open[0]<100*Point
    هذا بالنسبه للبيع لكن في الشراء سيكون العكس لأن سعر إفتتاح الشمعه سيكون أكبر من التنكن
    كود PHP:
    (Open[0]-Tenkan<100*Point
    متشكر جدا واعذرنى لعدم التوفيق فى الكود وعدم تجربته ايضا ولكن للأسف انا محبط لأن كل محاولاتى مع اكسبيرت الايشيموكو تنجح برمجيا ولا تنجح ماديا والاكسبيرت يخسر او يكسب القليل جدا وما زادنى هذا الا حيرة وانا اعمل بنصيحتك واتعلم ولكن لضيق الوقت تركت التداول نهائيا واركز على الاكسبيرت والباك تيست وجزاك الله خيرا

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

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    مستر دولار عفوا للأزعاج ارفقت لك صورة يمكن توضح هدفي اذا الشرح مش واضح ، في متغير بيحمل رقم 3333 ودا يعتبر ماجيك لأكسبيرت معين وبيتكرر عدة مرات في اماكن مختلفة داخل الأكسبيرت
    فأنا اقدر اعدله يدوي لكن الموضوع متعب وممكن تفوت مني وحدة من المرات المتعددة ، فأضفت الماجيك الذي هو 215315 ، وعايزه يحتل كل الأماكن المكتوب فيها OrderId27 مثلا ، ياريت تشوف الصورة والخطاء اللي بيحصل لما بعمل كوميلر ، على فكرة لو حطيت الجملة دي تحت قسم int او قسم Start مابيعطي رسالة خطاء في الكومبيلر لكن مابيحصل التغيير الذي اهدف اليه ، ولو حطيته
    في الجزء الأول من الأكسبيرت بيعطي رسالة الخطاء ، شكرا لتعاونك .
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة 1111111111111111.png‏  

  3. #2538
    الصورة الرمزية spiders101
    spiders101 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2011
    الإقامة
    مصــر
    المشاركات
    935

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    الخطأ لديك في في نوع الأمر فيجب أن تحدد إذا كان سعر الدخول للأوامر المعلقه أقل من السعر الحالي فسوف يكون الأمر OP_SELLSTOP وليس ليميت وأيضا بالنسبه للشراء إذا كان سعر وضع الأمر المعلق أكبر من السعر الحالي فسوف يكون باي ستوب وليس ليميت
    تم التعديل ولى سؤال لماذا ظهر خطـأ OrderSend error 130 من قبل مع وجود او عدم وجود تارجت واستوب ولماذا فتح صفقات بيع وشراء (ليست معلقة) قبل التعديل ، المفترض لن يفتح اى صفقات طالمـا كان الخطـأ فـ نوع الأمر المعلق !!

    وفـ حالة أمر أوردر سيند الخاص بالأوامر المعلقة هل يجب وضع كود المقارنة الخاص بالتارجت والاستوب قبل كل أمر
    كود PHP:
    if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;} 

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    يمكنك إضافة أي نوع مضاعفات إذا عرفت المعادله الرياضيه التي تعتمد عليها
    بالنسبه لمضاعفات فيبوناتشي فهي تعتمد على مجموع حجم لوت آخر صفقتين مفتوحه
    في هذه الحاله أنا أقوم بعمل داله لحساب حجم اللوت الجديد
    مثال
    كود PHP:
    double fibo_lots()
     {
     
    double newlot;
      for(
    int i=OrdersTotal();i>=0;i--){
       
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
        
    newlot+=OrderLots();
        
    N++;
        if(
    N==2)return(newlot);
        }
       }
      return(
    newlot);
     }
       for(
    int i=0;i<=NumOF_Additional_LIMITSTOPLots;i++){  

    if(
    OpenPrice(OP_BUY)!=&&orderstotal2(OP_BUYLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){  
    double lot=fibo_lots();
    OrderSend(Symbol(),OP_BUYLIMIT,lot,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue); 


    بالنسبه للإكسبرت
    طريقة كتابتك للكود خاطئة فلا يمكن إستخدام عملية العطف || بهذا الطريقه لكن يجب تفصيلها
    كود PHP:
    if(Ask==buysl||Bid==buys1||Ask==SeLLsl||Bid==SeLLsl){CloseOrders();} 
    أيضا سؤال هل تريد إغلاق الصفقه على سعر إغلاق الشمعه السابقه أم على سعر إغلاق الشمعه السابقه للشمعه التي تم فتح الصفقه فيها بحيث لن تتغير حتى لو بعد مرور 10 شمعات ولم تغلق الصفقه بعد
    نعم أريد إغلاق الصفقه على سعر إغلاق الشمعه السابقه للشمعه التي تم فتح الصفقه فيها بحيث لن تتغير حتى لو بعد مرور 10 شمعات ولم تغلق الصفقه بعد وقمت بتعديل الكود الخاص بالعطف .

    بالنسبة لإضافة مضاعفات فيبوناتشي قمت بعمل دالة لحساب حجم اللوت الجديد خارج ستارت
    كود PHP:
    double fibo_lots()
     {
     
    double newlot;
     
    int N;
      for(
    int i=OrdersTotal();i>=0;i--){
       
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
        
    newlot+=OrderLots();
        
    N++;
        if(
    N==2)return(newlot);
        }
        }
      return(
    newlot);
      } 
    ووضعت الكود الخاص بالدالة داخل ستارت
    كود PHP:
    int i,j;
    for(
    i=0,j=1;i<NumOF_Additional_LIMITSTOPLots;i++,j+=j){
    double lot=fibo_lots();

    if(
    OpenPrice(OP_BUY)!=&&orderstotal2(OP_BUYLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){
    OrderSend(Symbol(),OP_BUYLIMIT,lot*j,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}

    if(
    OpenPrice(OP_SELL)!=&&orderstotal2(OP_SELLLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){
    OrderSend(Symbol(),OP_SELLLIMIT,lot*j,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}

    ولكن المضاعفات يتم فتحها كالتالى 1 ، 2 ، 12 ، 112 ، 1984

    وليست مضاعفات فيبوناتشي .

    ولى سؤال بخصوص الدالة fibo_lots

    لماذا تم وضع الأمر return مرتين ، وفـ حالة الشرط
    كود PHP:
    if(N==2
    - لماذا تم وضع الشرط N==2 !!

    - عند بداية العد ستصبح قيمة N =0 ثم بعد ذلك 1 ثم 2 ويتحقق شرط if

    بعد ان تصبح قيمة N تساوى 3 ، 4 ، 5 ، ... لن يتحقق شرط if

    فـ هذه الحالة ماذا ستكون القيمة الـتى يعود بها الأمر return
    الملفات المرفقة الملفات المرفقة
    آخر تعديل بواسطة spiders101 ، 31-07-2012 الساعة 10:30 AM

  4. #2539
    الصورة الرمزية xcv114
    xcv114 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Oct 2010
    الإقامة
    مصر
    المشاركات
    1,022

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة Jmeel مشاهدة المشاركة
    مستر دولار عفوا للأزعاج ارفقت لك صورة يمكن توضح هدفي اذا الشرح مش واضح ، في متغير بيحمل رقم 3333 ودا يعتبر ماجيك لأكسبيرت معين وبيتكرر عدة مرات في اماكن مختلفة داخل الأكسبيرت
    فأنا اقدر اعدله يدوي لكن الموضوع متعب وممكن تفوت مني وحدة من المرات المتعددة ، فأضفت الماجيك الذي هو 215315 ، وعايزه يحتل كل الأماكن المكتوب فيها OrderId27 مثلا ، ياريت تشوف الصورة والخطاء اللي بيحصل لما بعمل كوميلر ، على فكرة لو حطيت الجملة دي تحت قسم int او قسم Start مابيعطي رسالة خطاء في الكومبيلر لكن مابيحصل التغيير الذي اهدف اليه ، ولو حطيته
    في الجزء الأول من الأكسبيرت بيعطي رسالة الخطاء ، شكرا لتعاونك .
    أعتقد يا أخ جميل إن ما ينفعش تساوي رقمين ببعض
    لإنك كده كإنك بتقول
    3333=215315 وده مستحيل

    بس إنتظر رأي أستاذ أسامة
    -----------------------------

    بس في ملحوظة :
    إنت بدل ما تبحث عن OrderId27 بعينك
    ممكن تضغط ctrl+f هيفتح لك نافذة بحث تكتب فيها OrderId27 وتضغط Next وكل ما تلاقي المتغير تغيره بمتغير الماجيك نمبر
    حتى تصل إن البحث لا يجد المتغير OrderId27 في الإكسبيرت

  5. #2540
    الصورة الرمزية xcv114
    xcv114 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Oct 2010
    الإقامة
    مصر
    المشاركات
    1,022

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة spiders101 مشاهدة المشاركة
    تم التعديل ولى سؤال لماذا ظهر خطـأ OrderSend error 130 من قبل مع وجود او عدم وجود تارجت واستوب ولماذا فتح صفقات بيع وشراء (ليست معلقة) قبل التعديل ، المفترض لن يفتح اى صفقات طالمـا كان الخطـأ فـ نوع الأمر المعلق !!

    وفـ حالة أمر أوردر سيند الخاص بالأوامر المعلقة هل يجب وضع كود المقارنة الخاص بالتارجت والاستوب قبل كل أمر
    كود PHP:
    if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;} 



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

    بالنسبة لإضافة مضاعفات فيبوناتشي قمت بعمل دالة لحساب حجم اللوت الجديد خارج ستارت
    كود PHP:
    double fibo_lots()
     {
     
    double newlot;
     
    int N;
      for(
    int i=OrdersTotal();i>=0;i--){
       
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
        
    newlot+=OrderLots();
        
    N++;
        if(
    N==2)return(newlot);
        }
        }
      return(
    newlot);
      } 
    ووضعت الكود الخاص بالدالة داخل ستارت
    كود PHP:
    int i,j;
    for(
    i=0,j=1;i<NumOF_Additional_LIMITSTOPLots;i++,j+=j){
    double lot=fibo_lots();

    if(
    OpenPrice(OP_BUY)!=&&orderstotal2(OP_BUYLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){
    OrderSend(Symbol(),OP_BUYLIMIT,lot*j,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}

    if(
    OpenPrice(OP_SELL)!=&&orderstotal2(OP_SELLLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){
    OrderSend(Symbol(),OP_SELLLIMIT,lot*j,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}

    ولكن المضاعفات يتم فتحها كالتالى 1 ، 2 ، 12 ، 112 ، 1984

    وليست مضاعفات فيبوناتشي .

    ولى سؤال بخصوص الدالة fibo_lots

    لماذا تم وضع الأمر return مرتين ، وفـ حالة الشرط
    كود PHP:
    if(N==2
    - لماذا تم وضع الشرط N==2 !!

    - عند بداية العد ستصبح قيمة N =0 ثم بعد ذلك 1 ثم 2 ويتحقق شرط if

    بعد ان تصبح قيمة N تساوى 3 ، 4 ، 5 ، ... لن يتحقق شرط if

    فـ هذه الحالة ماذا ستكون القيمة الـتى يعود بها الأمر return
    بالنسبة لتحديد حجم اللوت بواسطة الفيبوناتشي
    يمكنك إستخدام رقم 1.618 مباشرة لتحديد حجم اللوت
    عن طريق ضرب حجم أخر لوت × 1.618 وتقريب الناتج عن طريق MathRound() لأقرب عدد صحيح

    ستقوم أولاً بعمل دالة لتأتي بقيمة أخر لوت
    ثم تقوم بحساب اللوت الجديد بالشكل ده
    كود PHP:
    double Lot=MathRound (LastLot()*1.618); 
    أو تستخدمها مباشرة في الأوردر
    كود PHP:
    OrderSend(Symbol(),OP_BUYLIMIT,MathRound(LastLot()*1.618),OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue); 
    والأفضل بدل MathRound تستخدم NormalizeDouble عشان اللوتات العشرية بالشكل ده
    كود PHP:
    NormalizeDouble (LastLot()*1.618,1); 
    آخر تعديل بواسطة xcv114 ، 01-08-2012 الساعة 05:39 AM

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

    افتراضي

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

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة Jmeel مشاهدة المشاركة
    مستر دولار عفوا للأزعاج ارفقت لك صورة يمكن توضح هدفي اذا الشرح مش واضح ، في متغير بيحمل رقم 3333 ودا يعتبر ماجيك لأكسبيرت معين وبيتكرر عدة مرات في اماكن مختلفة داخل الأكسبيرت
    فأنا اقدر اعدله يدوي لكن الموضوع متعب وممكن تفوت مني وحدة من المرات المتعددة ، فأضفت الماجيك الذي هو 215315 ، وعايزه يحتل كل الأماكن المكتوب فيها OrderId27 مثلا ، ياريت تشوف الصورة والخطاء اللي بيحصل لما بعمل كوميلر ، على فكرة لو حطيت الجملة دي تحت قسم int او قسم Start مابيعطي رسالة خطاء في الكومبيلر لكن مابيحصل التغيير الذي اهدف اليه ، ولو حطيته
    في الجزء الأول من الأكسبيرت بيعطي رسالة الخطاء ، شكرا لتعاونك .
    الأخطاء التي تظهر هذا لأنك قمت بتعريف نفس المتغير مرتين
    بداخل الداله init او الداله dienit سوف تقوم بإضافة عملية المساواه لكنك لن تقوم بتعريف المتغير مره أخرى
    مثلا
    كود PHP:
    extern int BuyOrderId27=3333;
    extern int MagicNo=235434
    ثم
    كود PHP:
    int init() 

    BuyOrderId27=MagicNo;
    return(
    0);

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

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة spiders101 مشاهدة المشاركة
    تم التعديل ولى سؤال لماذا ظهر خطـأ OrderSend error 130 من قبل مع وجود او عدم وجود تارجت واستوب ولماذا فتح صفقات بيع وشراء (ليست معلقة) قبل التعديل ، المفترض لن يفتح اى صفقات طالمـا كان الخطـأ فـ نوع الأمر المعلق !!

    وفـ حالة أمر أوردر سيند الخاص بالأوامر المعلقة هل يجب وضع كود المقارنة الخاص بالتارجت والاستوب قبل كل أمر
    كود PHP:
    if(StopLoss==0){SL=0;}else{SL=Bid+StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*point;} 



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

    بالنسبة لإضافة مضاعفات فيبوناتشي قمت بعمل دالة لحساب حجم اللوت الجديد خارج ستارت
    كود PHP:
    double fibo_lots()
     {
     
    double newlot;
     
    int N;
      for(
    int i=OrdersTotal();i>=0;i--){
       
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
       if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber){
        
    newlot+=OrderLots();
        
    N++;
        if(
    N==2)return(newlot);
        }
        }
      return(
    newlot);
      } 
    ووضعت الكود الخاص بالدالة داخل ستارت
    كود PHP:
    int i,j;
    for(
    i=0,j=1;i<NumOF_Additional_LIMITSTOPLots;i++,j+=j){
    double lot=fibo_lots();

    if(
    OpenPrice(OP_BUY)!=&&orderstotal2(OP_BUYLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){
    OrderSend(Symbol(),OP_BUYLIMIT,lot*j,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}

    if(
    OpenPrice(OP_SELL)!=&&orderstotal2(OP_SELLLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){
    OrderSend(Symbol(),OP_SELLLIMIT,lot*j,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}

    ولكن المضاعفات يتم فتحها كالتالى 1 ، 2 ، 12 ، 112 ، 1984

    وليست مضاعفات فيبوناتشي .

    ولى سؤال بخصوص الدالة fibo_lots

    لماذا تم وضع الأمر return مرتين ، وفـ حالة الشرط
    كود PHP:
    if(N==2
    - لماذا تم وضع الشرط N==2 !!

    - عند بداية العد ستصبح قيمة N =0 ثم بعد ذلك 1 ثم 2 ويتحقق شرط if

    بعد ان تصبح قيمة N تساوى 3 ، 4 ، 5 ، ... لن يتحقق شرط if

    فـ هذه الحالة ماذا ستكون القيمة الـتى يعود بها الأمر return
    الخطأ 130 إما خطأ في الهدف أو الأستوب أو خطأ في مكان وضع الأمر المعلق وبالتأكيد لم يفتح صفقات بيع وشراء بدلا من الأوامر المعلقه لكن تأكد من أن كود آخر في الإكسبرت هو السبب في فتح الصفقات
    في حال أي أمر سواء معلق أو بسعر مباشر فيجب أن تضع شروط الهدف والأستوب لوز
    لكن في الأمر المعلق لن تعتمد على سعر الأسك والبيك لكن ستعتمد على سعر وضع الأمر المعلق + أو - الهدف والأستوب
    مثلا
    كود PHP:
    if(StopLoss==0){SL=0;}else{SL=OpenPrice(OP_SELL)+StopLoss*point;} 
    if(
    TakeProfit==0){TP=0;}else{TP=OpenPrice(OP_SELL)-TakeProfit*point;} 
    بالنسبه لحجم اللوت فلن تحتاج إلى إستخدام lot*j وهو سبب الخطأ لكن ستستخدم الداله مباشرة
    كود PHP:
    lot=fibo_lots();
    OrderSend(Symbol(),OP_BUYLIMIT,lot,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);} 
    لماذا إستخدمت return مرتين
    في المره الأولى حتى بعد أن يجمع حجم لوت آخر صفقتين ويجد أن المقارنه N=2 أي أنه تم المرور على صفقتين فإنه يتوقف ويحفظ حجم اللوت
    في المره الثانيه بحيث إذا كان عدد الصفقات المفتوحه واحد فقط بالتالي لن يتحقق الشرط وسوف تنتهي الحلقه فيقوم بحفظ حجم اللوت الأول فقط

    أنا لا اريد إلا قيمة N=2 فقط حتى أتأكد من أن آخر صفقتين تم جمع حجم اللوت لهم وبالتالي تنتهي الحلقه
    وقيمة N لن تزيد عن 2 أبدا لأني في كل مره أنهي الحلقه والداله
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    الأخطاء التي تظهر هذا لأنك قمت بتعريف نفس المتغير مرتين
    بداخل الداله init او الداله dienit سوف تقوم بإضافة عملية المساواه لكنك لن تقوم بتعريف المتغير مره أخرى
    مثلا
    كود PHP:
    extern int BuyOrderId27=3333;
    extern int MagicNo=235434
    ثم
    كود PHP:
    int init() 

    BuyOrderId27=MagicNo;
    return(
    0);

    استاذي انا ذكرت في مشاركتي اني لو حطيت تساوي للمتغيرين تحت قسم int أو start مفيش مشكلة في الكومبيلر لكن مافيش تأثير حقيقي وتغيير للأرقام وكأني مغيرتش حاجه ، ياريت اصل الى حل يقبل استبدال قيمة الرقم في BUYID الى قيمة الرقم في الماجيك ، وشكرا

  10. #2545
    الصورة الرمزية xcv114
    xcv114 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Oct 2010
    الإقامة
    مصر
    المشاركات
    1,022

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

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


    استاذي انا ذكرت في مشاركتي اني لو حطيت تساوي للمتغيرين تحت قسم int أو start مفيش مشكلة في الكومبيلر لكن مافيش تأثير حقيقي وتغيير للأرقام وكأني مغيرتش حاجه ، ياريت اصل الى حل يقبل استبدال قيمة الرقم في BUYID الى قيمة الرقم في الماجيك ، وشكرا
    طيب يا اخ جميل إنت ممكن تشيل المتغير BuyOrderId27 من المتغيرات الخارجية خالص
    أولا ستقوم بتعريف المتغير خارج أي دالة يعني ضعه مثلا أسفل المتغيرات الخارجية وقبل init()
    كود PHP:
    int BuyOrderId27
    وتقوم بتعريف متغير في init() أو start()
    كود PHP:
    BuyOrderId27=MagicNo
    وبالتالي لن تحتاج لتغير أي شئ في الإكسبيرت
    آخر تعديل بواسطة xcv114 ، 01-08-2012 الساعة 08:38 AM

  11. #2546
    الصورة الرمزية spiders101
    spiders101 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2011
    الإقامة
    مصــر
    المشاركات
    935

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    الخطأ 130 إما خطأ في الهدف أو الأستوب أو خطأ في مكان وضع الأمر المعلق وبالتأكيد لم يفتح صفقات بيع وشراء بدلا من الأوامر المعلقه لكن تأكد من أن كود آخر في الإكسبرت هو السبب في فتح الصفقات
    في حال أي أمر سواء معلق أو بسعر مباشر فيجب أن تضع شروط الهدف والأستوب لوز
    لكن في الأمر المعلق لن تعتمد على سعر الأسك والبيك لكن ستعتمد على سعر وضع الأمر المعلق + أو - الهدف والأستوب
    مثلا
    كود PHP:
    if(StopLoss==0){SL=0;}else{SL=OpenPrice(OP_SELL)+StopLoss*point;} 
    if(
    TakeProfit==0){TP=0;}else{TP=OpenPrice(OP_SELL)-TakeProfit*point;} 
    بالنسبه لحجم اللوت فلن تحتاج إلى إستخدام lot*j وهو سبب الخطأ لكن ستستخدم الداله مباشرة
    كود PHP:
    lot=fibo_lots();
    OrderSend(Symbol(),OP_BUYLIMIT,lot,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);} 
    لماذا إستخدمت return مرتين
    في المره الأولى حتى بعد أن يجمع حجم لوت آخر صفقتين ويجد أن المقارنه N=2 أي أنه تم المرور على صفقتين فإنه يتوقف ويحفظ حجم اللوت
    في المره الثانيه بحيث إذا كان عدد الصفقات المفتوحه واحد فقط بالتالي لن يتحقق الشرط وسوف تنتهي الحلقه فيقوم بحفظ حجم اللوت الأول فقط

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

    وشروط الأوامر المعلقة الآن اصبحت هكذا

    كود PHP:
    /////////////////////////////////////// Delete pending Order //////////////////////////
    if(orderstotal2(OP_BUY)+orderstotal2(OP_SELL)==0){
    orderDelete(OP_BUYLIMIT);orderDelete(OP_SELLLIMIT);orderDelete(OP_BUYSTOP);orderDelete(OP_SELLSTOP);}
    /////////////////////////////////////// Additional Buy & SELL Lots //////////////////////////
    if(OpenPrice(OP_BUY)-Ask>Space*point && OpenPrice(OP_BUY)!=&& Additional_Buy_SELL_Lots==true){
    if(
    StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
    OrderSend(Symbol(),OP_BUY,lot*2,NormalizeDouble(Ask,digits),5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}

    if(
    Bid-OpenPrice(OP_SELL)>Space*point && OpenPrice(OP_SELL)!=&& Additional_Buy_SELL_Lots==true){
    if(
    StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
    if(
    TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
    OrderSend(Symbol(),OP_SELL,lot*2,NormalizeDouble(Bid,digits),5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
    /////////////////////////////////////// Additional LIMIT & STOP Lots //////////////////////////  
    if(OpenPrice(OP_BUY)!=&&orderstotal2(OP_BUYLIMIT)<&& Additional_LIMIT_STOP_Lots==true){
    if(
    StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_BUY)-Space*point)-StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_BUY)-Space*point)+TakeProfit*point;}
    OrderSend(Symbol(),OP_BUYLIMIT,lot*2,OpenPrice(OP_BUY)-Space*point,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}

    if(
    OpenPrice(OP_SELL)!=&&orderstotal2(OP_SELLLIMIT)<&& Additional_LIMIT_STOP_Lots==true){
    if(
    StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_SELL)+Space*point)+StopLoss*Point;}
    if(
    TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_SELL)+Space*point)-TakeProfit*Point;}
    OrderSend(Symbol(),OP_SELLLIMIT,lot*2,OpenPrice(OP_SELL)+Space*point,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
    ///////////////////////////////////////NumOF_Additional_LIMITSTOP_Lots ////////////////////////// 
    if(Fibo_NumOF_Additional_LIMITSTOP==false){
    int i,j;
    for(
    i=0,j=1;i<NumOF_Additional_LIMITSTOPLots;i++,j+=j){

    if(
    OpenPrice(OP_BUY)!=&&orderstotal2(OP_BUYLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){
    if(
    StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_BUY)-Space*point*i)-StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_BUY)-Space*point*i)+TakeProfit*point;}
    OrderSend(Symbol(),OP_BUYLIMIT,lot*j,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}

    if(
    OpenPrice(OP_SELL)!=&&orderstotal2(OP_SELLLIMIT)<&& NumOF_Additional_LIMITSTOP_Lots==true){
    if(
    StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_SELL)+Space*point*i)+StopLoss*Point;}
    if(
    TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_SELL)+Space*point*i)-TakeProfit*Point;}
    OrderSend(Symbol(),OP_SELLLIMIT,lot*j,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
    }}
    //set multiplier by 2,4,8,16 and if we need 2,4,6,8 use j=0 and j++ and lot*2*j
    ///////////////////////////////////////Fibo_NumOF_Additional_LIMITSTOP_Lots ////////////////////////// 
    if(Fibo_NumOF_Additional_LIMITSTOP==true){
    for(
    i=0;i<NumOF_Additional_LIMITSTOPLots;i++){
    double lot=fibo_lots(); 

    if(
    OpenPrice(OP_BUY)!=&&orderstotal2(OP_BUYLIMIT)<i){
    if(
    StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_BUY)-Space*point*i)-StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_BUY)-Space*point*i)+TakeProfit*point;}
    OrderSend(Symbol(),OP_BUYLIMIT,lot,OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}

    if(
    OpenPrice(OP_SELL)!=&&orderstotal2(OP_SELLLIMIT)<i){
    if(
    StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_SELL)+Space*point*i)+StopLoss*Point;}
    if(
    TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_SELL)+Space*point*i)-TakeProfit*Point;}
    OrderSend(Symbol(),OP_SELLLIMIT,lot,OpenPrice(OP_SELL)+Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}
    }}
    /////////////////////////////////////// Reversed Multiplier //////////////////////////  
    if(OpenPrice(OP_BUY)-Ask>Space*point&&OpenPrice(OP_BUY)!=0&&LastOrderType()==OP_BUY&&Reversed_Multiplier==true){
    if(
    StopLoss==0){SL=0;}else{SL=Bid+StopLoss*Point;}
    if(
    TakeProfit==0){TP=0;}else{TP=Bid-TakeProfit*Point;}
    OrderSend(Symbol(),OP_SELL,lot*2,NormalizeDouble(Bid,digits),5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}

    if(
    Bid-OpenPrice(OP_SELL)>Space*point&&OpenPrice(OP_SELL)!=0&&LastOrderType()==OP_SELL&&Reversed_Multiplier==true){
    if(
    StopLoss==0){SL=0;}else{SL=Ask-StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=Ask+TakeProfit*point;}
    OrderSend(Symbol(),OP_BUY,lot*2,NormalizeDouble(Ask,digits),5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
    /////////////////////////////////////// Reversed Multiplier2 //////////////////////////  
    if(OpenPrice(OP_BUY)!=0&&orderstotal2(OP_SELLSTOP)<1&&LastOrderType()==OP_BUY&&Reversed_Multiplier2==true){
    if(
    StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_BUY)-Space*point)+StopLoss*Point;}
    if(
    TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_BUY)-Space*point)-TakeProfit*Point;}
    OrderSend(Symbol(),OP_SELLSTOP,lot*2,OpenPrice(OP_BUY)-Space*point,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Red);}

    if(
    OpenPrice(OP_SELL)!=0&&orderstotal2(OP_BUYSTOP)<1&&LastOrderType()==OP_SELL&&Reversed_Multiplier2==true){
    if(
    StopLoss==0){SL=0;}else{SL=(OpenPrice(OP_SELL)+Space*point)-StopLoss*point;}
    if(
    TakeProfit==0){TP=0;}else{TP=(OpenPrice(OP_SELL)+Space*point)+TakeProfit*point;}
    OrderSend(Symbol(),OP_BUYSTOP,lot*2,OpenPrice(OP_SELL)+Space*point,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue);}
    //Hint:OrderOpenPrice For Pending Orders>Current price -- orders-->(OP_BUYSTOP&&OP_SELLLIMIT)
    //Hint:OrderOpenPrice For Pending Orders<Current price -- orders-->(OP_BUYLIMIT&&OP_SELLSTOP)   
    /////////////////////////////////////////////////////////////////////////////////////////// 
    هل يمكن التعديل أو كتابة الأكواد بشكل أسهل من السابق لأني سأضيف شروط أخرى للأوامر المعلقة

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

    وأنا قمت بوضع

    كود PHP:
    double buys1=Close[1]; 
    كود PHP:
    double SeLLsl=Close[1]; 
    بعد أوردر سيند ، ووضع الشرط داخل ستارت

    كود PHP:
    if(Ask==buys1||Ask==SeLLsl||Bid==buys1||Bid==SeLLsl){CloseOrders();} 
    ولكن لايتم إغلاق الصفقة على سعر إغلاق الشمعة السابقة
    الملفات المرفقة الملفات المرفقة

  12. #2547
    الصورة الرمزية spiders101
    spiders101 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2011
    الإقامة
    مصــر
    المشاركات
    935

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

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


    بالنسبة لتحديد حجم اللوت بواسطة الفيبوناتشي
    يمكنك إستخدام رقم 1.618 مباشرة لتحديد حجم اللوت
    عن طريق ضرب حجم أخر لوت × 1.618 وتقريب الناتج عن طريق MathRound() لأقرب عدد صحيح

    ستقوم أولاً بعمل دالة لتأتي بقيمة أخر لوت
    ثم تقوم بحساب اللوت الجديد بالشكل ده
    كود PHP:
    double Lot=MathRound (LastLot()*1.618); 
    أو تستخدمها مباشرة في الأوردر
    كود PHP:
    OrderSend(Symbol(),OP_BUYLIMIT,MathRound(LastLot()*1.618),OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue); 
    والأفضل بدل MathRound تستخدم NormalizeDouble عشان اللوتات العشرية بالشكل ده
    كود PHP:
    NormalizeDouble (LastLot()*1.618,1); 
    استاذ يوسف ، أرجو ان تعذرني لم انتبه للمشاركة إلا الآن ، الاكسيبرتات الرقمية متعبة وأفكارها صعبة برمجيـا وتأخذ وقت طويل

    وجزاك الله خيرا على المساعدة ولكن انا أريد مضاعفات فيبوناتشي تكون كالتالى 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55 - 89 اي يتم جمع حجم لوت آخر صفقتين ويكون هو حجم اللوت الجديد ، وليس عن طريق ضرب حجم أخر لوت × 1.618 لأنه فـ حالة الضرب والتقريب بـ NormalizeDouble مع فرض أول لوت = 1
    باقى المضاعفات تكون كالتالى 1 ، 1.60 ، 2.60 ، 4.20 ، 6.80 ، ...

  13. #2548
    الصورة الرمزية fxsmartsniper
    fxsmartsniper غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Dec 2011
    الإقامة
    مصر
    المشاركات
    556

    افتراضي

    السلام عليكم ورحمة الله
    لو سمحتو اريد كود الوقت لعمل الاكسبرت
    المتغيرات الخارجية
    use time
    start time
    end time
    توقيع العضو
    استغفر الله العظيم عدد ما كان وعددما سيكون وعدد الحركات والسكون

  14. #2549
    الصورة الرمزية xcv114
    xcv114 غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Oct 2010
    الإقامة
    مصر
    المشاركات
    1,022

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

    اقتباس المشاركة الأصلية كتبت بواسطة spiders101 مشاهدة المشاركة
    استاذ يوسف ، أرجو ان تعذرني لم انتبه للمشاركة إلا الآن ، الاكسيبرتات الرقمية متعبة وأفكارها صعبة برمجيـا وتأخذ وقت طويل

    وجزاك الله خيرا على المساعدة ولكن انا أريد مضاعفات فيبوناتشي تكون كالتالى 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34 - 55 - 89 اي يتم جمع حجم لوت آخر صفقتين ويكون هو حجم اللوت الجديد ، وليس عن طريق ضرب حجم أخر لوت × 1.618 لأنه فـ حالة الضرب والتقريب بـ NormalizeDouble مع فرض أول لوت = 1
    باقى المضاعفات تكون كالتالى 1 ، 1.60 ، 2.60 ، 4.20 ، 6.80 ، ...
    أصلا يا محمد أي حاجة بتعتمد على الفيبوناتشي ... بتكون مستوحاه من الرقم ده 1.618
    ولوتات الفيبوناتشي من الأساس محسوبة بالطريقة إللي بقولك عليها دي

    تضرب أخر لوت × 1.618 وتقرب الناتج ستجد اللوتات 1 - 2 - 3 - 5 - 8 - 13 وهكذا

    يعني جرب تضع أي حجم لوت في الكود ده وضع الكود في إكسبيرت وشوف هيطبع إية
    كود PHP:
    double c=NormalizeDouble (0.5*1.618,1);
    Print(
    c); 
    شوف بقى جرب بدل 0.5 جرب 0.8 - 1.3 - 0.3

    هتلاقي في كل مرة بيطبع حجم لوت الفيبوناتشي التالي

  15. #2550
    الصورة الرمزية spiders101
    spiders101 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2011
    الإقامة
    مصــر
    المشاركات
    935

    افتراضي رد:موضوع مخصص للأسئلة البرمجية

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


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

    تضرب أخر لوت × 1.618 وتقرب الناتج ستجد اللوتات 1 - 2 - 3 - 5 - 8 - 13 وهكذا

    يعني جرب تضع أي حجم لوت في الكود ده وضع الكود في إكسبيرت وشوف هيطبع إية
    كود PHP:
    double c=NormalizeDouble (0.5*1.618,1);
    Print(
    c); 
    شوف بقى جرب بدل 0.5 جرب 0.8 - 1.3 - 0.3

    هتلاقي في كل مرة بيطبع حجم لوت الفيبوناتشي التالي
    أنا فاهم الفكرة ياغالى ، لكن المشكلة فـ التقريب عن طريق الـ NormalizeDouble

    أمر الأوردر سيند بعد التعديل
    كود PHP:
    OrderSend(Symbol(),OP_BUYLIMIT,NormalizeDouble(lastlot2()*1.618,1),OpenPrice(OP_BUY)-Space*point*i,5*Q,NormalizeDouble(SL,digits),NormalizeDouble(TP,digits)," EA",MagicNumber,0,Blue); 
    ودالة

    كود PHP:
    lastlot2() 
    تعود بحجم لوت آخر صفقة مفتوحة

    ولكن النتيجة بعد الباك تست مع لوت 1 لأول عقد



    والمفترض المضاعفات كالتالى 1 - 1 - 2 - 3 - 5 - 8 - 13 - 21 - 34
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة 4.JPG‏  
    الملفات المرفقة الملفات المرفقة
    آخر تعديل بواسطة spiders101 ، 01-08-2012 الساعة 07:47 PM

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

  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