Loop and use asynchronous mode to make it faster — Documentation on MQL5: Trade Functions / OrderSendAsync
Forum on trading, automated trading systems and testing trading strategies
How To Implement Bulk Operations?
Fernando Carreiro, 2023.02.04 18:18
"Buik operations" are not available via MQL code. You can recreate an equivalente procedure using a loop and asynchronous mode.
Loop and use asynchronous mode to make it faster — Documentation on MQL5: Trade Functions / OrderSendAsync
Thank you for replying. I really appreciate it. I have created a sample code with Async-mode.
I am amazed that it is much faster than before.
Here is the sample script I used for testing.
#include <Trade/Trade.mqh> void OnStart() { ulong st = GetMicrosecondCount(); CTrade sTrade; sTrade.SetAsyncMode(true); // true:Async, false:Sync for(int cnt = PositionsTotal()-1; cnt >= 0 && !IsStopped(); cnt-- ) { if(PositionGetTicket(cnt)) { sTrade.PositionClose(PositionGetInteger(POSITION_TICKET),100); uint code = sTrade.ResultRetcode(); Print(IntegerToString(code)); } } for(int i=0; i<100; i++) { Print(IntegerToString(GetMicrosecondCount()-st) +"micro "+ IntegerToString(PositionsTotal())); if(PositionsTotal()<=0){ break; } Sleep(100); } }
Please note that re-quotes may occur, so you may need to retry or take other measures.
Thanks
#include <Trade/Trade.mqh> void OnStart() { ulong st = GetMicrosecondCount(); CTrade sTrade; sTrade.SetAsyncMode(true); // true:Async, false:Sync for(int cnt = PositionsTotal()-1; cnt >= 0 && !IsStopped(); cnt-- ) { if(PositionGetTicket(cnt)) { sTrade.PositionClose(PositionGetInteger(POSITION_TICKET),100); uint code = sTrade.ResultRetcode(); Print(IntegerToString(code)); } } for(int i=0; i<100; i++) { Print(IntegerToString(GetMicrosecondCount()-st) +"micro "+ IntegerToString(PositionsTotal())); if(PositionsTotal()<=0){ break; } Sleep(100); } }This code is absolutely awesome, it work 100% if you need to close at once 5 or 10 position this is the solution. Thank you so much.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
MT5's 'Bulk Operations => Close All Positions' is much quicker compared to closing positions individually using a 'PositionsTotal()' loop.
Is there another way to close all positions as fast as possible?
Regards