I have reciently noticed that my FXCM accounts behave bizarre regarding the spread. In the market watch window of my demo account I see very small spreads 1.18020-1.18021 in EURUSD now. The MarketInfo(Symbol(),MODE_SPREAD) command returns a spread congruent with the market watch window, but the bid and ask lines that are automatically drawn in the charts are inconsistent with the bid/ask values in the market watch (these lines show a spread 1.18010-1.18030, wider than the market watch's).
My questions, in case someone can help me, are:
1)What spread is correct, the one shown in the market watch, or the one drawn in the charts?
2)Why there is such difference.
3)How can I fix this error?
Thank you very much
1 Correct is the market watch window. Candlestick chart is incorrect.
2. No idea, my guess is they have a single feed for multiple account types.
3. You can't, but you may add indicator that draws lines with the MQL Ask and Bid values on the candlestick chart. See https://www.forex-tsd.com/metatrader-4/32924-metatrader-known-bugs-75.html
Thank you for the answer.
1) If chart is incorrect, the historical data is incorrect (I guess) and the indicators (that I guess they use that wrong data) will show wrong values. The thing is that I can print true bid/ask lines, but the candles are being printed wrongly. What about the execution of an EA? Do they use the data coming from the chart for their internal calculations, or from the market watch? If they use the chart info, the EA behaviour will be wrong too!
2)I think so. My real account and demo account have different market watch values, but the same bid/ask in the charts.
3)The new bid/ask lines would be correct, but inconsistent with the bars and therefore very bizarre to follow the market, I think.
I've asked FXCM too to know their opinion.
Here is a example using FXCM demo server:
Maybe it is related to the fact that FXCM recently have reduced their spread. It is just like some specific config for graphs have not been updated accordingly.
This issue is caused by the Broker having a different feed for the Market Watch and the Charts.
The Market watch has the correct bid/ask/spread which will be used by the Broker for all order executions (deal entry triggers, stop loss and take profit)
You can use the following code snippet to show you any difference
double chartBid = iClose(NULL, PERIOD_CURRENT, 0);
double marketWatchBid = MarketInfo(NULL, MODE_BID);
if (chartBid != marketWatchBid)
Comment("Market Watch vs Chart : ", DoubleToStr(marketWatchBid, Digits), " vs ", DoubleToStr(chartBid, Digits), " Points : ", DoubleToStr((marketWatchBid - chartBid) / Point, 0));
To resolve this conflict in you indicators or EA you should only use the Market watch prices (Bid/Ask) for order execution.
This means you should change your code and replace "Bid" with iClose(NULL, PERIOD_CURRENT, 0) when comparing chart values.
But ALWAYS use MarketInfo(NULL, MODE_BID) (or Bid for shorthand) when executing orders.
To add comments, please log in or register