// Set array size initially as nothing, but we will resize as needed
double OpenOrders[][NUM_ATTR];
color OpenColor[];
bool CloseForSLSet[];
int LastBars[];
int AddToOpenOrders(int ticket, int slippage, color clr)
{
if (!OrderSelect(ticket, SELECT_BY_TICKET))
{
Print("LibOrdersCS Error: AddToOpenOrders: Could not find ticket: " + ticket);
return(-1);
}
NumOpenOrders++;
int curArraySize = ArraySize(OpenOrders) / NUM_ATTR;
Print("AddToOpenOrders: Current array size is: " + curArraySize);
if (NumOpenOrders > curArraySize)
{
if (ArrayResize(OpenOrders, NumOpenOrders) != NumOpenOrders * NUM_ATTR)
{
Print("LibOrdersCS Error: AddToOpenOrders: ArrayResize OpenOrdersFailed");
return(-1);
}
if (ArrayResize(OpenColor, NumOpenOrders) != NumOpenOrders)
{
Print("LibOrdersCS Error: AddToOpenOrders: ArrayResize OpenColor Failed");
return(-1);
}
if (ArrayResize(CloseForSLSet, NumOpenOrders) != NumOpenOrders)
{
Print("LibOrdersCS Error: AddToOpenOrders: ArrayResize CloseForSLSet Failed");
return(-1);
}
if (ArrayResize(LastBars, NumOpenOrders) != NumOpenOrders)
{
Print("LibOrdersCS Error: AddToOpenOrders: ArrayResize LastBars Failed");
return(-1);
}
}
int i = NumOpenOrders - 1;
OpenOrders[i][i_SYM] = SymbolToDouble(OrderSymbol());
OpenOrders[i][i_TCKT] = ticket;
OpenOrders[i][i_CMD] = OrderType();
OpenOrders[i][i_LOTS] = OrderLots();
OpenOrders[i][i_SL] = CsSL;
OpenOrders[i][i_TP] = CsTP;
OpenOrders[i][i_PRICE] = OrderOpenPrice();
OpenOrders[i][i_SLIP] = slippage; // Used when order is closed
OpenOrders[i][i_MAGIC] = OrderMagicNumber();
OpenColor[i] = clr;
CloseForSLSet[i] = false;
LastBars[i] = 0;
return(i);
}
void RemoveFromOrdersArray(int ticket, bool isPending)
{
int i, idx, curArraySize;
curArraySize = ArraySize(OpenOrders) / NUM_ATTR;
idx = GetOpenOrdersIndex(ticket);
if (NumOpenOrders != curArraySize)
{
Print("LibOrdersCS Error: RemoveFromOrdersArray: OpenOrders array (or NumOpenOrders) is wrong size");
return;
}
Print("RemoveFromOrdersArray: Current array size is: " + curArraySize);
if (idx == -1)
{
Print("LibOrdersCS Error: RemoveFromOrdersArray: Could not remove ticket: " + ticket + " from OpenOrders array");
return;
}
// Sort orders array (move all remaining orders down one)
for (i=idx; i < NumOpenOrders - 1; i++)
{
OpenOrders[i][i_SYM] = OpenOrders[i+1][i_SYM];
OpenOrders[i][i_TCKT] = OpenOrders[i+1][i_TCKT];
OpenOrders[i][i_CMD] = OpenOrders[i+1][i_CMD];
OpenOrders[i][i_LOTS] = OpenOrders[i+1][i_LOTS];
OpenOrders[i][i_SL] = OpenOrders[i+1][i_SL];
OpenOrders[i][i_TP] = OpenOrders[i+1][i_TP];
OpenOrders[i][i_PRICE] = OpenOrders[i+1][i_PRICE];
OpenOrders[i][i_SLIP] = OpenOrders[i+1][i_SLIP];
OpenOrders[i][i_MAGIC] = OpenOrders[i+1][i_MAGIC];
OpenColor[i] = OpenColor[i+1];
CloseForSLSet[i] = CloseForSLSet[i+1];
LastBars[i] = LastBars[i+1];
}
// Resize array, getting rid of last element
NumOpenOrders--;
if (ArrayResize(OpenOrders, NumOpenOrders) != NumOpenOrders * NUM_ATTR)
{
Print("LibOrdersCS Error: RemoveFromOrdersArray: OpenOrders ArrayResize Failed");
return;
}
if (ArrayResize(OpenColor, NumOpenOrders) != NumOpenOrders)
{
Print("LibOrdersCS Error: RemoveFromOrdersArray: OpenColor ArrayResize Failed");
return;
}
if (ArrayResize(CloseForSLSet, NumOpenOrders) != NumOpenOrders)
{
Print("LibOrdersCS Error: RemoveFromOrdersArray: CloseForSLSet ArrayResize Failed");
return;
}
if (ArrayResize(LastBars, NumOpenOrders) != NumOpenOrders)
{
Print("LibOrdersCS Error: RemoveFromOrdersArray: LastBars ArrayResize Failed");
return;
}
}
int GetOpenOrdersIndex(int ticket)
{
int i;
int curArraySize = ArraySize(OpenOrders) / NUM_ATTR;
for (i=0; i < curArraySize; i++)
if (OpenOrders[i][i_TCKT] == ticket)
return(i);
Print("LibOrdersCS: GetOpenOrdersIndex: Could not find ticket: " + ticket + "; returning -1");
return(-1);
}
Comments