صفحة 157 من 686 الأولىالأولى ... 57107147151152153154155156157158159160161162163167207257657 ... الأخيرةالأخيرة
النتائج 2,341 إلى 2,355 من 10285
  1. #2341
    الصورة الرمزية صاحب هدف
    صاحب هدف غير متواجد حالياً موقوف
    تاريخ التسجيل
    Jan 2010
    الإقامة
    سوريا
    المشاركات
    5,384

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

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    وعليكم السلام ورحمة الله وبركاته
    أولا بداخل الداله init
    كود PHP:
    int digits;
    int init(){ 
     if(
    Digits>3){
      
    digits=4;
     }
     else {
      
    digits=2;
     }

    ثم داخل الداله start
    الفكره في أني أريد أن أحذف الرقم العشري الخامس حتى لا يدخل في المقارنه
    كود PHP:
    string pr=DoubleToStr(Bid,Digits);
    double bid=StrToDouble(StringSubstr(pr,0,digits));

    if (
    bid price)// نفذ
    if (bid price)// نفذ
    price=bid
    متشكر يا أستاذ أسامة
    لكن ماشتغلش الكود كده واعتقد إن بدل المتغير pr لازم نعمله price أو بدل price نعملها pr صح
    لما عدلتها بالشكل ده

    كود PHP:
    double price;
    int digits;
    int u;
    int d;
    //----------------------------------------------------------
    int init()
    {
     if(
    Digits>3){
      
    digits=4;
     }
     else {
      
    digits=2;
     }
    return(
    0);
    }
    //----------------------------------------------------------
    int start()
    {
    string price=DoubleToStr(Bid,Digits);
    double bid=StrToDouble(StringSubstr(price,0,digits));

    if (
    bid price)u++;
    if (
    bid price)d++;
    price=bid
    Comment("عدد التكات الصاعدة = ",u,"\n","عدد التكات الهابطة = ",d);
    return(
    0);

    إداني خطأ فهمت منه إن المقارنة خطأ عشان المتغير bid نوعه doubel والمتغير price نوعه string

    وانا عملت الكود كامل عشان تتوضح الفكرة أكتر وربنا يكرمك ويجزيك الخير

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

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

    استاذ اسامة ، النسخة بالمرفقات هى آخر نسخة أعمل عليها حاليـا وهى الآن تعمل بشكل أفضل من قبل على منصة FXDD ، ولكن ظهرت بعض الأخطـاء مثل invalid ticket for OrderModify function

    وبعض الصفقـات ايضـا لايتم وضع التارجت والاستوب لها اى لايحدث مودفاى للأوردر .
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة 8.JPG‏   9.JPG‏  
    الملفات المرفقة الملفات المرفقة

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

    افتراضي

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






    تمام أخي سامه .. تم تعديل الإستوب و التارجت كما شرحت بارك الله فيك ..
    وتم إستخدام دالة الكومنت ..
    و لكن مازال يظهر أخطاء بعدم تعريف ال low_price
    وهذه الأخطاء تظهر في هذه التعريفات :
    كود PHP:
         ///حساب أقل لو وصل إليه السعر بعد توقيت فتآخر صفقة
         
         
    int barshift=iBarShift(Symbol(),0,lasttime(),false)
         
    double low_price=Low[iLowest(Symbol(),0,MODE_LOW,barshift,0)];
         
    double sell2=low_price;
         
    double sell3=low_price;
         
    ///--- 
         ///حساب اعلى هاي وصل له السعر بعد فتح آخر صفقه
         
        
         
    double high_price=High[iHighest(Symbol(),0,MODE_HIGH,barshift,0)];
         
    double buy2=high_price;
         
    double buy3=high_price;
         
    ///---
         
    double TP_R2=MathAbs buy sell2 ) ;
         
    double SL_R2=MathAbs buy sell2 ) ;
         
    double TP_R22=MathAbs sell buy2 ) ;
         
    double SL_R22=MathAbs sell buy2 ) ;
         
    ///-
         
    double TP_R3=MathAbs buy3 Last_SL ) ;
         
    double SL_R3=MathAbs buy3 Last_SL ) ;
         
    double TP_R33=MathAbs sell3 Last_SL ) ;
         
    double SL_R33=MathAbs sell3 Last_SL ) ;
         
    ///- 
    رجاء الإطلاع و جزاك الله خيرا .
    الإكسبيـــــــــــــــــــــرت
    هذا لأنك نسيت أن تضع الفاصله المنقوطه في نهاية السطر البرمجي
    كود PHP:
      int barshift=iBarShift(Symbol(),0,lasttime(),false
    ضعها وستحل المشكله
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

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

    افتراضي

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


    متشكر يا أستاذ أسامة
    لكن ماشتغلش الكود كده واعتقد إن بدل المتغير pr لازم نعمله price أو بدل price نعملها pr صح
    لما عدلتها بالشكل ده

    كود PHP:
    double price;
    int digits;
    int u;
    int d;
    //----------------------------------------------------------
    int init()
    {
     if(
    Digits>3){
      
    digits=4;
     }
     else {
      
    digits=2;
     }
    return(
    0);
    }
    //----------------------------------------------------------
    int start()
    {
    string price=DoubleToStr(Bid,Digits);
    double bid=StrToDouble(StringSubstr(price,0,digits));

    if (
    bid price)u++;
    if (
    bid price)d++;
    price=bid
    Comment("عدد التكات الصاعدة = ",u,"\n","عدد التكات الهابطة = ",d);
    return(
    0);

    إداني خطأ فهمت منه إن المقارنة خطأ عشان المتغير bid نوعه doubel والمتغير price نوعه string

    وانا عملت الكود كامل عشان تتوضح الفكرة أكتر وربنا يكرمك ويجزيك الخير
    تفضل
    كود PHP:
    double price;
    int digits;
    int u;
    int d;
    //----------------------------------------------------------
    int init()
    {
     if(
    Digits>3){
      
    digits=4;
     }
     else {
      
    digits=2;
     }
    return(
    0);
    }
    //----------------------------------------------------------
    int start()
    {
    string pr=DoubleToStr(Bid,Digits);
    double bid=StrToDouble(StringSubstr(pr,0,digits));

    if (
    bid price)u++;
    if (
    bid price)d++;
    price=bid
    Comment("عدد التكات الصاعدة = ",u,"\n","عدد التكات الهابطة = ",d);
    return(
    0);

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

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة spiders101 مشاهدة المشاركة
    استاذ اسامة ، النسخة بالمرفقات هى آخر نسخة أعمل عليها حاليـا وهى الآن تعمل بشكل أفضل من قبل على منصة FXDD ، ولكن ظهرت بعض الأخطـاء مثل invalid ticket for OrderModify function

    وبعض الصفقـات ايضـا لايتم وضع التارجت والاستوب لها اى لايحدث مودفاى للأوردر .
    هذا الخطأ قد يحدث عندما تحاول فتح صفقه لكن يحدث خطأ ولا تفتح الصفقه ثم تستخدم بعدها الأمر
    كود PHP:
    if(TP!=OrderTakeProfit()||SL!=OrderStopLoss())
    {
    OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,digits),NormalizeDouble(TP,digits),0,Red);

    فإذا لم تفتح الصفقه فبالتأكيد سيكون هناك خطأ في رقم التيكيت
    فقم بوضع شرط إضافي
    كود PHP:
    if(TP!=OrderTakeProfit()||SL!=OrderStopLoss()&&ticket>0)
    {
    OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,digits),NormalizeDouble(TP,digits),0,Red);

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

  6. #2346
    الصورة الرمزية صاحب هدف
    صاحب هدف غير متواجد حالياً موقوف
    تاريخ التسجيل
    Jan 2010
    الإقامة
    سوريا
    المشاركات
    5,384

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

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    تفضل
    كود PHP:
    double price;
    int digits;
    int u;
    int d;
    //----------------------------------------------------------
    int init()
    {
     if(
    Digits>3){
      
    digits=4;
     }
     else {
      
    digits=2;
     }
    return(
    0);
    }
    //----------------------------------------------------------
    int start()
    {
    string pr=DoubleToStr(Bid,Digits);
    double bid=StrToDouble(StringSubstr(pr,0,digits));

    if (
    bid price)u++;
    if (
    bid price)d++;
    price=bid
    Comment("عدد التكات الصاعدة = ",u,"\n","عدد التكات الهابطة = ",d);
    return(
    0);

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

    كود PHP:
    string pr=DoubleToStr(Bid,Digits);
    double bid=StrToDouble(StringSubstr(pr,0,digits)); 
    عشان كده مش قادر أتفاعل معاك في الكود ده واظبط فيه

    حاجة تانية مهمة يا أستاذ أسامة
    إحنا حاليا بنخفي الخانة الخامسة مش بنشيلها مش كده ؟
    طيب لو الكود بدأ والسعر كان 1.25123 والمتغير نوعه double وخفينا الخانة الأخير هيبقى الرقم كده 1.2512 ولا 1.2513
    الأقرب إنه يعمله 1.2512 صح ولو عمله كده فعلا ياترى لما يوصل السعر للـ 1.25126 هتبقى القيمة 1.2513
    ولا هيستنى 10 أجزاء كاملة عشان يعملها نقطة يعني لو بدأ زي ماقلنا من عند 1.25123 هيستنى 1.25133 وقتها يزود 1 في العداد

    انا محتاج 10 أجزاء كاملة ربنا يكرمك يا أستاذ أسامة
    تحياتي

  7. #2347
    الصورة الرمزية afrandai
    afrandai غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    May 2011
    الإقامة
    الكويت
    المشاركات
    182

    افتراضي

    السلام عليكم اخي اسامة ... تم الرد على تساؤلاتك في موضوعي https://forum.arabictrader.com/t141767.html

    الله يبارك فيك

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

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

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    هذا الخطأ قد يحدث عندما تحاول فتح صفقه لكن يحدث خطأ ولا تفتح الصفقه ثم تستخدم بعدها الأمر
    كود PHP:
    if(TP!=OrderTakeProfit()||SL!=OrderStopLoss())
    {
    OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,digits),NormalizeDouble(TP,digits),0,Red);

    فإذا لم تفتح الصفقه فبالتأكيد سيكون هناك خطأ في رقم التيكيت
    فقم بوضع شرط إضافي
    كود PHP:
    if(TP!=OrderTakeProfit()||SL!=OrderStopLoss()&&ticket>0)
    {
    OrderModify(ticket,OrderOpenPrice(),NormalizeDouble(SL,digits),NormalizeDouble(TP,digits),0,Red);

    بعد عمل التعديل لم تظهر رسالة الخطـأ ورسالة OrderSend Error 129 نادرا ماتظهر الآن على منصة FXDD ، ولكن عند العمل على منصة 4 أرقام مثل Windsor بعض الصفقات لايتم عمل مودفاى للتارجت والاستوب لها وخاصة مع زوج GBPJPY !!

    هل يوجد كود فـ الاكسيبرت يمنع عمل مودفاى للتارجت والاستوب على منصة الـ 4 أرقـام !!
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة 8.JPG‏  
    الملفات المرفقة الملفات المرفقة

  9. #2349
    الصورة الرمزية Mr. Bader
    Mr. Bader غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Dec 2011
    الإقامة
    اليمن
    المشاركات
    597

    افتراضي

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

    يمكن يكون شرحي غير واضح ولكن معليش استحملني شوي ......

    كود:
    
                              
    //---- indicator settings
    #property indicator_chart_window
    #property  indicator_buffers 3 
    #property  indicator_color1 Yellow
    #property  indicator_color2 Blue
    #property  indicator_color3 Red
    #property  indicator_width1 1
    #property  indicator_width2 1
    #property  indicator_width3 1
    #property indicator_style1 STYLE_SOLID
    #property indicator_style2 STYLE_DOT
    #property indicator_style3 STYLE_DOT
    
    //---- input parameters
    extern int eintTimeframe = 0;
    extern int eintHalfLength = 56;
    extern double edblAtrMultiplier = 2.0;
    extern int eintAtrPeriod = 100;
    extern int eintBarsToProcess = 0;
    extern bool eblnAlerts = false;
    extern color gc_Mid = Yellow;
    extern color gc_Upper = Blue;
    extern color gc_Lower = Red;
    
    
    //---- indicator buffers
    double gadblMid[];
    double gadblUpper[];
    double gadblLower[];
    
    int gintTF = 0;
    datetime gdtLastAlert = 0;
    int gi_PipsDecimal;
    
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
    {          
       if ( eintTimeframe == 0 )   gintTF = Period();
       else                        gintTF = eintTimeframe;
       
       gdtLastAlert = 0;
       
       IndicatorBuffers( 3 );
       IndicatorDigits( 5 );
       
       SetIndexBuffer( 0, gadblMid ); 
       SetIndexLabel( 0, "TMA Mid" );
    
       SetIndexBuffer( 1, gadblUpper );
       SetIndexLabel( 1, "TMA Upper" );
       
       SetIndexBuffer( 2, gadblLower );
       SetIndexLabel( 2, "TMA Lower" );   
           
       //---- name for DataWindow and indicator subwindow label
       IndicatorShortName( "TmaTrue(" + eintHalfLength + ",M" + gintTF + ")" );
       gi_PipsDecimal = Get_Pips_Decimal();
       
       return( 0 );
    }
    
    //+------------------------------------------------------------------+
    //| Custom indicator deinitialization function                       |
    //+------------------------------------------------------------------+
    int deinit()
    {
    ObjectDelete("!Mid");
    ObjectDelete("!Upp");
    ObjectDelete("!Low");
    ObjectDelete("!Range");
       return( 0 );
    }
    
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int start()
    {
       int counted_bars = IndicatorCounted();
       
       if (counted_bars < 0) return (-1);
       if (counted_bars > 0) counted_bars--;
       int intLimit = Bars - counted_bars;
       double dblTma, dblUpper, dblLower, dblRange;
       int intBarShift;
          
       if ( eintBarsToProcess > 0 && intLimit > eintBarsToProcess )     intLimit = eintBarsToProcess; 
    
       for( int inx = intLimit; inx >= 0; inx-- )
       {   
          if ( gintTF == Period() ) 
          {      
             dblRange = iATR( Symbol(), gintTF, eintAtrPeriod, inx+10 );
             dblTma = calcTma( eintHalfLength, inx );
          }
          else
          {
             intBarShift = iBarShift( Symbol(), gintTF, Time[inx] );
             dblRange = iATR( Symbol(), gintTF, eintAtrPeriod, intBarShift+10 );
             dblTma = calcTmaMtf( gintTF, eintHalfLength, intBarShift, Close[inx] );
          }
                 
          gadblMid[inx] = dblTma;
          gadblUpper[inx] = dblTma + ( edblAtrMultiplier * dblRange );
          gadblLower[inx] = dblTma - ( edblAtrMultiplier * dblRange );
       }
       
       if ( eblnAlerts && gdtLastAlert < Time[1] )
       {
          if ( ( Close[1] > gadblUpper[1] ) && ( Close[2] < gadblUpper[2] ) )
          {
             Alert( Symbol(), " - M", Period(), " - ", TimeToStr( Time[1], TIME_DATE|TIME_MINUTES ), " closed above upper TMA." );
             gdtLastAlert = Time[1];
          }
          
          if ( ( Close[1] < gadblLower[1] ) && ( Close[2] > gadblLower[2] ) )
          {
             Alert( Symbol(), " - M", Period(), " - ", TimeToStr( Time[1], TIME_DATE|TIME_MINUTES ), " closed below lower TMA." );
             gdtLastAlert = Time[1];
          }
       }
       
          // Calculate the distances between bid & bands
          double ld_Dist.Pts, ld_Dist.Pips;
          
          // Distance to mid
          ld_Dist.Pts = MathAbs(Bid - gadblMid[0]);
          ld_Dist.Pips = Convert_2_Pips(ld_Dist.Pts);
          ObjectCreate("!Mid",OBJ_TEXT,0,0,0);
          ObjectSet("!Mid",OBJPROP_TIME1,Time[0]+(3*Period()*60));
          ObjectSet("!Mid",OBJPROP_PRICE1,gadblMid[0]);
          ObjectSetText("!Mid",DoubleToStr(ld_Dist.Pips,gi_PipsDecimal),8,"Arial",gc_Mid);
          
          // Distance to upper
          ld_Dist.Pts = MathAbs(Bid - gadblUpper[0]);
          ld_Dist.Pips = Convert_2_Pips(ld_Dist.Pts);
          ObjectCreate("!Upp",OBJ_TEXT,0,0,0);
          ObjectSet("!Upp",OBJPROP_TIME1,Time[0]+(3*Period()*60));
          ObjectSet("!Upp",OBJPROP_PRICE1,gadblUpper[0]);
          ObjectSetText("!Upp",DoubleToStr(ld_Dist.Pips,gi_PipsDecimal),8,"Arial",gc_Upper);
          
          // Distance to lower
          ld_Dist.Pts = MathAbs(Bid - gadblLower[0]);
          ld_Dist.Pips = Convert_2_Pips(ld_Dist.Pts);
          ObjectCreate("!Low",OBJ_TEXT,0,0,0);
          ObjectSet("!Low",OBJPROP_TIME1,Time[0]+(3*Period()*60));
          ObjectSet("!Low",OBJPROP_PRICE1,gadblLower[0]);
          ObjectSetText("!Low",DoubleToStr(ld_Dist.Pips,gi_PipsDecimal),8,"Arial",gc_Lower);
          
          // Display the total range of the bands
          ld_Dist.Pts = MathAbs(gadblUpper[0] - gadblLower[0]);
          ld_Dist.Pips = Convert_2_Pips(ld_Dist.Pts);
          Object_Create("!Range",5,5,"TMA Range: "+DoubleToStr(ld_Dist.Pips,gi_PipsDecimal),1,"Arial",gc_Mid);
    
       return( 0 );
    }
    
    //+------------------------------------------------------------------+
    //| calcTma()                                                        |
    //+------------------------------------------------------------------+
    double calcTma( int intHalfLength, int intShift )
    {
       double dblResult, dblSum, dblSumW, dblRange;
       int inx, jnx, knx;
       
       dblSumW = intHalfLength + 1;
       dblSum = dblSumW * Close[intShift];
       jnx = intHalfLength;
       
       for ( inx = 1, jnx = intHalfLength; inx <= intHalfLength; inx++, jnx-- )
       {
          dblSumW += jnx;
          dblSum += ( jnx * Close[intShift+inx] );
       } 
       
       dblResult = dblSum / dblSumW;
       
       return( dblResult );
    }
    
    //+------------------------------------------------------------------+
    //| calcTmaMtf()                                                     |
    //+------------------------------------------------------------------+
    double calcTmaMtf( int intTF, int intHalfLength, int intUpperTfShift, double dblClose )
    {
       double dblResult, dblSum, dblSumW, dblRange;
       int inx, jnx, knx;
       
       // This is the current bar
       dblSumW = intHalfLength + 1;
       dblSum = dblSumW * dblClose;
       jnx = intHalfLength;
       
       for ( inx = 1, jnx = intHalfLength; inx <= intHalfLength; inx++, jnx-- )
       {
          dblSumW += jnx;
          dblSum += ( jnx * iClose( Symbol(), intTF, intUpperTfShift+inx ) );  
       } 
       
       dblResult = dblSum / dblSumW;
       
       return( dblResult );
    }
    //+------------------------------------------------------------------+
    //| create screen objects                                            |
    //+------------------------------------------------------------------+
    void Object_Create(string ps_name,int pi_x,int pi_y,string ps_text=" ",int pi_size=12,
                      string ps_font="Arial",color pc_colour=CLR_NONE)
      {
    //----
       
    //   if (colour==CLR_NONE) colour=xcBackground;
          
       ObjectCreate(ps_name,OBJ_LABEL,0,0,0,0,0);
       ObjectSet(ps_name,OBJPROP_CORNER,3);
       ObjectSet(ps_name,OBJPROP_COLOR,pc_colour);
       ObjectSet(ps_name,OBJPROP_XDISTANCE,pi_x);
       ObjectSet(ps_name,OBJPROP_YDISTANCE,pi_y);
       
       ObjectSetText(ps_name,ps_text,pi_size,ps_font,pc_colour);
    
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| convert to points                                                |
    //+------------------------------------------------------------------+
    double Convert_2_Pts(double pd_Pips)
      {
    //----
       int pd_Points=pd_Pips;  // Default - no conversion
       
     	if (Digits == 5 || (Digits == 3 && StringFind(Symbol(), "JPY") != -1)) 
     	   pd_Points=pd_Pips*10;
     	   
     	if (Digits == 6 || (Digits == 4 && StringFind(Symbol(), "JPY") != -1)) 
     	   pd_Points=pd_Pips*100;
    //----
       return(pd_Points);
      }
    //+------------------------------------------------------------------+
    //| convert to pips                                                  |
    //+------------------------------------------------------------------+
    double Convert_2_Pips(double pd_Points)
      {
    //----
       double pd_Pips=pd_Points/Point;  // Default - no conversion
       
     	if (Digits == 5 || (Digits == 3 && StringFind(Symbol(), "JPY") != -1)) 
     	   {
     	   pd_Pips=pd_Points/Point/10;
     	   }
     	   
     	if (Digits == 6 || (Digits == 4 && StringFind(Symbol(), "JPY") != -1)) 
     	   {
     	   pd_Pips=pd_Points/Point/100;
     	   }
    //----
       return(pd_Pips);
      }
    //+------------------------------------------------------------------+
    //| get the pips decimal places                                      |
    //+------------------------------------------------------------------+
    int Get_Pips_Decimal()
      {
    //----
       int pi_PipsDecimal = 0;  // Default - no decimals
       
     	if (Digits == 5 || (Digits == 3 && StringFind(Symbol(), "JPY") != -1)) 
     	   {
     	   pi_PipsDecimal = 1;
     	   }
     	   
     	if (Digits == 6 || (Digits == 4 && StringFind(Symbol(), "JPY") != -1)) 
     	   {
     	   pi_PipsDecimal = 2;
     	   }
    //----
       return(pi_PipsDecimal);
      }

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

    افتراضي

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


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

    كود PHP:
    string pr=DoubleToStr(Bid,Digits);
    double bid=StrToDouble(StringSubstr(pr,0,digits)); 
    عشان كده مش قادر أتفاعل معاك في الكود ده واظبط فيه

    حاجة تانية مهمة يا أستاذ أسامة
    إحنا حاليا بنخفي الخانة الخامسة مش بنشيلها مش كده ؟
    طيب لو الكود بدأ والسعر كان 1.25123 والمتغير نوعه double وخفينا الخانة الأخير هيبقى الرقم كده 1.2512 ولا 1.2513
    الأقرب إنه يعمله 1.2512 صح ولو عمله كده فعلا ياترى لما يوصل السعر للـ 1.25126 هتبقى القيمة 1.2513
    ولا هيستنى 10 أجزاء كاملة عشان يعملها نقطة يعني لو بدأ زي ماقلنا من عند 1.25123 هيستنى 1.25133 وقتها يزود 1 في العداد

    انا محتاج 10 أجزاء كاملة ربنا يكرمك يا أستاذ أسامة
    تحياتي
    معنى الكود :
    في البدايه أنا أريد حذف الرقم العشري الخامس إذا إستخدمت
    كود PHP:
    NormalizeDouble(Bid,digits); 
    فإذا كان السعر 1.26378 فسوف يقرب الرقم ويصبح 1.2638
    لكن أنا أريد كود لا يقوم بتقريب السعر وفقط يحذف الرقم العشري الخامس لذلك إستخدمت
    كود PHP:
    StringSubstr(pr,0,digits
    فهي تقوم بأخذ سلسلة نصيه وتأخذ جزء محدد منه فقط ويجب أن يكون المدخل pr نص لذلك حولت السعر إلى نص بالداله DoubleToStr
    كود PHP:
    string pr=DoubleToStr(Bid,Digits); 
    0 يعني أنه سيبدأ حساب النص الذي سيأخذه من أول حرف
    digits عدد الحروف التي سيحسبها فإذا كان السعر أربع أرقام عشريه سوف يأخذ أول أربع حروف فقط وإذا كان رقمين عشريين سوف يأخذ أول رقمين فقط

    يوجد تعديل فقط في الكود سوف تجعل
    كود PHP:
    double bid=StrToDouble(StringSubstr(pr,0,digits+2)); 
    لماذا أضفت +2
    لنفرض أن السعر هو 1.45378
    قيمة digits سوف تكون 4
    لذلك عندما يحسب أول أربع أرقام من النص فسوف يصبح 1.45 فالمفروض أن القيمه تصبح أربع أرقام
    عشريه + الرقم الصحيح والفاصله

    في اليورو ين سوف تغير هذا الرقم لإنه يوجد قبل الفاصله 3 أرقام وليس رقمين

    ----------

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

  11. #2351
    الصورة الرمزية صاحب هدف
    صاحب هدف غير متواجد حالياً موقوف
    تاريخ التسجيل
    Jan 2010
    الإقامة
    سوريا
    المشاركات
    5,384

    افتراضي

    جزاك الله عني كل خير يا أستاذ أسامة
    جاري التجربة

  12. #2352
    الصورة الرمزية صاحب هدف
    صاحب هدف غير متواجد حالياً موقوف
    تاريخ التسجيل
    Jan 2010
    الإقامة
    سوريا
    المشاركات
    5,384

    افتراضي

    الحمد لله رب العالمين
    فهمت الكود وإتعلمت حاجة جديدة يا أستاذ أسامة
    لكن بالنسبة للغاية ماتحققتش زي ماكنت متوقع لما يكون السعر مثلا 1.25381 وينزل للـ 1.25379 بيزود نقطة
    هحاول أعمل فكرة العداد الفرعي لكن لو حضرتك لسه موجود والفكرة جاهزة ياريت تنزلهالي عشان الوقت ربنا يكرمك
    تحياتي

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

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

    اقتباس المشاركة الأصلية كتبت بواسطة spiders101 مشاهدة المشاركة
    بعد عمل التعديل لم تظهر رسالة الخطـأ ورسالة OrderSend Error 129 نادرا ماتظهر الآن على منصة FXDD ، ولكن عند العمل على منصة 4 أرقام مثل Windsor بعض الصفقات لايتم عمل مودفاى للتارجت والاستوب لها وخاصة مع زوج GBPJPY !!

    هل يوجد كود فـ الاكسيبرت يمنع عمل مودفاى للتارجت والاستوب على منصة الـ 4 أرقـام !!
    صورة أخرى لبعض الصفقات التى لم يتم عمل مودفاى للتارجت والاستوب لها .

    ولم تظهر أخطـاء فقط OrderSend Error 129 مرة واحدة حتى الآن ، ما السبب فـ عدم عمل الاكسيبرت مودفاى لبعض الصفقات !!



    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة 8.JPG‏   9.JPG‏  

  14. #2354
    الصورة الرمزية ابواحمد222
    ابواحمد222 غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jun 2010
    المشاركات
    414

    افتراضي

    مستردولار المحترم فضلا وليس امرا
    عندما اقول هذه المعادله على برنامج فكسول
    iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0)
    هل المقصود هيستوجرام في الماكد حيث هو اللون الاول والشركه ليس بها خطين

  15. #2355
    الصورة الرمزية dentist_hussein
    dentist_hussein غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Aug 2011
    الإقامة
    مصر
    المشاركات
    1,827

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

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



    و عذرا أخي لو اتعبتك معي سوف أرفق لك الإكسبيرت الذي أبرمجه و أشرح لك فكرته لتطلع عليه وتصححلي ما فيه من أخطاء :

    1- الإكسبيرت يقوم بوضع أمرين معلقين سيل استوب و باي ستوب على أساس وجود مستويين مرسومين على الشارت أعلى و أدنى السعر ... وقيمة اللوت تكون لوت1 .. و إستوب و هدف لكل أمر معلق المسافه بين المستويين .

    2-إذا تفعل البيع لوت1 يتم مسح أمر الشراء وتعليق أمر معلق شراء بلوت2 عند المستوى العلوى و الهدف و الإستوب المسافه بين المستويين .(و العكس في حال تفعل الشراء لكن سأمشي في الشرح مع هذه الصفقه ).

    (في حالة تم ضرب الهدف يتم إلغاء الأوامر و يتوقف الإكسبيرت)

    3- إذا تم ضرب ستوب البيع بلوت1 وتفعل الشراء بلوت2 يتم تعليق أمر بيع بلوت3 عند أدنى نقطه وصل لها السعر قبل تفعل الشراء المفعل و الهدف و الإستوب الفرق بين المستوى العلوي السابق المرسوم على الشارت وأدنى نقطه وصل لها السعر ... و يتم أيضا تعديل ستوب الشراء المفعل إلى أدنى نقطه وصل لها السعر .

    4- إذا تم ضرب ستوب الشراء بلوت2 و تفعل البيع بلوت3 .. يتم تعليق أمر شراء بلوت 4 عند أعلى نقطه وصل لها السعر قبل تفعل صفقة البيع الحاليه و الهدف و الإستوب يكون الفرق بين أعلى نقطه وصل لها السعر و قيمة ستوب آخر صفقه مغلقة ... و يتم أيضا تعديل ستوب البيع المفعل إلى أعلى نقطة وصل لها السعر .
    .. أنوي عمل حتى لوت 10 بهذه الطريقه .. و قمت ببرمجة حتى الخطوة الرابعه إلى الآن و لكن هناك بعض الأخطاء أرجو الإطلاع عليها و تصحيح أي شئ آخر قبل أن أكمل ..
    شكرا جزيلا أخي أسامه و بارك الله فيك .

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    هذا لأنك نسيت أن تضع الفاصله المنقوطه في نهاية السطر البرمجي
    كود PHP:
      int barshift=iBarShift(Symbol(),0,lasttime(),false
    ضعها وستحل المشكله

    تمام أخي أسامه فعلا كانت الفاصله المنقوطه هي السبب .. و بارك الله فيك
    الآن أخي أنا إنتهيت من الإكسبيرت وعندما بدأت أجربه على الديمو لأضع مستويين أفقيين أحدهما أعلى السعر و الآخر أسفله لأرى كيف يضع الأوامر و جدت الإكسبيرت يفعل فقط أمر السيل ستوب و يقوم بوضع كميه كبيره من الأوامر السيل ستوب و المشكله الأخرى أنه يقوم بوضع الأمر من نقطه خاطئه ..
    فقد إستخدمت التعريفات التاليه :
    كود PHP:
         
         double line1
    =ObjectGet("buy",OBJPROP_PRICE1);
         
    double line2=ObjectGet("sell",OBJPROP_PRICE1);
         
         
    ///---
         
         
    double sp=(Spread*point);
         
    double pips=(PipsFromLine*point);
         
    double buy=(line1+sp+pips);
         
         
    double pips2=(PipsFromLine*point) ;
         
    double sell=(line2-pips2); 
    و الخطوه رقم 1 للإكسبيرت هي تعليق الأمرين عند المستويين من النقطه buy و النقطه sell و هما المستويان مضاف لهما السبريد و لمستوى الشراء عدد آخر من النقاط غير السبريد كما بالتعريفات السابقة:
    كود PHP:
              //////////// 1- put the buy sop///////////
          
          
    if (MyBuyPendingOrdersTotal(MagicNumber)==&& USE_BUYSTOP==TRUE && Time0!=Time[0]) {
          if((
    TimeCurrent()-LastClosedOrderTime())/60/60>=9999)
          {
       
        if(
    StopLoss==0||HideSL){SL=0;}else{SL=Ask-StopLoss*point;}
        if(
    TakeProfit==0||HideTP){TP=0;}else{TP=Ask+TakeProfit*point;}

           
           
           if(
    UseRecTP)TP=(Ask+TP_R);
           if(
    UseRecSL)SL=(Ask-SL_R);
               
              
                
    OrderSend(Symbol(),OP_BUYSTOP,Lots1,buy,3,SL,TP,"first",MagicNumber,0,Green);
                 
    PlaySound("Alert.wav");
                   
    Time0=Time[0];
                    
                 
            }  
           }
           
                                
        
    ///////////////////////////////////////////////////////////////////////////////////////////
        
                           ///////////////1- put the sell stop//////////////
        
           
    if (MySellPendingOrdersTotal(MagicNumber)==&& Time0!=Time[0]&& USE_SELLSTOP==TRUE ){
           if((
    TimeCurrent()-LastClosedOrderTime())/60/60>=9999)
           {
           
            if(
    StopLoss==0||HideSL){SL=0;}else{SL=Bid+StopLoss*point;}
        if(
    TakeProfit==0||HideTP){TP=0;}else{TP=Bid-TakeProfit*point;}

           
           
           
           if(
    UseRecTP)TP=(Bid-TP_R);
           if(
    UseRecSL)SL=(Bid+SL_R);
               
        
             
    OrderSend(Symbol(),OP_SELLSTOP,Lots1,sell,3,SL,TP,"first" ,MagicNumber,0,Green);
              
    PlaySound("Alert.wav");
                
    Time0=Time[0];
                 
                 
               }  
              
           } 
    وقد إستخدمت دالة معرفة توقيت إغلاق آخر صفقة و وضعت في شرط أول خطوة هذا الشرط :
    كود PHP:
    if((TimeCurrent()-LastClosedOrderTime())/60/60>=99999
    وأيضا شرط :
    كود PHP:
     Time0!=Time[0
    حتى لا يتم تكرار تعليق الأوامر و مع ذلك كان يعلق الأوامر و من مكان خاطئ ..
    رجاء الإطلاع أخي أسامه ومراجعة باقي الخطوات إذا كان هناك خطأ ..
    و بارك الله فيك .
    الإكســــــــــــــبيرت
    الملفات المرفقة الملفات المرفقة
    توقيع العضو
    MetaTrader Login: 652105
    Investor Password: Z3UR9DA0

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

  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