void UpdatePositions() { OrderExecutionSourceStub stub = _stub; FXCMConnectionManager manager = Manager; if (stub == null || manager == null) { return; } List <AccountInfo> accounts = stub.Accounts; if (accounts.Count == 1) {// Update all positions on the account. // When a position is not returned, it means no position on that symbol. List <PositionInfo> positionsInfosList = manager.GetPositions(); Dictionary <string, PositionInfo> inputPositionsInfos = new Dictionary <string, PositionInfo>(); lock (this) { foreach (PositionInfo info in positionsInfosList) { inputPositionsInfos.Add(info.Symbol.Name, info); // Update history with latest input. _positionsInfos[info.Symbol.Name] = info; } positionsInfosList.Clear(); // Check if any positions were not reported (meaning they have 0 value on them). foreach (PositionInfo info in GeneralHelper.EnumerableToList <PositionInfo>(_positionsInfos.Values)) { if (inputPositionsInfos.ContainsKey(info.Symbol.Name) == false && (info.Volume.HasValue == false || info.Volume != 0)) {// 0 position, update. PositionInfo updatedInfo = info; updatedInfo.Volume = 0; _positionsInfos[updatedInfo.Symbol.Name] = updatedInfo; positionsInfosList.Add(updatedInfo); } else { positionsInfosList.Add(info); } } } stub.UpdatePositionsInfo(accounts[0], positionsInfosList.ToArray()); } else { SystemMonitor.OperationError("Failed to establish account for positions update."); } }