Hello coders !
I am trying to code for accumulating orders in 2D array and unable to get correct results can anyone help me plz
Thanks
I am trying to code for accumulating orders in 2D array and unable to get correct results can anyone help me plz
Thanks
Inserted Code
/* ** say we have many orders open EURUSD Lot 0.01 Magic Number 1212 TimeOpen 12:12 23-11-2010 EURUSD Lot 0.02 Magic Number 1243 TimeOpen 12:15 24-11-2010 EURUSD Lot 0.04 Magic Number 1212 TimeOpen 12:20 24-11-2010 EURUSD Lot 0.02 Magic Number 5512 TimeOpen 15:15 24-11-2010 EURUSD Lot 0.03 Magic Number 1212 TimeOpen 12:17 24-11-2010 EURUSD Lot 0.09 Magic Number 3312 TimeOpen 16:10 24-11-2010 EURUSD Lot 0.07 Magic Number 1212 TimeOpen 13:12 24-11-2010 EURUSD Lot 0.01 Magic Number 5512 TimeOpen 15:25 24-11-2010 EURUSD Lot 0.02 Magic Number 1212 TimeOpen 18:12 24-11-2010 EURUSD Lot 0.01 Magic Number 1212 TimeOpen 20:12 24-11-2010 ========================================= I need result like this * The oldest open order's position must be 1st in array. after closing all orders heaving magic number 1212 the 1243 come in 1st position in array. NoOfOrders(6) Lots 0.18 Magic Number 1212 - Oldest 12:12 23-11-2010 - Latest 20:12 24-11-2010 NoOfOrders(1) Lots 0.02 Magic Number 1243 - Oldest 12:15 24-11-2010 - Latest 12:15 24-11-2010 NoOfOrders(2) Lots 0.03 Magic Number 5512 - Oldest 15:15 24-11-2010 - Latest 15:25 24-11-2010 NoOfOrders(1) Lots 0.09 Magic Number 3312 - Oldest 16:10 24-11-2010 - Latest 16:10 24-11-2010 */ // ** Temporary global variables should move to oOrd() int Latest_Mno, Oldest_Mno; datetime oTime, lTime, new, found; string Sym; double Mas_Ord[200][11], // Mas_Ord[X][1]=open, 2=SL, 3=TP, 4=OrdNo, 5=Vol, 6=OrderType, 7=MagicNo, 8=Comments, 9=OrderProfit, 10=OpenTime Old_Mng[4][7]; // [1][x]=NoOfOrders --- 2= 1stOrder's Time. 3= LastOrder's Time. // [x][1]=found magic numbers ++ int init() {Sym= OrderSymbol();} // --- Main Function call ------------------------------------------------------------------------- int start() { Sync (); oOrd(); Comment("NoOfOrd[0][1] = "+DoubleToStr(Old_Mng[1][1],0)," Oldest = "+TimeToStr(Old_Mng[2][1],0)," Latest "+TimeToStr(Old_Mng[3][1],0)," - Magic "+DoubleToStr(Old_Mng[0][1],0), "\nNoOfOrd[1][2] = "+DoubleToStr(Old_Mng[1][2],0)," Oldest = "+TimeToStr(Old_Mng[2][2],0)," Latest "+TimeToStr(Old_Mng[3][2],0)," - Magic ", "\nNoOfOrd[1][3] = "+DoubleToStr(Old_Mng[1][3],0)," Oldest = "+TimeToStr(Old_Mng[2][3],0)," Latest "+TimeToStr(Old_Mng[3][3],0)," - Magic ", "\nNoOfOrd[1][4] = "+DoubleToStr(Old_Mng[1][4],0)," Oldest = "+TimeToStr(Old_Mng[2][4],0)," Latest "+TimeToStr(Old_Mng[3][4],0)," - Magic ", "\nNoOfOrd[1][5] = "+DoubleToStr(Old_Mng[1][5],0)," Oldest = "+TimeToStr(Old_Mng[2][5],0)," Latest "+TimeToStr(Old_Mng[3][5],0)," - Magic ", "\nNoOfOrd[1][6] = "+DoubleToStr(Old_Mng[1][6],0)," Oldest = "+TimeToStr(Old_Mng[2][6],0)," Latest "+TimeToStr(Old_Mng[3][6],0)," - Magic " ); return(0); } // --- End of Main Function --------------------------------------------------- /* 1= Get oldest order's time * Get the Oldest order's Magic using OldestTime and put it in MagNo[1]; * if another magic number found then put it in to MagNo[2];... & so on */ int oOrd() // Old Orders management --------------------------------------------------------------- { Latest_Mno=0; Oldest_Mno=0; oTime=9999999999999; lTime=0; found=0; for(new=1; new<=Mas_Ord[0][0]; new++) { if (Mas_Ord[new][7]>0) { if (NormalizeDouble(Mas_Ord[new][10],0) > lTime) // Latest { lTime=NormalizeDouble(Mas_Ord[new][10],0); found++; Latest_Mno=NormalizeDouble(Mas_Ord[new][7],0); } if (NormalizeDouble(Mas_Ord[new][10],0) < oTime) // Oldest { oTime=NormalizeDouble(Mas_Ord[new][10],0); found++; Oldest_Mno=NormalizeDouble(Mas_Ord[new][7],0); } } } // --- if (found==0) {return;} else // some orders are found. { Print("found = "+found+", O-Mno "+Oldest_Mno+", L-Mno "+Latest_Mno); } //Print("exit oOrd()"); } // end oOrd() --- int Sync() // Sync server orders to Array --------------------------------------------------------- { int Qnt=0; // Orders counter ArrayInitialize(Mas_Ord,0); for(int i=0; i<OrdersTotal(); i++) // For market and pending orders { if((OrderSelect(i,SELECT_BY_POS)==true) && OrderSymbol()==Sym) { Qnt++; // Amount of orders Mas_Ord[Qnt][1]=NormalizeDouble(OrderOpenPrice(),Digits); Mas_Ord[Qnt][2]=NormalizeDouble(OrderStopLoss(),Digits); Mas_Ord[Qnt][3]=NormalizeDouble(OrderTakeProfit(),Digits); Mas_Ord[Qnt][4]=OrderTicket(); Mas_Ord[Qnt][5]=OrderLots(); Mas_Ord[Qnt][6]=OrderType(); Mas_Ord[Qnt][7]=OrderMagicNumber(); Mas_Ord[Qnt][9]=OrderProfit(); Mas_Ord[Qnt][10]=OrderOpenTime(); if (OrderComment()=="") Mas_Ord[Qnt][8]=0; else Mas_Ord[Qnt][8]=1; } } Mas_Ord[0][0]=Qnt; } // end of Sync ();