صفحة 181 من 686 الأولىالأولى ... 81131171175176177178179180181182183184185186187191231281681 ... الأخيرةالأخيرة
النتائج 2,701 إلى 2,715 من 10284
  1. #2701
    الصورة الرمزية العوامى
    العوامى غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Jul 2012
    الإقامة
    مصر
    المشاركات
    78

    افتراضي

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


    بعد إذن أخي turkm أجيب على أخي العوامى
    هذا المؤشر أخي هو المؤشر المعروف و المستخدم في كثير من الإستراتيجيات و الإكسبيرتات المعروف ب Auto Recommendations هو يأخذ قيم سالبه حين لا يظهر و يأخذ قيمة موجبة بداية من 1 و أكبر حين يظهر على الشارت .
    و إستدعاءالمؤشر في حالة ظهور سهم الشراء يكون بالكود التالي
    كود PHP:
    double B=iCustom(NULL,0,"M.aly Strategy",2,1); 
    وإستدعاء المؤشر في حالة ظهور سهم البيع:
    كود PHP:
    double S=iCustom(NULL,0,"M.aly Strategy",3,1); 
    حيث يأخذ السهم الأحمر قيمة 3 و السهم الأخضر قيمة 2 في ال COLORS كما بالصورة :


    ومن الافضل جعل رتبة الشمعة رقم 1 حتى يثبت السهم ...
    و ستجعل شرط الشراء
    كود PHP:
    if (B>
    و شرط البيع
    كود PHP:
    if (S>
    قمت بتعديل إكسبيرتك و مرفق أيضا مؤشر ال Auto Recommendations مفتوح المصدر وهو لا يختلف عن مؤشرك المرفق .
    جزاك الله خير الجزاء واسكنك فسيح جناته

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة spiders101 مشاهدة المشاركة
    استاذ اسامة ، اريد دالة تسمح بإغلاق كل الصفقات المفتوحة على المنصة(عن طريق اكسيبرت او يدوى) ، وهل يمكن ان يحدث تعارض فـ إغلاق الصفقات اذا تم وضع هذه الدالة فـ أكثر من اكسيبرت ووضعهم للعمل معا على المنصة !!

    انا استخدمت هذه الدالة للإغلاق
    كود PHP:
     void CloseOrders(){
     
    int _total=orderstotal();
       
    int type;
       if (
    _total==0) {return;} 
       
    int ticket;double priceClose;   
       for (
    int b=_total;b>=0;b--){
        if(
    OrderSelect(b,SELECT_BY_POS)){
          
    type=OrderType();
          
    ticket=OrderTicket();
          switch(
    type){
            case 
    OP_BUY:
                 
    priceClose=MarketInfo(OrderSymbol(),MODE_BID);
                 
    OrderClose(ticket,OrderLots(),priceClose,slippage*Q);
                 break;
            case 
    OP_SELL:
                 
    priceClose=MarketInfo(OrderSymbol(),MODE_ASK);
                 
    OrderClose(ticket,OrderLots(),priceClose,slippage*Q);
                 break;
            default:
                 break;
                   }
                 }
               }
             } 
    ولكن لاحظت بعد متابعة الاكسيبرت لايف انه فـ بعض الأحيان لايقوم بإغلاق كل الصفقات المفتوحة على كل الأزواج ولا أعلم السبب .
    قد يحدث خطأ أن السيرفر مشغول نظرا لتنفيذ إكسبرت أمر آخر ولذلك يمكنك إستخدام الداله للتأكد
    كود PHP:
    IsTradeContextBusy() 
    أو
    كود PHP:
    IsTradeAllowed() 
    أيضا بالنسبه للإكسبرتات التي تعتمد على إغلاق أكثر من صفقة أو أكثر من عمله فأنا أستخدم المحاولة أكثر من مره حتى أتأكد من إغلاق الإكسبرت تماما
    مثال
    كود PHP:
    int Tried;
     if(
    OrdersTotal()>0&&Tried<20){
     
    //close Orders 
     
    Tried++;
     } 
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  3. #2703
    الصورة الرمزية turkm
    turkm غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Oct 2011
    المشاركات
    1,626

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

    رجاءا اخي مستر دولار الرد على هذه المشاركة فانا لا اريد ان اتعبك حتى تعملي الكود الكامل لمربع التسعة ولكن كان تساؤلي (لماذا بقيت قيم المصفوفة تساوي الصفر)


    https://forum.arabictrader.com/showt...=1#post2491917
    آخر تعديل بواسطة turkm ، 01-09-2012 الساعة 09:19 PM

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

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

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

                         
    //////////// 1- put the buy sop///////////
          
           
    if(Hour()==HourStarting){
            for(
    i=1;i<=NumberOfOrders;i++)
            {
            
           
    double  bs=Ask+(i*Step*point);
            if(
    TakeProfit==0){TP=0;}else{TP=bs+TakeProfit*point;}
            if(
    StopLoss==0){SL=0;}else{SL=bs-StopLoss*point;}
            
    OrderSend(Symbol(),OP_BUYSTOP,Lots,bs,3,SL,TP,"Expert EA",MagicNumber,0,Red);
            }
            } 
          
                                
        
    ///////////////////////////////////////////////////////////////////////////////////////////
        
                           ///////////////2- put the sell stop//////////////
        
             
    if(Hour()==HourStarting){
            for(
    i=1;i<=NumberOfOrders;i++)
            {
            
            
    double ss=Bid-(i*Step*point);
            if(
    TakeProfit==0){TP=0;}else{TP=ss-TakeProfit*point;}
            if(
    StopLoss==0){SL=0;}else{SL=ss+StopLoss*point;}
            
    OrderSend(Symbol(),OP_SELLSTOP,Lots,ss,3,SL,TP,"Expert EA",MagicNumber,0,Red);
            }
            } 
    أريد أن أجعل الإكسبيرت يفعل شيئين :
    - إذا أغلقت الصفقة على ربح يتم إعادة وضع أمر معلق من نفس النقطة و لكنها بالطبع سوف تكون ليميت .
    - إذا أغلقت على خسارة يتم فتح مضاعفات حتى الإغلاق على ربح ثم وضع أمر معلق أيضا من نفس النقطة قبل ان تغلق الصفقة على خسارة وتبدأ في المضاعفات وسيكون ليميت أيضا ... ولكن يؤخذ بالحسبان أنه قد يتفعل أحد الأوامر المعلقه أثناء المضاعفات وقد تصل للهدف أو تبدأ بالمضاعفات هي الأخرى .

    يالنسبه لوضع أمر معلق بعد الإغلاق على ربح هل من الممكن أن أستدعي سعر إفتتاح آخر صفقه و أجعله سعر الليميت ؟؟
    و بالنسبه للمضاعفات هل أجعل الشرط إذا أغلقت آخر صفقة على خسارة وكانت شراء مثلا يتم فتح شراء بلوت تكون قيمته آخر لوت مضروب في قيمة المضاعفة ؟؟
    و أستخدم هذه الداله ؟؟ :
    كود PHP:
      string last
    for(
    int i=OrdersHistoryTotal();i>=0;i--) 
     {
       
    OrderSelect(iSELECT_BY_POS,MODE_HISTORY);  
       if(
    OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         
        {
        
        
    double Last_lots,Last_SL,Last_openprice
        
           
    //for buy order
           
    if(OrderType()==OP_BUY   && OrderClosePrice()>=OrderOpenPrice()) last="profit";
           if(
    OrderType()==OP_BUY   && OrderClosePrice()<=OrderOpenPrice()) last="loss";
            
    Last_lots=OrderLots();
            
    Last_SL=OrderStopLoss();
            
    Last_openprice=OrderOpenPrice();
      
           
    //for SELL order
           
    if(OrderType()==OP_SELL  && OrderClosePrice()<=OrderOpenPrice()) last="profit";
           if(
    OrderType()==OP_SELL  && OrderClosePrice()>=OrderOpenPrice()) last="loss";
           
    Last_lots=OrderLots();
           
    Last_SL=OrderStopLoss();
           
    Last_openprice=OrderOpenPrice();
           break;
        }
      }
       
           
           if( 
    X_Multiplier && last=="loss"   )
           
           {
    newLot=Multiplier*Last_lots;} 
    مرفق الإكسبيرت


    أليس من الممكن أستاذ أسامه أن أعطي للصفقات التي تفتح عن طريق الأوامر المعلقه ماجيك نمبر يختلف عن الصفقات التي تفتح ماركت وتدخل في المضاعفات و أستخدم دوال لكل منهما وكل بالماجيك نمبر الخاص به
    مثلا إستخدام دالتين خاصه بماجيك نمبر الأوامر المعلقه و دالتين لأوامر الماركت للبحث في التاريخ عن آخر و أول صفقات :
    كود PHP:
     ////// HISTORICAL LAST ONES FOR PENDING ORDERS BY MAGIC ///
        
       
    string lastP
    for(
    int i=OrdersHistoryTotal();i>=0;i--) 
     {
       
    OrderSelect(iSELECT_BY_POS,MODE_HISTORY);  
       if(
    OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumberP)
         
        {
        
        
    double LastP_lots,LastP_SL,LastP_openpriceLastP_ordertype
        
           
    //for buy order
           
    if(OrderType()==OP_BUY   && OrderClosePrice()>=OrderOpenPrice()) lastP="profit";
           if(
    OrderType()==OP_BUY   && OrderClosePrice()<=OrderOpenPrice()) lastP="loss";
            
    LastP_lots=OrderLots();
            
    LastP_SL=OrderStopLoss();
            
    LastP_openprice=OrderOpenPrice();
            
    LastP_ordertype=OrderType() ;
      
           
    //for SELL order
           
    if(OrderType()==OP_SELL  && OrderClosePrice()<=OrderOpenPrice()) lastP="profit";
           if(
    OrderType()==OP_SELL  && OrderClosePrice()>=OrderOpenPrice()) lastP="loss";
           
    LastP_lots=OrderLots();
           
    LastP_SL=OrderStopLoss();
           
    LastP_openprice=OrderOpenPrice();
           
    LastP_ordertype=OrderType() ;
           break;
        }
      }
     
    //============================
       
        ////// HISTORICAL LAST ONES FOR MARKET ORDERS BY MAGIC ///
        
       
    string lastM
    for(
    int ii=OrdersHistoryTotal();ii>=0;ii--) 
     {
       
    OrderSelect(iiSELECT_BY_POS,MODE_HISTORY);  
       if(
    OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         
        {
        
        
    double LastM_lots,LastM_SL,LastM_openpriceLastM_ordertype
        
           
    //for buy order
           
    if(OrderType()==OP_BUY   && OrderClosePrice()>=OrderOpenPrice()) lastM="profit";
           if(
    OrderType()==OP_BUY   && OrderClosePrice()<=OrderOpenPrice()) lastM="loss";
            
    LastM_lots=OrderLots();
            
    LastM_SL=OrderStopLoss();
            
    LastM_openprice=OrderOpenPrice();
            
    LastM_ordertype=OrderType() ;
      
           
    //for SELL order
           
    if(OrderType()==OP_SELL  && OrderClosePrice()<=OrderOpenPrice()) lastM="profit";
           if(
    OrderType()==OP_SELL  && OrderClosePrice()>=OrderOpenPrice()) lastM="loss";
           
    LastM_lots=OrderLots();
           
    LastM_SL=OrderStopLoss();
           
    LastM_openprice=OrderOpenPrice();
           
    LastM_ordertype=OrderType() ;
           break;
        }
      }
     
    //========================  
           
        ////// HISTORICAL FIRST ONES FOR MARKET ORDERS BY MAGIC ///  
           
          
              
    string firstM 
    for(
    int iii=OrdersHistoryTotal();iii<=1;iii--) 
     {
       
    OrderSelect(iiiSELECT_BY_POS,MODE_HISTORY);  
       if(
    OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         
        {
        
        
    double firstM_lots,firstM_SL,firstM_openpricefirstM_ordertype
        
           
    //for buy order
           
    if(OrderType()==OP_BUY   && OrderClosePrice()>=OrderOpenPrice()) firstM="profit";
           if(
    OrderType()==OP_BUY   && OrderClosePrice()<=OrderOpenPrice()) firstM="loss";
            
    firstM_lots=OrderLots();
            
    firstM_SL=OrderStopLoss();
            
    firstM_openprice=OrderOpenPrice();
            
    firstM_ordertype=OrderType() ;
      
           
    //for SELL order
           
    if(OrderType()==OP_SELL  && OrderClosePrice()<=OrderOpenPrice()) firstM="profit";
           if(
    OrderType()==OP_SELL  && OrderClosePrice()>=OrderOpenPrice()) firstM="loss";
           
    firstM_lots=OrderLots();
           
    firstM_SL=OrderStopLoss();
           
    firstM_openprice=OrderOpenPrice();
           
    firstM_ordertype=OrderType() ;
           break;
        }
      }
    //===========================   
           ////// HISTORICAL FIRST ONES FOR PENDING ORDERS BY MAGIC ///  
           
          
              
    string firstP 
    for(
    int iiii=OrdersHistoryTotal();iiii<=1;iiii--) 
     {
       
    OrderSelect(iiiiSELECT_BY_POS,MODE_HISTORY);  
       if(
    OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumberP)
         
        {
        
        
    double firstP_lots,firstP_SL,firstP_openpricefirstP_ordertype
        
           
    //for buy order
           
    if(OrderType()==OP_BUY   && OrderClosePrice()>=OrderOpenPrice()) firstP="profit";
           if(
    OrderType()==OP_BUY   && OrderClosePrice()<=OrderOpenPrice()) firstP="loss";
            
    firstP_lots=OrderLots();
            
    firstP_SL=OrderStopLoss();
            
    firstP_openprice=OrderOpenPrice();
            
    firstP_ordertype=OrderType() ;
      
           
    //for SELL order
           
    if(OrderType()==OP_SELL  && OrderClosePrice()<=OrderOpenPrice()) firstP="profit";
           if(
    OrderType()==OP_SELL  && OrderClosePrice()>=OrderOpenPrice()) firstP="loss";
           
    firstP_lots=OrderLots();
           
    firstP_SL=OrderStopLoss();
           
    firstP_openprice=OrderOpenPrice();
           
    firstP_ordertype=OrderType() ;
           break;
        }
      } 
    و أقوم بعمل داله تعود بنوع آخر أمر معلق بالماجيك أيضا :
    كود PHP:
     
        double LastPend
    (){
     for(
    int i=0;i<OrdersHistoryTotal();i++){
     
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
     if(
    OrderSymbol()==Symbol() && MagicNumberP==OrderMagicNumber()&& (OrderType()==OP_SELLSTOP || OrderType()==OP_SELLLIMIT)){
      
    double LastPend=OrderType();
         }
        } 
    return(
    LastPend);
      } 
    ثم تكون الشروط لإعادة وضع الأوامر المعلقة الشراء و البيع من نفس النقطة بعد الوصول للهدف تكون كالتالي :
    كود PHP:
     ///////////////////4-RE PUT BUY PENDING////////////
           
    if( lastP=="profit" && LastPend()==OP_BUYSTOP   )
           
    double bl=LastP_openprice ;
           {
           
    OrderSend(Symbol(),OP_BUYLIMIT,Lots,bl,3,SL,TP,"Expert EA",MagicNumberP,0,Red);
           }
           
           
           if( 
    lastP=="profit" && LastPend()==OP_BUYLIMIT   )
           
    double bss=LastP_openprice ;
           {
           
    OrderSend(Symbol(),OP_BUYSTOP,Lots,bss,3,SL,TP,"Expert EA",MagicNumberP,0,Red);
           }
           
    //======================
           
           
            ///////////////////3-RE PUT SELL PENDING////////////
           
    if( lastP=="profit" && LastPend()==OP_SELLSTOP   )
           
    double sll=LastP_openprice ;
           {
           
    OrderSend(Symbol(),OP_SELLLIMIT,Lots,sll,3,SL,TP,"Expert EA",MagicNumberP,0,Red);
           }
           
           
           if( 
    lastP=="profit" && LastPend()==OP_SELLLIMIT   )
           
    double sss=LastP_openprice ;
           {
           
    OrderSend(Symbol(),OP_SELLSTOP,Lots,sss,3,SL,TP,"Expert EA",MagicNumberP,0,Red);
           }
           
    //======================= 

    و تكون شروط مضاعفة العقود الخاسرة هكذا :
    كود PHP:
      ////////////////////////6-MULTIPLIERS FOR LOSS BUY//////////////////////
         
          
    if( X_Multiplier && lastP=="loss" && LastPend()==OP_BUYSTOP||LastPend()==OP_BUYLIMIT  )
           
           
    double newLot1=Multiplier*LastP_lots;
           {
           
         if(
    StopLoss==0||HideSL){SL=0;}else{SL=Ask-StopLoss*point;}
        if(
    TakeProfit==0||HideTP){TP=0;}else{TP=Ask+TakeProfit*point;}

               
                
    OrderSend(Symbol(),OP_BUY,newLot1,Ask,3*Q,SL,TP,"Expert EA",MagicNumber,0,Blue);
                 
    PlaySound("Alert.wav");
                 
    Time0=Time[0];
                 }
           
    /////////
           
           
    if( X_Multiplier && lastM=="loss" && LastM_ordertype==OP_BUY  )
           
           
    double newLot2=Multiplier*LastM_lots;
           {
           
         if(
    StopLoss==0||HideSL){SL=0;}else{SL=Ask-StopLoss*point;}
        if(
    TakeProfit==0||HideTP){TP=0;}else{TP=Ask+TakeProfit*point;}

               
                
    OrderSend(Symbol(),OP_BUY,newLot2,Ask,3*Q,SL,TP,"Expert EA",MagicNumber,0,Blue);
                 
    PlaySound("Alert.wav");
                 
    Time0=Time[0];
                 }
                 
                  
    ////////////////////////5-MULTIPLIERS FOR LOSS SELLS//////////////////////
         
          
    if( X_Multiplier && lastP=="loss" && LastPend()==OP_SELLSTOP||LastPend()==OP_SELLLIMIT  )
           
           
    double newLot3=Multiplier*LastP_lots;
           {
           
          if(
    StopLoss==0||HideSL){SL=0;}else{SL=Bid+StopLoss*point;}
        if(
    TakeProfit==0||HideTP){TP=0;}else{TP=Bid-TakeProfit*point;}
               
                
    OrderSend(Symbol(),OP_SELL,newLot3,Bid,3*Q,SL,TP,"Dentist_Hussein EA",MagicNumber,0,Red); 
                 
    PlaySound("Alert.wav");
                
    Time0=Time[0];
                 
              }
      
           
    /////////
           
           
    if( X_Multiplier && lastM=="loss" && LastM_ordertype==OP_SELL  )
           
           
    double newLot4=Multiplier*LastM_lots;
           {
           
         if(
    StopLoss==0||HideSL){SL=0;}else{SL=Bid+StopLoss*point;}
        if(
    TakeProfit==0||HideTP){TP=0;}else{TP=Bid-TakeProfit*point;}
               
                
    OrderSend(Symbol(),OP_SELL,newLot4,Bid,3*Q,SL,TP,"Dentist_Hussein EA",MagicNumber,0,Red); 
                 
    PlaySound("Alert.wav");
                
    Time0=Time[0];
                 
              }
      
       
    //================================ 
    و تكون شروط وضع أمر معلق مره أخرى بعد إصابة المضاعفات الهدف و توضع الأوامر من نفس نقطة آخر أمر تم مضاعفته :
    كود PHP:
     //////////////////8- PUT BUY PENDING AFTER PROFIT /////////////
          
          
    if(  lastM=="profit" &&  LastM_ordertype==OP_BUY  )
          
    double bsss=firstP_openprice ;
          {
           
    OrderSend(Symbol(),OP_BUYSTOP,Lots,bsss,3,SL,TP,"Expert EA",MagicNumberP,0,Red);
           }
          
          
    //////////////////7- PUT BUY PENDING AFTER PROFIT /////////////
          
          
    if(  lastM=="profit" &&  LastM_ordertype==OP_SELL  )
          
    double ssss=firstP_openprice ;
          {
           
    OrderSend(Symbol(),OP_SELLSTOP,Lots,ssss,3,SL,TP,"Expert EA",MagicNumberP,0,Red);
           }
           
       
        
    //==================== 
    معلشي هتعبك معايا أخي أسامه .. رجاء مراجعة أكواد الدوال و الشروط
    و جزاك الله كل خير .

    [/PHP]profit
    الملفات المرفقة الملفات المرفقة
    • نوع الملف: mq4 tryyy.mq4‏ (21.0 كيلوبايت, المشاهدات 89)
    توقيع العضو
    MetaTrader Login: 652105
    Investor Password: Z3UR9DA0

  5. #2705
    الصورة الرمزية aminefx
    aminefx غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Aug 2011
    المشاركات
    78

    افتراضي

    السلام عليكم

    أريد المساعدة في إيجاد كود يقوم بإغلاق جميع الأوامر المعلقة(OP_BUYSTOP,OP_SELLSTOP) مع الإبقاء على الأمرين المعلقين الأخيرين فقط.

    وشكرا للجميع

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة LOveR مشاهدة المشاركة
    هلا فيك استاذ اسامه حاولت لكن لم افلح بالنسبه للمضاعفات مع الهدج تلخبط علي الوضع وجدة دالة تحسب المجموع للنقاط لكن لم افلح في عمل دالة للمضاعفات مع الهدج اتمنا كتابتها ولك تحياتي يا بطل
    الكود تقوم بعمله بناء على الشرط فلا يوجد ما يسمى دالة للمضاعفات مع الهيدج
    مثلا لو تريد فتح مضاعفه وفي نفس الوقت تفتح معها صفقة هيدج بنصف حجم لوت المضاعفه
    مثال
    كود PHP:
    double lastlot(int type){
     for(
    int i=OrdersTotal();i>=0;i--){
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type){
       return(
    OrderLots());
      }
     }
    return(
    0);
    }
    double lastopenprice(int type){
     for(
    int i=OrdersTotal();i>=0;i--){
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type){
       return(
    OrderOpenPrice());
      }
     }
    return(
    0);
    }

    if(
    Ask-lastopenprice(OP_SELL)>50*Point&&lastopenprice(OP_SELL)!=0){
     
    OrderSend(Symbol(),OP_BUY,lastlot(OP_SELL),NormalizeDouble(Ask,Digits),3,0,0,"Hedge",MagicNumber,0,Blue);
     
    OrderSend(Symbol(),OP_SELL,lastlot(OP_SELL)*2,NormalizeDouble(Bid,Digits),3,0,0,"Multiplier",MagicNumber,0,Red);

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

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

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

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

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة turkm مشاهدة المشاركة
    أستاذ أسامة والاخوة المبرمجين بارك الله فيكم وفي عملكم
    أحاول بناء مربع التسعة برمجيا (مربع جان) ولكن ظهرت لي مشكلة في ان المصفوفة لا تأخذ اي قيمة وتبقى دائما تساوي الصفر فاين هو الخطأ بارك الله فيكم:
    وهذا هو الكود المستخدم:
    كود PHP:
    //+------------------------------------------------------------------+
    //|                                                  Square Nine.mq4 |
    //|                                                            Turkm |
    //|                                                                  |
    //+------------------------------------------------------------------+
    #property copyright "Turkm"
    #property link      ""

    #property indicator_chart_window
    extern int size=23;
    int array[23][23];
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- indicators

       
    int counter=1,class_H,class_V;
       
    class_H=(size-1)/2class_V=(size+1)/2
       for(
    int i=1i<=23i++)
       {
          for(
    int i_1=0i_1<ii_1++)
          {
             
    counter++;
             array[
    class_V-i_1][class_H+i_1]= counter;
          }
          for(
    int i_2=0i_2<ii_2++)
          {
             
    counter++;
             array[
    class_V-i_2-1][class_H+i_2]= counter;
          }
          for(
    int i_3=0i_3<ii_3++)
          {
             
    counter++;
             array[
    class_V-i_3-1][class_H+i_3+1]= counter;
          }
          for(
    int i_4=0i_4<ii_4++)
          {
             
    counter++;
             array[
    class_V-i_4-1][class_H+i_4+2]= counter;
          }
          for(
    int i_5=0i_5<ii_5++)
          {
             
    counter++;
             array[
    class_V-i_5][class_H+i_5+2]= counter;
          }
          for(
    int i_6=0i_6<ii_6++)
          {
             
    counter++;
             array[
    class_V-i_6+1][class_H+i_6+2]= counter;
          }
          for(
    int i_7=0i_7<ii_7++)
          {
             
    counter++;
             array[
    class_V-i_7+1][class_H+i_7+1]= counter;
          }
          for(
    int i_8=0i_8<ii_8++)
          {
             
    counter++;
             array[
    class_V-i_8+1][class_H+i_8]= counter;
          }
          
       }
       
    //----
       
    return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator deinitialization function                       |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //----
       
    Comment("");
    //----
       
    return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int start()
      {
      
       
    int    counted_bars=IndicatorCounted();
    //----
       
       
       
             
    Comment(  "   ",array[0][0],"   ",array[1][1],"   ",array[2][2]
                      ,
    "   ",array[3][3],"   ",array[4][4],"   ",array[5][5]
                      ,
    "   ",array[6][6],"   ",array[7][7],"   ",array[8][8]
                      ,
    "   ",array[9][9],"   ",array[10][0],"   ",array[11][0]
                      ,
    "   ",array[12][0],"   ",array[13][0],"   ",array[14][0]);
        
    //----
       
    return(0);
      }
    //+------------------------------------------------------------------+ 
    وهذه صور مرفقة عن الشارت:

    عمل الحلقات هي التي بها أخطاء لكن المصفوفه صحيحه
    أولا بالنسبه للحلقه التي ستبحث عن العناصر
    كود PHP:
    for(int i=1i<=23i++) 
    المصفوفه ترتيب العناصر فيها من 0 إلى حجم المصفوفه -1
    فعند البحث سوف تجعل الحلقه
    كود PHP:
    for(int i=0i<23i++) 
    ثانيا بالنسبه لباقي الحلقات فبها أيضا أخطاء في رقم العنصر بداخل المصفوفه
    مثلا
    كود PHP:
     for(int i_1=0i_1<ii_1++)
          {
             
    counter++;
             array[
    class_H-i_1][class_V+i_1]= counter;
          } 
    فعندما تصل قيمة i مثلا إلى 20 فعندها ستصبح رقم المصفوفه بالسالب class_H-i
    ولا يوجد ترتيب لعنصر مصفوفه بالسالب

    فلو جربت أن تقوم بطباعة جميع العناصر سوف تجد أن بعضها يأخذ القيم الصحيحه له وبعضها يأخذ القيم صفر
    كود PHP:
     for(int i_1=0i_1<ii_1++)
          {
             
    counter++;
             array[
    class_H-i_1][class_V+i_1]= counter;
             Print(array[
    class_H-i_1][class_V+i_1]);
          } 
    الخطأ عندك في تنفيذ الفكره وليس خطأ برمجي
    ما هي الفكره التي تريد عملها وسوف أساعدك لمعرفة كيفية تنفيذها
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

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

    افتراضي

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


    يعني الآن بعد إضافة داله لمعرفة رقم الشمعه التي تحقق فيها آخر إشارة سيكون شكل الحلقة :
    كود PHP:
    bool RSI_sell_Signal=false,Stoch_Sell_Signal=false;

    for(
    int i=1;i<=MathMin(LastCandleOrder(OP_SELL),3);i++){
     
    double rsi=iRSI(Symbol(),0,14,PRICE_CLOSE,i);
     
    double stoch=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i);
     if(
    rsi>70)RSI_sell_Signal=true;
     if(
    stoch>80)Stoch_Sell_Signal=true;
     }
     
    if(
    RSI_sell_Signal==true&&Stoch_Sell_Signal==true)//sell 
    و للشراء :

    كود PHP:

    bool RSI_buy_Signal
    =false,Stoch_buy_Signal=false;

    for(
    int i=1;i<=MathMin(LastCandleOrder(OP_BUY),3);i++){
     
    double rsi=iRSI(Symbol(),0,14,PRICE_CLOSE,i);
     
    double stoch=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i);
     if(
    rsi<30)RSI_buy_Signal=true;
     if(
    stoch<20)Stoch_buy_Signal=true;
     }
     
    if(
    RSI_buy_Signal==true&&Stoch_buy_Signal==true)//buy 
    ???

    و إذا أردت أن تكون دالة البحث عن آخر إشارة لخمس شمعات مثلا هل أغير
    كود PHP:
    return(3); 
    و أجعلها :
    كود PHP:
    return(5); 
    ؟؟؟
    ___________________


    وهل من الممكن أن أستخدم الحلقة الأولى
    كود PHP:
    bool RSI_sell_Signal=false,Stoch_Sell_Signal=false,RSI_Buy_Signal=false,Stoch_Buy_Signal=false;

    for(
    int i=1;i<=3;i++){
     
    double rsi=iRSI(Symbol(),0,14,PRICE_CLOSE,i);
     
    double stoch=iStochastic(Symbol(),0,5,3,3,0,0,MODE_MAIN,i);
     if(
    rsi>70)RSI_sell_Signal=true;
     if(
    stoch>80)Stoch_Sell_Signal=true;
     if(
    rsi<30)RSI_Buy_Signal=true;
     if(
    stoch<20)Stoch_Buy_Signal=true;
     }
     
    if(
    RSI_sell_Signal==true&&Stoch_Sell_Signal==true)//sell 
    ودالة البحث عن آخر إشارة ظهرت :
    كود PHP:
    int LastCandleOrder(int type){
     for(
    int i=OrdersHistoryTotal();i>=0;i--){
      
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
      
    datetime time=OrderOpenTime();
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type){
       return(
    iBarShift(Symbol(),0,time,false);
      }
     }
    return(
    3);

    ثم أضيف لشروط البيع و الشراء أن تكون آخر إشارة قد ظهرت في الشمعة رقم1
    مثلا:
    كود PHP:
    if(RSI_sell_Signal==true&&Stoch_Sell_Signal==true)&&(LastCandleOrder(OP_SELL),3)==1//sell 
    ???
    و جزاك الله كل خير .
    نعم سوف تقوم بتغيير عدد الشموع بدلا من 5 إلى 3
    أيضا الفكره الثانيه رائعه لكن لا أعتقد أنها ستحل مشكلة تكرار الإشارات لأنك إذا كنت ستضع شرط أن آخر إشارة كانت للشمعه السابقه فما الفائده من البحث عن باقي الشموع يكفي فقط المقارنه مع آخر شمعه والتأكد من تحقق الشرط فيها
    توقيع العضو
    بناء أنظمة تداول آلي ويدوي لفحص سوق العملات ودمجها مع التحليل الفني لإتخاذ القرارات

  10. #2710
    الصورة الرمزية LOveR
    LOveR غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Mar 2007
    المشاركات
    134

    افتراضي

    غلبتك معاي استاذ اسامه واشكرك علي سرعة الرد اعيد صياغة الفكرة يمكن التبس الوضع القصد هو مثلا شراء بعقد واحد علا تقاطع موفنج باللوت الابتداءي ١ اذا اعطا التقاطع اشاره عكسية والعملية الاولى خسرانه يدخل بعقدين ٢ معاكس اذا جاب التارقت يسكر اذا لا عطا اشاره عكسية ثالثه ندخل بثلاث عقود مع عدم تسكير العقود المفتوحه هذا الهدج الذي اقصده لين تحقيق التارقت لجميع العقود انا احدده. طبعا مع العلم اذا وصل المظاعفه الثالثه والعقود الاولية ماجابت تارقت بس التوتل بوزتف يدخل من جديد اغلب الاكواد الموجودة مضاعفات بس تسكر العقود علا خساره محققه انا ابيها معلقه لين يكون الناتج للعقود موجب هذا الهدج الذي اقصده لانه العقد الاول خسران علا مثلا ١٠ نقاط ودخلت بعقدين هدف خمسه عندما يتحرك السعر معاي ١٥ نقطه يعوض الخساره الاولي للعقد الاول والخمسه ربح طبعا هذي الفكرة طبعا علا المظاعفتين تكون سلبية لكن لو ثلاثه واربع تكون اامن لانه المضاعفات تتجاوز خمسه وسته بالغالب نتيجة التذبذب

  11. #2711
    الصورة الرمزية turkm
    turkm غير متواجد حالياً عضو نشيط
    تاريخ التسجيل
    Oct 2011
    المشاركات
    1,626

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    عمل الحلقات هي التي بها أخطاء لكن المصفوفه صحيحه
    أولا بالنسبه للحلقه التي ستبحث عن العناصر
    كود PHP:
    for(int i=1i<=23i++) 
    المصفوفه ترتيب العناصر فيها من 0 إلى حجم المصفوفه -1
    فعند البحث سوف تجعل الحلقه
    كود PHP:
    for(int i=0i<23i++) 
    ثانيا بالنسبه لباقي الحلقات فبها أيضا أخطاء في رقم العنصر بداخل المصفوفه
    مثلا
    كود PHP:
     for(int i_1=0i_1<ii_1++)
          {
             
    counter++;
             array[
    class_H-i_1][class_V+i_1]= counter;
          } 
    فعندما تصل قيمة i مثلا إلى 20 فعندها ستصبح رقم المصفوفه بالسالب class_H-i
    ولا يوجد ترتيب لعنصر مصفوفه بالسالب

    فلو جربت أن تقوم بطباعة جميع العناصر سوف تجد أن بعضها يأخذ القيم الصحيحه له وبعضها يأخذ القيم صفر
    كود PHP:
     for(int i_1=0i_1<ii_1++)
          {
             
    counter++;
             array[
    class_H-i_1][class_V+i_1]= counter;
             Print(array[
    class_H-i_1][class_V+i_1]);
          } 
    الخطأ عندك في تنفيذ الفكره وليس خطأ برمجي
    ما هي الفكره التي تريد عملها وسوف أساعدك لمعرفة كيفية تنفيذها

    بارك الله بك أخي اسامة الفكرة لدي اني اريد بناء مربع التسعة المعروف (مربع جان) داخل مصفوفة ثنائية البعد يعني لو اردنا إنشاء مربع التسعة بابعاد (فرضا) 23 * 23 فيجب ان تكون الخانة ذات الاحداثيات (12,12)=1 اي ابعاد المربع + 1 تقسيم 2 ثم يبدأ العد وتعبئة جميع خانات المصفوفة كما هو معروف في مربع التسعة

    كما هو الحال في هذه الصورة

    جزاك الله عني كل خير
    الصور المصغرة للصور المرفقة الصور المصغرة للصور المرفقة Main.jpg‏  
    آخر تعديل بواسطة turkm ، 03-09-2012 الساعة 10:52 AM

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

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

    استاذ اسامة ، انا وضعت شرط يسمح بإضافة لوت جديد إلى اللوت الإبتدائي عند الوصول للربح المحدد

    داخل ستارت
    كود PHP:
    if(AutoLot==true){ 

    if(
    AccountEquity()>=Money_Account){
    Lots=Firstlot+Add_Lot;}
     
    else{
    Lots=Firstlot;} 
    والمتغيرات الخارجية
    كود PHP:
    extern bool    AutoLot true;
    extern double  Add_Lot 1;
    extern double  Money_Account 500
    و الـ Firstlot داخل دالة init

    كود PHP:
       Firstlot=Lots 
    الشروط السابقة تعمل بشكل صحيح ، ولكن أنا أريد إضافة كود يسمح بزيادة حجم اللوت الجديد(Add_Lot) اذا كان الربح أكبر من الربح المحدد (Money_Account) ، زيادة اللوت مع زيادة الربح .

    حاولت وضع الحلقة التالية داخل ستارت
    كود PHP:
    if(AutoLot==true){ 
    for(
    int ii=0;ii<Money_Account;ii++){
    if(
    AccountEquity()>=ii*Money_Account){
    Lots=Firstlot+ii*Add_Lot;}
     
    else{
    Lots=Firstlot;}
    }

    ولكنها لم تعمل !!
    آخر تعديل بواسطة spiders101 ، 03-09-2012 الساعة 11:30 PM

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

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

    اقتباس المشاركة الأصلية كتبت بواسطة MR.dollar مشاهدة المشاركة
    قد يحدث خطأ أن السيرفر مشغول نظرا لتنفيذ إكسبرت أمر آخر ولذلك يمكنك إستخدام الداله للتأكد
    كود PHP:
    IsTradeContextBusy() 
    أو
    كود PHP:
    IsTradeAllowed() 
    أيضا بالنسبه للإكسبرتات التي تعتمد على إغلاق أكثر من صفقة أو أكثر من عمله فأنا أستخدم المحاولة أكثر من مره حتى أتأكد من إغلاق الإكسبرت تماما
    مثال
    كود PHP:
    int Tried;
     if(
    OrdersTotal()>0&&Tried<20){
     
    //close Orders 
     
    Tried++;
     } 
    استخدمت دالة IsTradeContextBusy مع الأمر Sleep

    ووضع كود لعدد المحاولات ..
    كود PHP:
    if(Use_USD_Profit_Global==true){//Close Total profit for all pairs >>> ACCount profit ||Close Total profit for one pair >>> profit2(OP_BUY)+profit2(OP_SELL)||***ADD Code to CloseOrders() Function
    int triednumber2;
    if(
    OrdersTotal()>0&&triednumber2<20){
    while(
    true)
          {
    if(
    IsTradeContextBusy()){Sleep(1000);} 
    else {      
    if(
    AccountProfit()>=USD_Profit && Use_USD_Profit==true){
    signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
    CloseOrders();}
    if(
    AccountProfit()<=-USD_Loss&&Use_USD_Loss==true){
    signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
    CloseOrders();}
    if(
    AccountProfit()<=-(lossratio*AccountBalance()/100)&&LossRatio==true){
    signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
    CloseOrders();}
    if(
    AccountProfit()>=(profitratio*AccountBalance()/100)&&ProfitRatio==true){
    signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
    CloseOrders();}
    if(
    DayOfWeek()==5&&Hour()==CloseHour&&Closeby_EndofWeek==true){
    signalbuy1=false;signalbuy2=false;signalsell1=false;signalsell2=false;
    CloseOrders();} 
            }
           }
    triednumber2++; 
          } 
         } 
    هل التعديل صحيح ، ولي سؤال دالة OrdersTotal() هنا تعود بعدد الصفقات التي فتحها اكسيبرت محدد أم عدد الصفقات الكلية التي تم فتحها على المنصة(سواء عن طريق اكسيبرت أو يدوي) !!

  14. #2714
    الصورة الرمزية aminefx
    aminefx غير متواجد حالياً عضو المتداول العربي
    تاريخ التسجيل
    Aug 2011
    المشاركات
    78

    افتراضي

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

    أريد المساعدة في إيجاد كود يقوم بإغلاق جميع الأوامر المعلقة(OP_BUYSTOP,OP_SELLSTOP) مع الإبقاء على الأمرين المعلقين الأخيرين فقط.

    وشكرا للجميع
    أرجوا المساعدة من الجميع

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

    افتراضي

    اقتباس المشاركة الأصلية كتبت بواسطة LOveR مشاهدة المشاركة
    غلبتك معاي استاذ اسامه واشكرك علي سرعة الرد اعيد صياغة الفكرة يمكن التبس الوضع القصد هو مثلا شراء بعقد واحد علا تقاطع موفنج باللوت الابتداءي ١ اذا اعطا التقاطع اشاره عكسية والعملية الاولى خسرانه يدخل بعقدين ٢ معاكس اذا جاب التارقت يسكر اذا لا عطا اشاره عكسية ثالثه ندخل بثلاث عقود مع عدم تسكير العقود المفتوحه هذا الهدج الذي اقصده لين تحقيق التارقت لجميع العقود انا احدده. طبعا مع العلم اذا وصل المظاعفه الثالثه والعقود الاولية ماجابت تارقت بس التوتل بوزتف يدخل من جديد اغلب الاكواد الموجودة مضاعفات بس تسكر العقود علا خساره محققه انا ابيها معلقه لين يكون الناتج للعقود موجب هذا الهدج الذي اقصده لانه العقد الاول خسران علا مثلا ١٠ نقاط ودخلت بعقدين هدف خمسه عندما يتحرك السعر معاي ١٥ نقطه يعوض الخساره الاولي للعقد الاول والخمسه ربح طبعا هذي الفكرة طبعا علا المظاعفتين تكون سلبية لكن لو ثلاثه واربع تكون اامن لانه المضاعفات تتجاوز خمسه وسته بالغالب نتيجة التذبذب
    سوف تستخدم نفس الطريقة لكن بدلا من عمل الداله للبحث عن آخر صفقه مغلقه سوف تستخدم آخر صفقه مفتوحه
    وأيضا تقوم بعمل دالة لمعرفة آخر صفقه أغلقت هل هي بيع أو شراء
    مثال
    كود PHP:
    double lastlot(int type){
     for(
    int i=OrdersTotal();i>=0;i--){
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type){
       return(
    OrderLots());
      }
     }
    return(
    0);
    }
    double lastordertype(int type){
     for(
    int i=OrdersTotal();i>=0;i--){
      
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if(
    OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber&&OrderType()==type){
       return(
    OrderType());
      }
     }
    return(-
    1);

    ثم لو إعتمدنا مثلا على تقاطع الموفينج أفريج
    كود PHP:
    double ma_fast=iMA(Symbol(),0,14,0,0,0,1);
    double ma_slow=iMA(Symbol(),0,25,0,0,0,1);
    if(
    ma_fast>ma_slow&&lastordertype()==OP_SELL){
     
    OrderSend(Symbol(),OP_BUY,lastlot(OP_SELL)*2,NormalizeDouble(Ask,Digits),3,0,0,"ea",MagicNumber,0,Blue);

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

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

  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