Bir siparişin seçili olup olmadığı nasıl kontrol edilir - sayfa 12

 
grell :

Peki ben neden bahsediyorum. İşlevlerimin evrenselliği yok, her biri kesinlikle kendi işiyle meşgul. Alım satımı bile ayrı. slowzoll ve tamamen yürütülene kadar işlevi bırakmaz. Öyleyse bırakın sipariş numaraları değişsin, duraklar sürünsün, ancak bilet ve sihir kalacaktır.

Pekala, kapanışla, kendinizi kaptırdınız :)
 
tara :

Pekala, kapanışla birlikte, kendinizi kaptırdınız :)

Henüz kayıp yaşanmadı. Ben bu konuda bir tiranım :)
 
tara :
Hayır, tereyağlı peynir gibi değil, ama dürüstçe yarbay rütbesine ulaştı. Seni kırdıysam özür dilerim :(
Ama hayır, neden güceniyorsun, yanlış bir şey söylediysem kusura bakma ama içtenlikle. :)
 
borilunad :
Ama hayır, neden güceniyorsun, yanlış bir şey söylediysem kusura bakma ama içtenlikle. :)
sürdük.
 
Ant_TL :

Beni yanlış anladın. Nedense insanların yarısı gibi. A() işlevinde seçilen B() işlevindeki sırayı işlemem gerekmiyor. B() işlevi diğer emirlerle çalışır, ne olursa olsun A() işleviyle ilgisi yoktur, B() işlevinin kendi mantığı vardır. Siparişlerin sayısını, toplam kârını sayabilir, sihirli yorumlarını, TP SL'yi vb. izleyebilir. Görev, B() işlevinden A() işlevine geri döndüğünde, B() işlevi siparişlerle ne yaparsa yapsın, işlev A() işlevinin B() işlevini çağırma noktasındaki mantığının A() işlevi tarafından B() işlevi çağrılmadan önce seçilen sıranın artık seçilmemesi ve seçilen sıranın B() işlevinin birlikte çalıştığı başka bir rastgele rastgele sıra olması nedeniyle ihlal edilmemiştir, büyük olasılıkla yineleme bir döngüdeki siparişler aracılığıyla.


Aynı anda sadece bir siparişin seçilebileceğini unutuyorsunuz. Çıktı = tasarruf bankasında siparişlerin bir listesini saklayın (kendi diziniz). bir global değişken lastorder yeterli değil. lastords[ticket][function] gibi bir değişken daha iyi olurdu.
 
//+------------------------------------------------------------------+
//| Description included Functions                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                       ORDERS.mq4 |
//|           Copyright © 2012. XrustSolution. mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012. XrustSolution. mail:xrustx@gmail.com"
#property link      "https://www.youtube.com/user/opmlv http://forexrust.info"
//+------------------------------------------------------------------+
//| Defines and Exports and Includes                                 |
//+------------------------------------------------------------------+
#define  ORDS_TOTAL 100
#define  HIST_TOTAL 100000
//+------------------------------------------------------------------+
//| Orders Property Indexes                                          |
//+------------------------------------------------------------------+
#define  ORD_TICK 0
#define  ORD_LOTS 1
#define  ORD_OPTM 2
#define  ORD_OPPR 3
#define  ORD_STOP 4
#define  ORD_TAKE 5
#define  ORD_CLPR 6
#define  ORD_CLTM 7
#define  ORD_PROF 8
#define  ORD_SWAP 9
#define  ORD_COMM 10
#define  ORD_EXPR 11
#define  ORD_SYMB 12
#define  ORD_COMN 13
//+------------------------------------------------------------------+
//| Extern and Global variables                                      |
//+---externs--------------------------------------------------------+

//+---globals--------------------------------------------------------+
int    gOrdsTotal[7];                     // number open orders
int    gOrdsTicks[ORDS_TOTAL][6];         // array of open ords tickets
double gOrdsProps[ORDS_TOTAL][6][12];     // array of open ords properties
double gPreOrdsProps[ORDS_TOTAL][6][12];
double gOrdsPrf[6];                       // open ords summary profit for order types
double gOrdsLts[6];                       // open ords summary lots for order types
//+------------------------------------------------------------------+
int    gHistTotal[7];                     // number closed orders
int    gHistTicks[HIST_TOTAL][6];         // array of closed ords tickets
double gHistProps[HIST_TOTAL][6][12];     // array of closed ords properties
double gHistPrf[6];                       // closed ords summary profit for order types
double gHistLts[6];                       // closed ords summary lots for order types
//+------------------------------------------------------------------+
//|   Function  :  double iOrdProps(OrderType,PropIndex,Count)       |
//+------------------------------------------------------------------+
double iOrdProps(int type,int indx,int co){int i;double res=0;
   i = gOrdsTicks[co][type];
   if(OrderSelect(i,SELECT_BY_TICKET)){
      if(OrderCloseTime()==0){
         switch(indx){
            case ORD_TICK : res = OrderTicket(); break;
            case ORD_LOTS : res = OrderLots(); break;
            case ORD_OPTM : res = OrderOpenTime(); break;
            case ORD_OPPR : res = OrderOpenPrice(); break;
            case ORD_STOP : res = OrderStopLoss(); break;
            case ORD_TAKE : res = OrderTakeProfit(); break;
            case ORD_CLPR : res = OrderClosePrice(); break;
            case ORD_CLTM : res = OrderCloseTime(); break;
            case ORD_PROF : res = OrderProfit(); break;
            case ORD_SWAP : res = OrderSwap(); break;
            case ORD_COMM : res = OrderCommission(); break;
            case ORD_EXPR : res = OrderExpiration(); break;
            default: res = 0; break;
         }
      }
   }else{
      return(EMPTY_VALUE);
   }
   return(res);
}
//+------------------------------------------------------------------+
//|   Function  :  double fOrdProps(OrderType,PropIndex,Count)       |
//+------------------------------------------------------------------+
double fOrdProps(int type,int indx,int co){return(gOrdsProps[co][type][indx]);}
//+------------------------------------------------------------------+
//|   Function  :  int fOrdsTicket(OrderType,Count)                  |
//+------------------------------------------------------------------+
int fOrdsTicket(int type, int indx = 0){return(gOrdsTicks[indx][type]);}
//+------------------------------------------------------------------+
//|   Function  :  int fOrdsTotal(OrderType)                         |
//+------------------------------------------------------------------+
int fOrdsTotal(int type = 6){return(gOrdsTotal[type]);}
//+------------------------------------------------------------------+
//|   Function  :  double fHistProps(OrderType,PropIndex,Count)      |
//+------------------------------------------------------------------+
double fHistProps(int type,int indx,int co){return(gOrdsProps[co][type][indx]);}
//+------------------------------------------------------------------+
//|   Function  :  int fHistTicket(OrderType,Count)                  |
//+------------------------------------------------------------------+
int fHistTicket(int type, int indx = 0){return(gHistTicks[indx][type]);}
//+------------------------------------------------------------------+
//|   Function  :  int fHistTotal(OrderType)                         |
//+------------------------------------------------------------------+
int fHistTotal(int type = 6){return(gOrdsTotal[type]);}
//+------------------------------------------------------------------+
//|          Function  : int HistRefresh(Magik,Comment,Symbol)       |
//|          Copyright © 2012, XrustSolution.  mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
//|          Description:                                            |
//+------------------------------------------------------------------+
int HistRefresh(int mn=-1,string comm="",string sy=""){int i,ii=0,type;bool iMn=true,iComm=true;
   if(mn<0){iMn=false;}
   ArrayResize(gHistTotal,7);
   ArrayInitialize(gHistTotal,0);
   ArrayResize(gHistProps,ORDS_TOTAL);
   ArrayInitialize(gHistProps,0);
   ArrayResize(gHistPrf,ORDS_TOTAL);
   ArrayInitialize(gHistPrf,0);
   ArrayResize(gHistLts,ORDS_TOTAL);
   ArrayInitialize(gHistLts,0);      
   if(StringLen(comm)<1){iComm=false;}
   for(i = OrdersHistoryTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
         if(OrderType()>5){continue;}
         if(OrderCloseTime()==0){continue;}
         if(sy!=""){if(OrderSymbol()!=sy){continue;}}
         if(iMn){if(OrderMagicNumber()!=mn){continue;}}
         if(iComm){if(StringFind(OrderComment(),comm)<0){continue;}}
         type = OrderType();
         gHistProps[gHistTotal[type]][type][0] = OrderTicket();
         gHistProps[gHistTotal[type]][type][1] = OrderLots();
         gHistProps[gHistTotal[type]][type][2] = OrderOpenTime();
         gHistProps[gHistTotal[type]][type][3] = OrderOpenPrice();
         gHistProps[gHistTotal[type]][type][4] = OrderStopLoss();
         gHistProps[gHistTotal[type]][type][5] = OrderTakeProfit();
         gHistProps[gHistTotal[type]][type][6] = OrderClosePrice();
         gHistProps[gHistTotal[type]][type][7] = OrderCloseTime();
         gHistProps[gHistTotal[type]][type][8] = OrderProfit();
         gHistProps[gHistTotal[type]][type][9] = OrderSwap();
         gHistProps[gHistTotal[type]][type][10] = OrderCommission();
         gHistProps[gHistTotal[type]][type][11] = OrderExpiration();
         gHistPrf[type] += OrderProfit()+OrderSwap()+OrderCommission();
         gHistLts[type] += OrderLots();
         gHistTotal[type]++;// count for ordertypes
         gHistTotal[6]++;// all orders count
         ii++;
      }
   }   
   return(ii);
}
//+------------------------------------------------------------------+
//|          Function  : int OrdsRefresh(Magik,Comment,Symbol)       |
//|          Copyright © 2012, XrustSolution.  mail:xrustx@gmail.com |
//|          https://www.youtube.com/user/opmlv http://forexrust.info |
//+------------------------------------------------------------------+
//|          Description:                                            |
//+------------------------------------------------------------------+
int OrdsRefresh(int mn=-1,string comm="",string sy=""){int i,ii=0,type;bool iMn=true,iComm=true;
   if(mn<0){iMn=false;}
   if(StringLen(comm)<1){iComm=false;}
   ArrayResize(gOrdsTotal,7);
   ArrayInitialize(gOrdsTotal,0);
   ArrayResize(gOrdsTicks,ORDS_TOTAL);
   ArrayInitialize(gOrdsTicks,0);
   ArrayResize(gOrdsProps,ORDS_TOTAL);
   ArrayInitialize(gOrdsProps,0);
   ArrayResize(gOrdsPrf,ORDS_TOTAL);
   ArrayInitialize(gOrdsPrf,0);
   ArrayResize(gOrdsLts,ORDS_TOTAL);
   ArrayInitialize(gOrdsLts,0);
   for(i = OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderType()>5){continue;}
         if(OrderCloseTime()!=0){continue;}
         if(sy!=""){if(OrderSymbol()!=sy){continue;}}
         if(iMn){if(OrderMagicNumber()!=mn){continue;}}
         if(iComm){if(StringFind(OrderComment(),comm)<0){continue;}}
         type = OrderType();
         gOrdsTicks[gOrdsTotal[type]][type] = OrderTicket();        
         gOrdsProps[gOrdsTotal[type]][type][0] = OrderTicket();
         gOrdsProps[gOrdsTotal[type]][type][1] = OrderLots();
         gOrdsProps[gOrdsTotal[type]][type][2] = OrderOpenTime();
         gOrdsProps[gOrdsTotal[type]][type][3] = OrderOpenPrice();
         gOrdsProps[gOrdsTotal[type]][type][4] = OrderStopLoss();
         gOrdsProps[gOrdsTotal[type]][type][5] = OrderTakeProfit();
         gOrdsProps[gOrdsTotal[type]][type][6] = OrderClosePrice();
         gOrdsProps[gOrdsTotal[type]][type][7] = OrderCloseTime();
         gOrdsProps[gOrdsTotal[type]][type][8] = OrderProfit();
         gOrdsProps[gOrdsTotal[type]][type][9] = OrderSwap();
         gOrdsProps[gOrdsTotal[type]][type][10] = OrderCommission();
         gOrdsProps[gOrdsTotal[type]][type][11] = OrderExpiration();
         gOrdsPrf[type] += OrderProfit()+OrderSwap()+OrderCommission();
         gOrdsLts[type] += OrderLots();
         gOrdsTotal[type]++;// count for ordertypes
         gOrdsTotal[6]++;// all orders count
         ii++;
      }
   }   
   return(ii);
}
//+------------------------------------------------------------------+
 
Rüstem, teşekkürler ve iyi bayramlar.
 
Evet, size de Mutlu Bayramlar! yüz "komiser" gram için herkes :)
 
TarasBY :

Kodumda bu hata olmayacak çünkü bu işlev OrderSelect() SONRASI olarak adlandırılıyor. Ve kodun kontrolü, danışmanın tüm yürütülebilir işlevlerinin ortak bir yapısı olmadan kodların yazıldığı zamanlardan beri kalmıştır.

Ayrıca, işlevlerimin çoğunda hata işleme işlevi vardır ve bunlardan çok dikkatli bir şekilde kurtulurum. Ayrıca, aradığınız yanıt gibi bir hata oluşturan bir dizi işlev vardır: "Daha önce bir sipariş seçildi mi, seçilmedi mi?"

Not Bu arada, derlenmiş kitaplıklardan OrderSelect() işlevleriyle çalışmanın bir özelliğini (birisi için yararlı olabilir) hatırladım: bir sıra seçilir (nasıl olduğu önemli değil), OrderTicket() seçilen sıranın numarasını döndürür . Derlenmiş kitaplıkta bulunan bir fonksiyondan bu seçilen sıranın özelliklerini almak istiyorsak, HİÇBİR ŞEY çalışmayacaktır. Bu sırayı tekrar (tekrar) seçmeniz gerekir.

Aslında, hem sipariş işleme döngüleri içinde hem de bu döngüler dışında kullanılabilecek genel amaçlı işlevlerden birinin hata oluşturduğu bir durumla karşılaştım, yani. sipariş seçilmeden önce, bu da hataya neden oldu. Hem herhangi bir sipariş seçildikten sonra hem de ondan önce, hem açık siparişler olduğunda hem de hiçbiri olmadığında kullanılabilen, siparişlerle çalışan evrensel hizmet işlevleri oluşturmak için, aşağıdakine benzer bir mekanizma kullanmanız gerekir. kendimi bu hataya karşı sigortalamam için beni görevlendirdi.

Sıra seçiminin kütüphane modüllerine ve geriye aktarılmaması hakkında, bu konuda daha önce yazmıştım.

 
Ant_TL :

Aslında, hem sipariş işleme döngüleri içinde hem de bu döngüler dışında kullanılabilecek genel amaçlı işlevlerden birinin hata oluşturduğu bir durumla karşılaştım, yani. sipariş seçilmeden önce, bu da hataya neden oldu. Hem herhangi bir sipariş seçildikten sonra hem de ondan önce, hem açık siparişler olduğunda hem de hiçbiri olmadığında kullanılabilen, siparişlerle çalışan evrensel hizmet işlevleri oluşturmak için, aşağıdakine benzer bir mekanizma kullanmanız gerekir. Bu hataya karşı kendinizi güvence altına almak için son sayfada beni ortaya koydu.

Sıra seçiminin kütüphane modüllerine ve geriye aktarılmaması hakkında, bu konuda daha önce yazmıştım.


Kendinizi, her ticaret işlemi için belirli bir sipariş olduğu ve herhangi bir sorun olmayacağı gerçeğine alıştırın. Ve evet, sizi doğru yazmışlar, sadece bir sipariş seçebilirsiniz. Diğer her şey diziler tarafından çözülür.