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....