In this tutorial, Rimantas explains how to find out the reason trade is missing on a client MT4 account or why Client EA delayed it. If Signal Magician did not copy one or more trades, there is always a reason, and now you will learn how to find out.
You’ll also learn how to lower the CPU load on the VPS server or computer by improving MT4 configuration for best performance.
Find out on which computer MT4 client account is running
If you have lots of clients and you are hosting their MT4 accounts on your servers, then first, you need to find out where that specific MT4 account is running.
In the web panel, go to the Users list and search for that account by MT4 Account Number or email.
If you are using Signal Magician 1.9.8, you’ll see the IP address and Windows username in the “Web/EA login” column.
If you are using older SM version, I hope you’ve added the server name and username in the User comments 🙂 If not, then you’ll have to go through all your servers to locate this MT4 account. When you do, add a comment for that user to make it easier to find it next time.
Check Experts Messages on MT4
Open Experts Log
To find out the reason why a trade was missed or delayed you will have to check Experts Logs for that particular MT4 account.
At the bottom of MT4 switch to Experts, right-click on any message and choose View from the menu.
Choose a date range
When Experts Log window loads, you’ll see its name \MQL4\Logs.
It is where all messages from Expert Advisors are stored, and you can search through them in this window.
First, choose the date range.
A customer had a complain that one of the AUDJPY trades is missing on his MT4 account, but we don’t know which one. All we know is that it happened this week, and for some reason, Client EA did not copy that trade.
We’ll set the date range for the last two weeks (approximately).
Find messages with the word “AUDJPY”
We are looking for messages about AUDJPY trades, so I type AUDJPY and click on Request.
Important: the search is case sensitive which means AUDJPY and AudJpy search terms are treated differently. In our case, we won’t find anything for AudJpy.
MT4 shows me all the messages with the AUDJPY between 1st and 13th of September 2019.
I get 80 records, which is too much to analyze, and most of them are irrelevant in our situation.
But in case you need to look through them all now you know how to find them.
However, two records caught my attention. I highlight them in yellow.
Let’s narrow the search to the word DELAYED and see what comes up.
Find messages with the word “DELAYED”
A search for DELAYED gives me two results. Now I have two trade numbers from the master account to look into.
Reasons why Client EA can delay the trades:
– Price deviation is too big. For example, max allowed price deviation is 10 pips, but the trade is already 15 pips away from the open price;
– Broker does not permit to place a trade because the entry price is too close or too far from current market prices (Ask/Bid). The broker sets minimum allowed distance;
– FIFO restrictions on U.S. trading accounts when there is another trade already running on the same instrument but in the opposite direction;
– The market is closed, or the broker is performing a rollover (usually happens at midnight and might take from 1 to 20 minutes);
– Followers are allowed to copy particular SP trades only when SP account is in a drawdown of X%;
– Client EA is set to delay all pending orders for X seconds;
– Client EA is set to delay all pending orders without SL/TP for X seconds to place them in one take;
– Client EA has a filter of max trade count enabled, and the limit is reached;
– Stop loss is not set yet on the master trade, and Client EA is set to risk X% per trade. EA needs to know stop loss to calculate lot size for the trade risking X%;
– Account equity is below X and the Client EA has this filter enabled;
– Margin limit of 70% was reach and the Client EA has this filter enabled;
– Client EA is set to accept only the trades with a minimum SL/TP size of X pips, and it is currently too small on the master side;
I search for more messages related to the master trade #34179024, and I see that Client EA copied it as #82471632 on the client MT4 account.
Let’s look for more messages about the #82471632 client trade.
In the search for messages related to #82471632, I get the additional information and also see that it took 546 ms to execute a trade. It is how much time it took a new trade request to travel to the broker server and get a confirmation back.
I would typically expect to see this below 100 ms, but 546 ms is not a disaster.
All is fine here. Client EA copied this trade. Now let’s take a look at another trade from the SP.
A quick search for messages related to the master trade #34180615 reveals that it was delayed because of the maximum allowed price deviation of 10 pips. In this case, it was 11.9 pips. It means that at the time Client EA received this trade, the market was already 11.9 pips away, and it was too late to copy it.
In such case, the Client EA will wait for the price to get back into the allowed deviation range and then try to copy a trade.
However, for this trade, it never happened. The market did not return to this price, and the Client EA never got a second chance to copy this trade.
While it is not a pleasant experience to have missed trades, it is essential to understand that it is an inevitable part of trading.
We cannot expect that the software will copy all trades. It is the same as we do not expect every trade to be a winner.
Think of it like when the airlines lose luggage. There’s always some small percentage of baggage that gets lost.
In copy trading, there is always a possibility for various issues like:
– Internet connection problems;
– Broker delays;
– High volatility in the markets which results in high spreads and slippages;
– Computer or VPS server overload (temporary or permanent);
– Broker connection timeouts;
How long it took for the Client EA to receive the trade?
Another critical thing to check is the time difference between the master trade open time and the time when the Client EA received it.
The message in the screenshot above shows us that the Client EA received a trade #34180615 at 15:55:55.
Knowing that there is a time difference of 1 hour, 59 minutes and 55 seconds between the VPS server and the broker, we assume that the master trade was opened at around 17:55:50.
Let’s check when was the master trade opened. We’ll find this info in the web panel.
The master trade was opened at 17:53:02, which would be about 15:53:07 in the VPS server’s timezone.
The difference between the 15:53:07 (actual trade open time) and 15:55:55 (when the Client EA received a trade) is 168 seconds. That’s 2 minutes and 48 seconds difference.
It means the Client EA received the trade 2 minutes and 48 seconds later.
That is not good news.
Let’s gid deeper into the log messages and see if we can find more useful information.
Find messages with the word “ATTENTION”
I search for messages with the word ATTENTION.
It gives us more messages which shows more problems.
I see four other trades that got delayed for up to 74 seconds. That’s a lot.
The message “ATTENTION! Delay of approx. 74 seconds detected to receive and copy master order #XXXX” means the Client EA copied the trade, but it took 74 seconds. That’s not normal. Client EA should copy the trades in about 1 second.
I see that all these messages recorded on the 12th of September at around 12:51, 14:46, and 15:51.
We also know there was another trade received too late by almost 3 minutes at 15:55.
Now we know that there were some problems between 12:51 and 15:55 on this VPS server.
Between 1st and 11th of September, there were no trades delayed or missed so apparently something happened with the VPS server or internet connection on 12th of September.
The next step would be to contact the VPS provider about this.
But let’s look for more messages so we can send them to the VPS provider as proof.
Find messages with the word “Delay”
I search for the word Delay, and I immediately see that on other days the trades were copied in about 1 second. Everything was fine until September 12th.
And even on September 12th, there were trades copied in 1 second. But then some trades got delayed or missed.
Find messages with the word “ERROR”
I try to look for other error messages by typing the word ERROR in the search box.
It did not find any messages between September 1-12, so I set the date range to several months.
Then I found a few error messages in July and August.
Those are irrelevant for this case, so I move on. I wanted you to see what else you can search for in the MT4 logs.
Find messages with the word “IGNORED”
I search for other messages by typing the word IGNORED in the search box.
I found one message in August which tells me that Client EA ignored a not copied a trade to avoid duplicate.
Let’s look at what I will find if I type a trade number in the search box.
A quick search by a trade number reveals there was no connection with the broker trade server at around 17:01:18.
It says the trade was not copied, but actually, it was.
Sometimes this happens when there are connection problems to the broker server. The broker server receives a request to open a trade, broker opens a trade, but then fails to send the confirmation back. It makes Client EA think the trade did not copy.
But as you can see, on the second attempt to copy that trade the Client EA ignored it. It turns out that the broker executed it already even though the confirmation did not reach the Client EA a moment ago because of the connection issues.
Client EA has multiple smart algorithms to detect and avoid duplicates.
Client EA can ignore the trades for various reasons such as:
– The trade is already running on this account and will not be copied again to avoid duplicates;
– Instrument (currency pair) does not exist on the client account;
– Instrument (currency pair) is not on the Market Watch list, and Client EA fails to enable it. It rarely happens, but in such a case, MT4 does not allow the EA to open a trade for that instrument. You’ll have to add the instrument to the Market Watch list manually yourself if you find such error;
– Client EA is set not to accept new trades from a particular Signal Provider;
– External trade filter(s) for that instrument are enabled and prevented a trade copy;
– Trading session filter or a Daily time filter is enabled and prevented a trade copy;
– Client EA is set not to copy positions from certain weekdays;
– Client EA is set not to copy certain positions type (i.e., not copy BUY trades);
– Client EA is set not to trade a particular instrument (currency pair);
– Client EA is set to have a limited number of trades;
– Price deviation of X pips prevented the trade from being copied. For example, a maximum price deviation of 10 pips will not allow copying a trade which is 15 pips away from the open price;
– Broker does not allow lot sizes smaller or bigger than X;
– Client EA is set to ignore the trades smaller or bigger than X;
– Client EA is set to ignore the trades with an SL or TP bigger or smaller than X pips;
– Client EA is set to accept trades only with specific magic numbers;
– Client EA is set to accept trades only with particular trade comment;
Find messages with the words “connection status”
It is also useful to search for words connection status as they’ll show us the time when the Client EA disconnected and then connected to the broker server.
Note that these disconnects do not necessarily mean a bad thing. Many times it takes 1 second for the MT4 to get back online, and I suspect this is happening because MT4 is auto-connecting to a better access point (I explain this further in this tutorial).
But you will see sometimes there’s a difference of more than 20 seconds or even a few minutes between the time MT4 disconnected and connected again. That is not good, and you should explain it as a problem to the VPS provider.
Note that it is not necessarily VPS provider’s fault as it might be the problem with the connection on the broker side or even somewhere in between.
I know many traders think that because Forex brokers are huge corporations, their servers never suffer from internet connection issues or any other problems. Every server in the world suffers from all kinds of problems, one time or another.
Maybe Forex broker server management team is performing an upgrade? Or perhaps primary internet connection line got cut off due to roadworks, and everything gets reconnected through a backup line which is not fast enough? Or maybe an air conditioner got broken in the server room, and everything is overheated now. We never know.
Find messages with the words “delay of”
Another useful search is by using the words “delay of“.
It will give us messages which show trade execution delay.
It is exact time it took for the trade action request to reach the broker server, get executed, and then return a confirmation.
In many cases, we see it is around 200ms. But there are cases when it took more than 500ms. It is not a disaster, but it would not hurt to improve this.
Check for error messages in the Journal
Another place where you can find error messages is the Journal tab.
These messages are from the broker server or the MetaTrader 4 platform. Expert Advisors cannot print messages to the Journal tab.
Switch to the Journal tab at the bottom of MT4, right-click on any message and choose View.
Find messages with the word “fail”
The Journal log window is called \Logs.
It is different from the previous window we’ve been using to find log messages.
I set the date range from 1st of September and search for the word fail.
I get a few results which tell me when exactly MT4 lost connection with the broker server.
None of those happened on the 12th of September, so I’ll look for something else.
We never know the reason for connection issues, but it might be one or a few of the following:
– Internet connection problems on the VPS server;
– Internet connection problems on the broker server;
– Internet connection problems somewhere in between our VPS and broker server. There might be one or even ten other servers in between your MT4 and broker trade server (usually called hops by network administrators);
– VPS server overload;
– Broker server overload;
These reasons are out of our control. But we can improve the situation by choosing another VPS server location.
Ask your VPS provider if they can offer you another server location to be as close as possible to your broker trade servers.
For example, if your clients are trading with IC Markets, which have their servers in New York, but you host client MT4 platforms in Europe, there’s a higher chance for connection problems.
It does not mean that there won’t be any problems if you host your client MT4s in New York next to the IC Markets server. No one can guarantee that, but there’ll be fewer chances for network failures.
Find messages with the word “ping”
If I search for word ping, I see the latency of access points that MT4 connected to.
The access point is also known as data center, broker server, or trade server. In other words, it’s a server on the broker side which accepts all trading request from MT4 and Expert Advisors.
I can see that mostly the ping is around 100 ms or less. It is always good to have a ping as small as possible, but if you are not scalping, then anything below 100 ms is considered reasonable.
The ping will get lower if you move your VPS server closer to broker servers.
Another interesting thing to note is that MT4 auto-connecting to a better access point automatically. That’s a good thing, but this raises additional questions about what happens during the re-connection to another access point.
What if EA sends a new trade to the broker at the very same time?
Will it get delayed?
Will EA get a timeout?
Display only error messages
Journal log window also allows you to filter through error messages only.
It is the fastest way to see errors in the Journal log.
However, none of these errors happened on September 12, so they are irrelevant to my case today.
Check computer or VPS load
It is always a good idea to check if the computer is not overloaded.
We can see computer load in the Task Manager, which you can access from the Windows Task Bar at the bottom of the screen.
In the Performance tab, we can see CPU usage and also Physical Memory usage.
It is recommended to keep them below 70%.
Currently, CPU is at 23%, but during high volatile market times when the prices change and move very fast (on all MT4 terminals on this server), the CPU load will rise significantly.
The CPU load is sitting at 23% when the markets are calm, and there are no open trades. But it will shoot up to 50% or 70% in seconds and stay there for hours (depending on the market conditions) when the market volatility increases.
In the Processes tab, we can see the CPU load for each process (each MT4 terminal).
If I click on a “CPU” column, I’ll get it sorted by highest to lowest.
It is normal to see the “System Idle Process” at the top, you can ignore it.
But it would be a bad thing to see any of the terminal.exe files at the top with a high CPU load (i.e., 10% or more).
Note that CPU usage is 30% now. It always fluctuates in a range. Make sure it is below 70% to have some room for the times when the market volatility increases.
If I sort by Memory, I’ll see all terminal.exe processes consume less then 100MB of memory. It is usually between 50MB to 100 MB.
If MT4 consumes more than 300MB memory, it either has too many Expert Advisors and indicators on it, or there’s some other reason worth looking into.
Note that your VPS provider might limit the available memory for each MT4. In such a case, you will see MT4 consuming around 50MB memory (as an example). MT4 will run slow, keeps hanging and not responding, and can even crash unexpectedly. I’ve seen this with some VPS very reputable providers, and it is not a good practice to run MT4 with such limitations.
If the memory limit is 300MB per MT4, then I don’t mind it, but you need to know what EA you are using and how much memory it needs.
Client EA seems to work pretty fine and consume only around 100MB memory. Sometimes more, sometimes less.
Note that CPU usage is 39% now. As I mentioned earlier, it is never stable and always fluctuates in some range. Make sure it is below 70% to have some room for the times when the market volatility increases.
Improve MT4 performance by lowering the resources it use
To improve MT4 performance, you need to lower the resources it uses.
One of the fastest ways to do this is to hide unnecessary instruments from the Market Watch.
In the above image, there are several hundreds of instruments on the list, and a few times every second, MT4 downloads new price information for all of them (Bid, Ask).
If you are using only 5 or 15 instruments from that list, why you let MT4 waste its resources to download and display the information for other 300+ instruments?
And if 32 terminals are running on the VPS server, then there are 32 x 300 = around 10,000 unnecessary instruments to receive the same information many times every second.
Don’t waste computer resources like that and hide unnecessary instruments.
It is effortless to hide the instruments from the Market Watch window.
Right-click on any instrument from the list and click on Hide All. MT4 will hide all instruments except the ones that you are currently using.
When a new trade arrives at the Client EA, and there’s no such instrument on the list, the Client EA will automatically enable it and copy the trade.
By hiding unnecessary currency pairs from the Market Watch, you’ll drastically increase available resources on the server and MT4 will consume less CPU power.
It means fewer chances for delays, missed trades, slippages, etc.
Above is the example of a Market Watch window with just a few necessary currency pairs visible.
I went through all 100+ MetaTrader 4 platforms on this VPS server, and I hide all unnecessary instruments from the Market Watch.
In just a few minutes after I hide all unnecessary instruments, the CPU load dropped from around 30% to 14%.
Now it is fluctuating in a range between 14% and 25% while previously it was in a range from 23% to 39%.
That’s a significant improvement.
Check what market conditions were at a specific time
Open the chart of particular currency pair
In our case, we are analyzing why Client EA did not copy AUDJPY trade.
So we will analyze the AUDJPY chart.
I right-click on AUDJPY and choose to open a new Chart Window.
There was a sudden price move to the downside by 34 pips in just 3 minutes.
The trade got opened on the master account at that time around 17:53. Market volatility was quite high at this time, and it is just one pair. There were hundreds of other instruments in the Market Watch across 100+ MetaTrader 4 terminals on this VPS server.
There’s no surprise some Client EAs missed the trade or delayed it by a minute or so because the VPS server got overloaded during such volatile market time.
As you already know, CPU load can jump 2x or 3x from its regular load. So if the regular CPU load is around 30%, it might increase to 60% or 90% when market volatility rises.
A few ways to decrease load CPU and make the VPS/computer consume fewer resources:
1) Hide unnecessary instruments from the Market Watch window in all MT4 terminals;
2) Remove irrelevant indicators from all MT4 terminals. Dedicate VPS server for trade copying only. Have just MT4 and Client EAs and nothing else running on the VPS;
3) If you need to run any other EAs or indicators on the same MT4 accounts, then put them on another VPS. You can log into the same MT4 accounts on multiple machines;
4) Close and remove any unnecessary software from the VPS server;
5) Do not use any image as a background on a VPS server because it slows it down;
We have found some connection and other errors in the MT4 log files.
It is now clear that the VPS server probably got overloaded at around 17:53 (broker time).
I say “probably” because we don’t have a history which takes snapshots of CPU load every minute or so. Although, that’s a good idea to consider for improvement.
But we already saw a drastic improvement in VPS server speed as I lower the CPU load. It allows me to think that the problem, after all, was an overloaded VPS server when the market volatility was high.