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 ();