void CloseAllNow() { for (int i = OrdersTotal() - 1; i >= 0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == TRUE) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderCloseTime() == 0) { while (!IsTradeAllowed()) Sleep(100); if (OrderType() == OP_BUY) { if (OrderClose(OrderTicket(), OrderLots(), Bid, slp_X(), Blue) == TRUE) { if (WriteLog == TRUE) Print ("CloseAllNow Activated",";"," OrderTicket"," #",OrderTicket()); } } if (OrderType() == OP_SELL) { if (OrderClose(OrderTicket(), OrderLots(), Ask, slp_X(), Red) == TRUE) { if (WriteLog == TRUE) Print ("CloseAllNow Activated",";"," OrderTicket"," #",OrderTicket()); } } if (OrderType() == OP_BUYSTOP) { if (OrderDelete(OrderTicket()) == TRUE) { if (WriteLog == TRUE) Print ("CloseAllNow Activated",";"," OrderTicket"," #",OrderTicket()); } } if (OrderType() == OP_SELLSTOP) { if (OrderDelete(OrderTicket()) == TRUE) { if (WriteLog == TRUE) Print ("CloseAllNow Activated",";"," OrderTicket"," #",OrderTicket()); } } } } } }
I have yet edit and test to print MagicNumber since today market is closed. But this is the example from the expert log & journal:
2 03:33:18.442 MetaFx v4.2 GBPUSD,M30: open #75608056 sell stop 0.35 GBPUSD at 1.53102 tp: 1.52752 ok 0 03:58:23.206 '1012597': order #75608056 sell stop 0.35 GBPUSD at 1.53102 activated at price 1.53102 -(This is Journal Log, Not Expert Log) 2 03:58:23.569 MetaFx v4.2 GBPUSD,M30: delete #75608055 buy stop 0.35 GBPUSD at 1.54193 sl: 0.00000 tp: 1.54543 ok -(EA then close GU pending order once pending activated) 0 03:58:23.569 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75608055 3 03:59:56.812 MetaFx v4.2 GBPUSD,M30: pending order #75608594 cannot be closed 0 03:59:56.812 MetaFx v4.2 GBPUSD,M30: Order Close On LimitTime; OrderTicket #75608594 Time : 22:59:59 0 03:59:56.812 MetaFx v4.2 GBPUSD,M30: Close: OrderClose Error = invalid ticket 2 03:59:57.152 MetaFx v4.2 GBPUSD,M30: delete #75608594 sell stop 0.37 EURUSD at 1.09967 sl: 0.00000 tp: 1.09617 ok (Why EA on GU close EU pair?) 0 03:59:57.152 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75608594 3 03:59:57.152 MetaFx v4.2 GBPUSD,M30: pending order #75608593 cannot be closed 0 03:59:57.152 MetaFx v4.2 GBPUSD,M30: Order Close On LimitTime; OrderTicket #75608593 Time : 23:0:0 0 03:59:57.152 MetaFx v4.2 GBPUSD,M30: Close: OrderClose Error = invalid ticket 2 03:59:57.521 MetaFx v4.2 GBPUSD,M30: delete #75608593 buy stop 0.37 EURUSD at 1.11400 sl: 0.00000 tp: 1.11750 ok (Why EA on GU close EU pair?) 0 03:59:57.521 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75608593 2 03:41:20.162 MetaFx v4.2 USDJPY,M30: open #75608592 sell stop 0.35 USDJPY at 120.227 tp: 119.877 ok 3 03:59:57.522 MetaFx v4.2 GBPUSD,M30: invalid price 1.53136000 for OrderClose function 0 03:59:57.522 MetaFx v4.2 GBPUSD,M30: Order Close On LimitTime; OrderTicket #75608592 Time : 23:0:0 0 03:59:57.522 MetaFx v4.2 GBPUSD,M30: Close: OrderClose Error = invalid price parameter for trade function 2 03:59:57.904 MetaFx v4.2 GBPUSD,M30: delete #75608592 sell stop 0.35 USDJPY at 120.227 sl: 0.000 tp: 119.877 ok (Why EA on GU close UJ pair?) 0 03:59:57.907 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75608592 2 03:59:57.566 MetaFx v4.2 EURUSD,M30: open #75609945 sell stop 0.34 EURUSD at 1.09967 tp: 1.09617 ok 0 03:59:57.566 MetaFx v4.2 EURUSD,M30: Slippage sent to server = 0 3 03:59:58.795 MetaFx v4.2 GBPUSD,M30: pending order #75609945 cannot be closed 0 03:59:58.795 MetaFx v4.2 GBPUSD,M30: Order Close On LimitTime; OrderTicket #75609945 Time : 23:0:1 0 03:59:58.795 MetaFx v4.2 GBPUSD,M30: Close: OrderClose Error = invalid ticket 2 03:59:59.328 MetaFx v4.2 GBPUSD,M30: delete #75609945 sell stop 0.34 EURUSD at 1.09967 sl: 0.00000 tp: 1.09617 ok (Why EA on GU close EU pair?) 0 03:59:59.328 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75609945 2 03:59:57.905 MetaFx v4.2 EURUSD,M30: open #75609980 buy stop 0.34 EURUSD at 1.11400 tp: 1.11750 ok 3 03:59:57.908 MetaFx v4.2 GBPUSD,M30: pending order #75609980 cannot be closed 0 03:59:57.908 MetaFx v4.2 GBPUSD,M30: Order Close On LimitTime; OrderTicket #75609980 Time : 23:0:0 0 03:59:57.908 MetaFx v4.2 GBPUSD,M30: Close: OrderClose Error = invalid ticket 2 03:59:58.791 MetaFx v4.2 GBPUSD,M30: delete #75609980 buy stop 0.34 EURUSD at 1.11400 sl: 0.00000 tp: 1.11750 ok (Why EA on GU close EU pair?) 0 03:59:58.792 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75609980 2 03:59:59.328 MetaFx v4.2 USDJPY,M30: open #75610001 sell stop 0.34 USDJPY at 120.227 tp: 119.877 ok 0 04:00:02.280 MetaFx v4.2 GBPUSD,M30: Order Close On LimitTime; OrderTicket #75610001 Time : 23:0:5 2 04:01:34.536 MetaFx v4.2 GBPUSD,M30: delete #75610001 sell stop 0.34 USDJPY at 120.227 sl: 0.000 tp: 119.877 ok (Why EA on GU close UJ pair?) 0 04:01:34.536 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75610001 3 03:59:59.329 MetaFx v4.2 GBPUSD,M30: pending order #75610002 cannot be closed 0 03:59:59.329 MetaFx v4.2 GBPUSD,M30: Order Close On LimitTime; OrderTicket #75610002 Time : 23:0:2 0 03:59:59.329 MetaFx v4.2 GBPUSD,M30: Close: OrderClose Error = invalid ticket 2 03:59:59.329 MetaFx v4.2 EURUSD,M30: open #75610002 buy stop 0.34 EURUSD at 1.11400 tp: 1.11750 ok 0 03:59:59.352 MetaFx v4.2 EURUSD,M30: Slippage sent to server = 0 2 03:59:59.746 MetaFx v4.2 GBPUSD,M30: delete #75610002 buy stop 0.34 EURUSD at 1.11400 sl: 0.00000 tp: 1.11750 ok (Why EA on GU close EU pair?) 0 03:59:59.746 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75610002 2 03:59:59.745 MetaFx v4.2 EURUSD,M30: open #75610007 sell stop 0.34 EURUSD at 1.09967 tp: 1.09617 ok 3 03:59:59.747 MetaFx v4.2 GBPUSD,M30: pending order #75610007 cannot be closed 0 03:59:59.747 MetaFx v4.2 GBPUSD,M30: Order Close On LimitTime; OrderTicket #75610007 Time : 23:0:2 0 03:59:59.747 MetaFx v4.2 GBPUSD,M30: Close: OrderClose Error = invalid ticket 0 03:59:59.781 MetaFx v4.2 EURUSD,M30: Slippage sent to server = 0 2 04:00:00.416 MetaFx v4.2 GBPUSD,M30: delete #75610007 sell stop 0.34 EURUSD at 1.09967 sl: 0.00000 tp: 1.09617 ok (Why EA on GU close EU pair?) 0 04:00:00.416 MetaFx v4.2 GBPUSD,M30: Pending Order Closed; OrderTicket #75610007
I have arranged it by OrderTicket so that easy to track the flow.
MetaFX seems to be a MultiAccount Manager - may be that is the problem?
And if you have the same MagicNumbers for different currencies...?
What you show is only that MetaFX applied to a GBPUSD-M30 chart deletes an EURUSD pending order.
I have yet edit and test to print MagicNumber since today market is closed. But this is the example from the expert log & journal:
The CloseAllNow() function looks fine, and the problems reported in this log seem only to be from the CloseLimit() function originally posted, not from CloseAllNow().
What is the IsTradeTime() function? It seems unlikely from context, but if this function has any rules which involve looking at existing open trades, and thus doing an OrderSelect(), that will affect the order which has previously been selected in the loop in CloseLimit().
For example, the following would cause a problem...
bool IsTradeTime(int Hour1, int Hour2) { // Check the time if (TimeHour(TimeCurrent()) < Hour1) return false; if (TimeHour(TimeCurrent()) > Hour2) return false; // And also take this opportunity to block if there are existing trades... // Causes a problem if the calling function expects the selected order not to be changed by this function for (int i = 0; i < OrdersTotal(); i++) { if (OrderSelect(i, SELECT_BY_POS)) { etc... } } }
gooly,
It's not a MAM, its a standalone MT4 and EA with attached to multiple pair. The magicnumber is same to all pair.
jjc,
Yes the problem come from code with the first one I posted. The IsTradeTime is custom function for checking trading time. There is no loop in the function.
However there are some function that using OrderSelect for example for order count. Is it a problem if there multiple OrderSelect ? Or is it an MT4 itself have a bug?
It is easy for testing using one pair but not for multiple pair since strategy tester only allowed for one pair.
Yes the problem come from code with the first one I posted. The IsTradeTime is custom function for checking trading time. There is no loop in the function.
However there are some function that using OrderSelect for example for order count. Is it a problem if there multiple OrderSelect ? Or is it an MT4 itself have a bug?
The point isn't the loop. The point is whether, after doing each OrderSelect() in CloseLimit(), you are calling another function which does another OrderSelect() and changes the selected order.
The selection by OrderSelect() is not private to the function in which you do OrderSelect(). If affects the whole of the EA. Giving you another example of the same thing, the following will not work as intended:
void ExampleFunction() { int myCloseTicket = 12345678; ... if (OrderSelect(myCloseTicket, SELECT_BY_TICKET)) { if (ExampleFunctionWhichChangesOrderSelect()) { // Closes 98765432, not 12345678... OrderClose(OrderTicket(), OrderLots(), Bid, OrderClosePrice()); } } } bool ExampleFunctionWhichChangesOrderSelect() { int testTicket = 98765432; if (OrderSelect(testTicket, SELECT_BY_TICKET)) { // Some test on this other ticket. Doesn't matter what. The point is that // this function does an OrderSelect(), and the selected order inside the // parent function is no longer what it is expected to be return (OrderProfit() > 0); } else { return false; } }
The point isn't the loop. The point is whether, after doing each OrderSelect() in CloseLimit(), you are calling another function which does another OrderSelect() and changes the selected order.
The selection by OrderSelect() is not private to the function in which you do OrderSelect(). If affects the whole of the EA. Giving you another example of the same thing, the following will not work as intended:
I get it. Let me check for redundant looping.
- 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,
I have an EA attached to several pair. The problem is it always disturb each other (closing pending order).
The code for closing is custom function as below;
It disturb only on pending order BUY STOP and SELL STOP. The EA have the same magic number but the code has include filter with current symbol chart but still close other EA order. I dont know what to do.