示例#1
0
        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.");
            }
        }