Problems between simulation results and actual trading result. Below are some issue that need to be address.
a) Bid-Ask spread.
This spread is normally between 2 to 4 pips for major currency pair USDJPY, EURUSD, USDCHF, GBPUSD, etc but when there are news and major movement, the spread will increase to 5 to 9 pips and 10 – 15 pips and even 16+ pips and more. This means when you buy, you already receive negative 16+ pips on that trade.
Simulation does not cover this spread as the bid-ask is always base on the latest spread in the MT4 server. Thus, news created wide pips spread are not able to capture and the buy-sell trade are not accurately simulated. This change in pips has to be taken into account when simulating by taking 2 measures. Number 1 is to set the spread limited in your EA to below 8 pips to execute a trade. Anything more then 8 will not execute any trade. Number 2 is to set your profit or trigger level -9 pips then your usual profit level when simulating. This will make sure the spread is take into account.
b) Server availability.
This is limited to the market demand, as more trade enter, the server will be overloaded and cause server busy when you want to buy or sell a currency. Then you have to execute the trade again. In case, the spread will change and affect your trade profits. Different server will have various spread and ask at the same time.Server busy will cause your trade to be invalid.
Simulate does not cover the server busy. So you have to code in a server busy reply from server and to wait 1 or 2 seconds before retry executing the trade again using “IsTradeContextBusy()”. This will allow your EA to retry again when encounter server busy. You may want to have up to 5 times or 1 minute of retry.
c) Log in. This is due to the internet connection with the MT4 server. The account is consistently ping to maintain its loggin status. When internet connection is disrupted, the auto log in will continue and at times you will see a couple of login entry in your journal.
Simulate does not over this login portion. So you have to code in to get data from the server via “RefreshRates()”, This will allow the EA to try login your account prior to executing any trade.
Lastly, if you take into account the above issue, your simulation results can be a benchmark to your live trading result. Thank you