Im having a problem with my Order Management Function. I have multiple open positions (15) and I only want to close a select few (7). If I count forward while selecting the orders to manage ,it only closes the most recently open order that meets my criteria.
for(cnt = 0; cnt < OrdersTotal(); cnt++){
But if I count Backwards it closes the first one opened then gives me a stack overflow error...
for(cnt=OrdersTotal();cnt>0;cnt--){
Close Ticket Function...
I would like it to close all my orders that meet the criteria.... does anyone here see what I have done wrong?
Thanks.
for(cnt = 0; cnt < OrdersTotal(); cnt++){
But if I count Backwards it closes the first one opened then gives me a stack overflow error...
for(cnt=OrdersTotal();cnt>0;cnt--){
PHP Code
void ManageOrders(){ RefreshRates(); MarketDirection(); //check Market Direction int cnt; for(cnt = 0; cnt < OrdersTotal(); cnt++){ //for(cnt=OrdersTotal();cnt>0;cnt--){ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if (OrderProfit() > 0 && OrderType() == OP_BUY){ C_Ticket = OrderTicket(); C_Price = Bid; C_Slippage = 0; CloseTicket(); //break; } if (OrderProfit() > 0 && OrderType() == OP_SELL){ C_Ticket = OrderTicket(); C_Price = Ask; C_Slippage = 0; CloseTicket(); //break; } } }
Close Ticket Function...
PHP Code
void CloseTicket(){ int ticket=0; int err=0; int c = 0; int Attempts = 3; for(c = Attempts ; c > 0; c--){ RefreshRates(); if(CheckBid != Bid){ break; } ticket=OrderClose(C_Ticket,OrderLots(),C_Price,C_Slippage,White); if (ticket > 0) {Print (" Order Symbol : "+OrderSymbol()," Order Type : "+OrderType()," Lots : "+OrderLots()," Open Price : "+OrderOpenPrice()," Stop Loss : "+OrderStopLoss()," Take Profit : "+OrderTakeProfit()," Order Magic : "+OrderMagicNumber()," Open Time : "+OrderOpenTime(),"Order was open for : ",TimeToStr(TimeCurrent()-OrderOpenTime(),TIME_MINUTES|TIME_SECONDS)," EA Took ",GetTickCount() - TickStart," milliseconds" ); break; } err=GetLastError(); if(err==0 || err==2 || err==4 ||err==6 || err==8 || err==9 || err==64 || err==128 || err==132 || err==133 || err==137 || err==139 || err==141 || err==146){ //Sleep and retry errors Print("....................... Sleep And Retry Error Code= ", err," "+ErrorDescription(err)); Sleep(10); continue; } if(err==135 || err==136 || err== 138){ // price change errors Print ("..................Invalid Price "+ OrderTicket() + " .............."); //WindowScreenShot("S_REQUOTE_"+Month()+"_D"+Day()+"_H"+Hour()+"_M"+Minute()+"_S"+Seconds()+".gif",1440,900); Print("....................... Price Error Code= ", err," "+ErrorDescription(err)); entry criteria break; } else{ // other errors Print(".......................Error Code= ", err," "+ErrorDescription(err)); break; } } }
Thanks.
Keep it simple stoopid....