my EA working at daily time and I want Delete Pending order after 2 Day But , my Code don't work true .
Hi,
What do you mean ? The pendings are not deleted I suppose ?
OrderDelete() is a function which returns a bool, if false that means you have an error, print the error code to know what happened. Please read the documentation.
Your orderdelete() function is only called if BuyMode is true and BuyMode will only be true on a Wednesday.
Code is only executed on the first tick of the bar. If you miss that incoming tick, no execution.
PS. it is not a good idea to name functions "orderdelete", especially when posting your code as it is easily misread and confused with the standard function "OrderDelete". Better to use something like "DeletePending"
Your orderdelete() function is only called if BuyMode is true and BuyMode will only be true on a Wednesday.
Code is only executed on the first tick of the bar. If you miss that incoming tick, no execution.
PS. it is not a good idea to name functions "orderdelete", especially when posting your code as it is easily misread and confused with the standard function "OrderDelete". Better to use something like "DeletePending"
Thanks for your reply (GumRai and angevoyageur)
I show my problem in the picture below
bool BuyMode; bool SellMode; double slB; double slS; extern double Price_Distance=10; extern double LotSize=0.2; int ticket ; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { // BUY AND SELL MODES------------------------------------------------+ if (Volume[0]>1) return(0); BuyMode = ((iRSI(NULL,0,2,PRICE_CLOSE,1)<10)); SellMode = ((iRSI(NULL,0,2,PRICE_CLOSE,1)>90)); // StopLoss & TakeProfit---------------------------------------------+ // slB = iLow (Symbol(), 0 , iLowest (Symbol(),0,MODE_LOW , 2 , 0) ); // slS = iHigh(Symbol(), 0 , iHighest(Symbol(),0,MODE_HIGH, 2 , 0) ); //Orders Counting & Close Orders------------------------------------+ int orderscnt=0; for(int i=OrdersTotal()-1;i>=0;i--) { //-------------------------------------- OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if((OrderSymbol()==Symbol()) && ((OrderType()==OP_SELL) || (OrderType()==OP_BUY))) { orderscnt++; } //-Close Positione Buy if if((OrderSymbol()==Symbol()) && (OrderType()==OP_BUY) && (iRSI(NULL,0,3,PRICE_CLOSE,1)>75)) { OrderClose(OrderTicket(),OrderLots(),Bid,1,Black); } //-Close Positione Sell if if((OrderSymbol()==Symbol()) && (OrderType()==OP_SELL) && (iRSI(NULL,PERIOD_D1,2,PRICE_CLOSE,1)<30)) { OrderClose(OrderTicket(),OrderLots(),Ask,1,Black); } } // Buy AND Sell Orders ----------------------------------------------+ if((BuyMode) && (orderscnt<5)) { orderdelete(); ticket=OrderSend(Symbol(),OP_BUYSTOP,LotSize,High[1],2,slB,0,"Nothing",123456789,0,Blue); } if((SellMode) && (orderscnt<5)) { orderdelete(); ticket=OrderSend(Symbol(),OP_SELLSTOP,LotSize,Low[1],2,slS,0,"Nothing",123456789,0,Red); } return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ void orderdelete() { int maxDuration = 60 * 60*24*2; for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) && OrderSymbol()== Symbol()){ int duration = TimeCurrent() - OrderOpenTime(); if (duration >= maxDuration) OrderDelete( OrderTicket()); } return(0); }
I'm new to mql4 but i think this will work for you.
in the ordersend use TimeCurrent()+ExpirTime
if (Volume[0]>1)
Bars is unreliable (a refresh/reconnect can change number of bars on chart) volume is unreliable (miss ticks) Always use time. New candle - MQL4 forum
OrderDelete( OrderTicket());
Check your return codes and find out why. What are Function return values ? How do I use them ? - MQL4 forum and Common Errors in MQL4 Programs and How to Avoid Them - MQL4 Articles- Your orderdelete (bad name) does not check if the currently selected order is still pending. It will attempt to delete open orders more than two days old.
- FxTrader_: I'm new to mql4 but i think this will work for you. in the ordersend use TimeCurrent()+ExpirTimeNot all brokers allow expiration time
147
ERR_TRADE_EXPIRATION_DENIED
Expirations are denied by broker

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi to all
my EA working at daily time and I want Delete Pending order after 2 Day But , my Code don't work true .
I don't know where is problem , I hope that you answer me.
thanks