コード例 #1
0
        private void OnExchangeUpdatePosition(PBPosition rsp)
        {
            lock (PositionVMCollection)
            {
                var positionCollection = PositionVMCollection.Where(p =>
                                                                    p.Contract == rsp.Contract && (int)p.Direction == rsp.Direction);

                foreach (var positionVM in positionCollection)
                {
                    if (positionVM != null)
                    {
                        if (rsp.PositionDateFlag == (int)PositionDateFlagType.PSD_TODAY)
                        {
                            if (rsp.TdPosition > 0)
                            {
                                positionVM.TdCost = rsp.TdCost / rsp.TdPosition * positionVM.TdCost;
                            }
                        }
                        else
                        {
                            if (rsp.YdPosition > 0)
                            {
                                positionVM.YdCost = rsp.YdCost / rsp.YdPosition * positionVM.YdCost;
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        private void UpdatePosition(PBPosition rsp)
        {
            lock (PositionVMCollection)
            {
                PositionVM positionVM = PositionVMCollection.FirstOrDefault(p =>
                                                                            p.Contract == rsp.Contract && (int)p.Direction == rsp.Direction && p.Portfolio == rsp.Portfolio);

                if (rsp.TdPosition == 0 && rsp.YdPosition == 0)
                {
                    if (positionVM != null)
                    {
                        PositionVMCollection.Remove(positionVM);
                    }

                    if (!PositionVMCollection.Any(p => p.Contract == rsp.Contract))
                    {
                        PositionContractSet.Remove(rsp.Contract);
                    }
                }
                else
                {
                    if (positionVM == null)
                    {
                        var contractInfo = ClientDbContext.FindContract(rsp.Contract);
                        positionVM = new PositionVM
                        {
                            Contract         = rsp.Contract,
                            Exchange         = rsp.Exchange,
                            Portfolio        = rsp.Portfolio,
                            Direction        = (PositionDirectionType)rsp.Direction,
                            HedgeFlag        = (HedgeType)rsp.HedgeFlag,
                            PositionDateFlag = (PositionDateFlagType)rsp.PositionDateFlag,
                            Multiplier       = contractInfo == null ? 1 : contractInfo.VolumeMultiple,
                            TodayPosition    = rsp.TdPosition,
                            YdPosition       = rsp.YdPosition,
                            OpenVolume       = rsp.OpenVolume,
                            CloseVolume      = rsp.CloseVolume,
                            OpenAmount       = rsp.OpenAmount,
                            CloseAmount      = rsp.CloseAmount,
                            TdCost           = rsp.TdCost,
                            YdCost           = rsp.YdCost,
                            OpenCost         = rsp.OpenCost,
                            Profit           = rsp.Profit,
                            CloseProfit      = rsp.CloseProfit,
                            UseMargin        = rsp.UseMargin,
                        };

                        PositionVMCollection.Add(positionVM);
                        PositionContractSet.Add(rsp.Contract);

                        OnPositionUpdated?.Invoke(positionVM);
                    }
                    else
                    {
                        positionVM.OpenVolume  = rsp.OpenVolume;
                        positionVM.CloseVolume = rsp.CloseVolume;
                        positionVM.OpenAmount  = rsp.OpenAmount;
                        positionVM.CloseAmount = rsp.CloseAmount;
                        positionVM.OpenCost    = rsp.OpenCost;

                        if (positionVM.YdPosition != rsp.YdPosition || positionVM.TodayPosition != rsp.TdPosition)
                        {
                            positionVM.TodayPosition = rsp.TdPosition;
                            positionVM.YdPosition    = rsp.YdPosition;
                            OnPositionUpdated?.Invoke(positionVM);
                        }
                    }
                }
            }
        }