// 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); }