public List <CommandSecurityItem> GetCommandSecurityItems(TradeCommandItem cmdItem)
        {
            List <CommandSecurityItem> finalSecuItems = new List <CommandSecurityItem>();
            var cmdSecuItems     = GetTradeCommandSecurities(cmdItem.CommandId);
            var entrustSecuItems = _entrustSecurityBLL.GetByCommandId(cmdItem.CommandId);

            int weightAmount = 0;

            foreach (var secuItem in cmdSecuItems)
            {
                weightAmount = secuItem.CommandAmount / cmdItem.CommandNum;

                CommandSecurityItem csItem = new CommandSecurityItem
                {
                    Selection     = true,
                    CommandId     = secuItem.CommandId,
                    SecuCode      = secuItem.SecuCode,
                    SecuType      = secuItem.SecuType,
                    CommandAmount = secuItem.CommandAmount,
                    CommandPrice  = secuItem.CommandPrice,
                    EDirection    = secuItem.EDirection,
                    CommandCopies = cmdItem.CommandNum,
                    TargetCopies  = cmdItem.TargetNum,
                    TargetAmount  = cmdItem.TargetNum * weightAmount,
                    FundCode      = cmdItem.FundCode,
                    PortfolioName = cmdItem.PortfolioName,
                };

                var entrustedItems = entrustSecuItems.Where(p => p.SecuCode.Equals(secuItem.SecuCode) &&
                                                            p.SecuType == secuItem.SecuType &&
                                                            p.EntrustStatus == Model.EnumType.EntrustStatus.Completed)
                                     .ToList();
                if (entrustedItems.Count > 0)
                {
                    csItem.EntrustAmount = entrustedItems.Sum(p => p.EntrustAmount);
                }

                var dealItems = entrustSecuItems.Where(p => p.SecuCode.Equals(secuItem.SecuCode) &&
                                                       p.SecuType == secuItem.SecuType &&
                                                       (p.DealStatus == Model.EnumType.DealStatus.PartDeal || p.DealStatus == Model.EnumType.DealStatus.Completed))
                                .ToList();
                if (dealItems.Count > 0)
                {
                    csItem.DealAmount = dealItems.Sum(p => p.TotalDealAmount);
                }

                //TODO:待补足数量=目标数量-已委托数量
                //csItem.WaitAmount = csItem.TargetAmount - csItem.EntrustedAmount;

                var findItem = SecurityInfoManager.Instance.Get(secuItem.SecuCode, secuItem.SecuType);
                if (findItem != null)
                {
                    csItem.SecuName = findItem.SecuName;
                }

                finalSecuItems.Add(csItem);
            }

            return(finalSecuItems);
        }
        private TradeCommandItem BuildUICommand(Model.Database.TradeCommand tradeCommand)
        {
            var uiCommand = new TradeCommandItem
            {
                CommandId         = tradeCommand.CommandId,
                InstanceId        = tradeCommand.InstanceId,
                CommandNum        = tradeCommand.CommandNum,
                ModifiedTimes     = tradeCommand.ModifiedTimes,
                ECommandType      = tradeCommand.ECommandType,
                EExecuteType      = tradeCommand.EExecuteType,
                EStockDirection   = tradeCommand.EStockDirection,
                EFuturesDirection = tradeCommand.EFuturesDirection,
                EEntrustStatus    = tradeCommand.EEntrustStatus,
                EDealStatus       = tradeCommand.EDealStatus,
                SubmitPerson      = tradeCommand.SubmitPerson,
                CreatedDate       = tradeCommand.CreatedDate,
                ModifiedDate      = tradeCommand.ModifiedDate,
                DStartDate        = tradeCommand.DStartDate,
                DEndDate          = tradeCommand.DEndDate,
                MonitorUnitId     = tradeCommand.MonitorUnitId,
                MonitorUnitName   = tradeCommand.MonitorUnitName,
                InstanceCode      = tradeCommand.InstanceCode,
                PortfolioId       = tradeCommand.PortfolioId,
                PortfolioCode     = tradeCommand.PortfolioCode,
                PortfolioName     = tradeCommand.PortfolioName,
                FundCode          = tradeCommand.AccountCode,
                FundName          = tradeCommand.AccountName,
            };

            return(uiCommand);
        }
Ejemplo n.º 3
0
        private void CalculateUICommand(ref TradeCommandItem uiCommand, List <TradeCommandSecurity> rawCmdSecuItems, List <EntrustSecurity> entrustSecuItems)
        {
            int commandId           = uiCommand.CommandId;
            var cmdSecuItems        = rawCmdSecuItems.Where(p => p.CommandId == commandId).ToList();
            var cmdEntrustSecuItems = entrustSecuItems.Where(p => p.CommandId == commandId).ToList();


            var totalLongCmdAmount = cmdSecuItems.Where(p => p.SecuType == SecurityType.Stock)
                                     .ToList()
                                     .Sum(o => o.CommandAmount);
            var totalLongEntrustAmount = cmdEntrustSecuItems.Where(p => p.SecuType == SecurityType.Stock && p.EntrustStatus == EntrustStatus.Completed)
                                         .ToList()
                                         .Sum(o => o.EntrustAmount);
            var totalLongDealAmount = cmdEntrustSecuItems.Where(p => p.SecuType == SecurityType.Stock && (p.DealStatus == DealStatus.Completed || p.DealStatus == DealStatus.PartDeal))
                                      .ToList()
                                      .Sum(o => o.TotalDealAmount);
            var totalShortCmdAmount = cmdSecuItems.Where(p => p.SecuType == SecurityType.Futures)
                                      .ToList()
                                      .Sum(o => o.CommandAmount);
            var totalShortEntrustAmount = cmdEntrustSecuItems.Where(p => p.SecuType == SecurityType.Futures && p.EntrustStatus == EntrustStatus.Completed)
                                          .ToList()
                                          .Sum(o => o.EntrustAmount);
            var totalShortDealAmount = cmdEntrustSecuItems.Where(p => p.SecuType == SecurityType.Futures && (p.DealStatus == DealStatus.Completed || p.DealStatus == DealStatus.PartDeal))
                                       .ToList()
                                       .Sum(o => o.TotalDealAmount);

            var totalCmdAmount     = totalLongCmdAmount + totalShortCmdAmount;
            var eachCopyAmount     = totalCmdAmount / uiCommand.CommandNum;
            var totalEntrustAmount = totalLongEntrustAmount + totalShortEntrustAmount;
            var totalDealAmount    = totalLongDealAmount + totalShortDealAmount;

            double entrustRatio      = GetRatio(totalEntrustAmount, eachCopyAmount);
            double longEntrustRatio  = GetRatio(totalLongEntrustAmount, totalLongCmdAmount);
            double longDealRatio     = GetRatio(totalLongDealAmount, totalLongCmdAmount);
            double shortEntrustRatio = GetRatio(totalShortEntrustAmount, totalShortCmdAmount);
            double shortDealRatio    = GetRatio(totalShortDealAmount, totalShortCmdAmount);

            uiCommand.CommandAmount = totalCmdAmount;
            uiCommand.TargetNum     = (int)Math.Ceiling(entrustRatio);
            uiCommand.LongMoreThan  = longEntrustRatio;
            uiCommand.BearMoreThan  = shortEntrustRatio;
            uiCommand.LongRatio     = longDealRatio;
            uiCommand.BearRatio     = shortDealRatio;
            uiCommand.EntrustAmount = totalEntrustAmount;
            uiCommand.DealAmount    = totalDealAmount;
        }
Ejemplo n.º 4
0
 public List <Model.Database.EntrustCommand> GetEntrustedCmdItems(TradeCommandItem cmdItem)
 {
     return(_entrustCommandBLL.GetCancel(cmdItem.CommandId));
 }
        private void CalculateUICommand(ref TradeCommandItem uiCommand, List <TradeCommandSecurity> rawCmdSecuItems, List <EntrustSecurity> entrustSecuItems)
        {
            int commandId           = uiCommand.CommandId;
            var cmdSecuItems        = rawCmdSecuItems.Where(p => p.CommandId == commandId).ToList();
            var cmdEntrustSecuItems = entrustSecuItems.Where(p => p.CommandId == commandId).ToList();

            var calcItems = new List <TradeCommandCalcItem>();

            foreach (var cmdSecuItem in cmdSecuItems)
            {
                int    amount = cmdSecuItem.CommandAmount;
                double price  = cmdSecuItem.CurrentPrice > 0 ? cmdSecuItem.CurrentPrice : 1;
                //基于下达指令时价格算出的市值
                double mktCapOrigin = amount * price;
                //基于委托时价格算出的市值
                double mktCapEntrusted = mktCapOrigin;
                //实际委托时的市值
                double entrustedMktCap = 0;
                //已成交的市值
                double dealMktCap = 0;
                var    targetCmdEntrustedSecuItems = cmdEntrustSecuItems.Where(p => p.CommandId == cmdSecuItem.CommandId &&
                                                                               p.SecuCode == cmdSecuItem.SecuCode &&
                                                                               p.SecuType == cmdSecuItem.SecuType);
                if (targetCmdEntrustedSecuItems != null && targetCmdEntrustedSecuItems.Count() > 0)
                {
                    double tempMktCap      = targetCmdEntrustedSecuItems.Sum(p => p.EntrustAmount * p.EntrustPrice);
                    int    entrustedAmount = targetCmdEntrustedSecuItems.Sum(p => p.EntrustAmount);

                    //加总委托部分的市值,使用委托处价格算出
                    if (amount > entrustedAmount)
                    {
                        mktCapEntrusted = tempMktCap + (amount - entrustedAmount) * price;
                    }
                    else
                    {
                        mktCapEntrusted = tempMktCap;
                    }
                }

                var cmdCompletedEntrustedSecuItems = cmdEntrustSecuItems.Where(p => p.CommandId == cmdSecuItem.CommandId &&
                                                                               p.SecuCode == cmdSecuItem.SecuCode &&
                                                                               p.SecuType == cmdSecuItem.SecuType &&
                                                                               p.EntrustStatus == EntrustStatus.Completed);
                if (cmdCompletedEntrustedSecuItems != null && cmdCompletedEntrustedSecuItems.Count() > 0)
                {
                    entrustedMktCap = cmdCompletedEntrustedSecuItems.Sum(p => p.EntrustAmount * p.EntrustPrice);
                }

                var cmdDealSecuItems = cmdEntrustSecuItems.Where(p => p.CommandId == cmdSecuItem.CommandId &&
                                                                 p.SecuCode == cmdSecuItem.SecuCode &&
                                                                 p.SecuType == cmdSecuItem.SecuType &&
                                                                 (p.DealStatus == DealStatus.Completed || p.DealStatus == DealStatus.PartDeal));
                if (cmdDealSecuItems != null && cmdDealSecuItems.Count() > 0)
                {
                    dealMktCap = cmdDealSecuItems.Sum(p => p.EntrustAmount * p.EntrustPrice);
                }

                var calcItem = new TradeCommandCalcItem
                {
                    CommandId       = cmdSecuItem.CommandId,
                    SecuCode        = cmdSecuItem.SecuCode,
                    SecuType        = cmdSecuItem.SecuType,
                    MktCapOrigin    = mktCapOrigin,
                    MktCapEntrusted = mktCapEntrusted,
                    EntrustedMktCap = entrustedMktCap,
                    DealMktCap      = dealMktCap,
                };

                calcItems.Add(calcItem);
            }

            //计算数量
            var totalLongCmdAmount = cmdSecuItems.Where(p => p.SecuType == SecurityType.Stock)
                                     .ToList()
                                     .Sum(o => o.CommandAmount);
            var totalLongEntrustAmount = cmdEntrustSecuItems.Where(p => p.SecuType == SecurityType.Stock && p.EntrustStatus == EntrustStatus.Completed)
                                         .ToList()
                                         .Sum(o => o.EntrustAmount);
            var totalLongDealAmount = cmdEntrustSecuItems.Where(p => p.SecuType == SecurityType.Stock && (p.DealStatus == DealStatus.Completed || p.DealStatus == DealStatus.PartDeal))
                                      .ToList()
                                      .Sum(o => o.TotalDealAmount);
            var totalShortCmdAmount = cmdSecuItems.Where(p => p.SecuType == SecurityType.Futures)
                                      .ToList()
                                      .Sum(o => o.CommandAmount);
            var totalShortEntrustAmount = cmdEntrustSecuItems.Where(p => p.SecuType == SecurityType.Futures && p.EntrustStatus == EntrustStatus.Completed)
                                          .ToList()
                                          .Sum(o => o.EntrustAmount);
            var totalShortDealAmount = cmdEntrustSecuItems.Where(p => p.SecuType == SecurityType.Futures && (p.DealStatus == DealStatus.Completed || p.DealStatus == DealStatus.PartDeal))
                                       .ToList()
                                       .Sum(o => o.TotalDealAmount);

            //计算市值
            var totalLongCmdMktCap = calcItems.Where(p => p.SecuType == SecurityType.Stock)
                                     .ToList()
                                     .Sum(o => o.MktCapEntrusted);
            var totalLongEntrustMktCap = calcItems.Where(p => p.SecuType == SecurityType.Stock)
                                         .ToList()
                                         .Sum(o => o.EntrustedMktCap);
            var totalLongDealMktCap = calcItems.Where(p => p.SecuType == SecurityType.Stock)
                                      .ToList()
                                      .Sum(o => o.DealMktCap);
            var totalShortCmdMktCap = calcItems.Where(p => p.SecuType == SecurityType.Futures)
                                      .ToList()
                                      .Sum(o => o.MktCapEntrusted);
            var totalShortEntrustMktCap = calcItems.Where(p => p.SecuType == SecurityType.Futures)
                                          .ToList()
                                          .Sum(o => o.EntrustedMktCap);
            var totalShortDealMktCap = calcItems.Where(p => p.SecuType == SecurityType.Futures)
                                       .ToList()
                                       .Sum(o => o.DealMktCap);

            var totalCmdAmount     = totalLongCmdAmount + totalShortCmdAmount;
            var eachCopyAmount     = totalCmdAmount / uiCommand.CommandNum;
            var totalEntrustAmount = totalLongEntrustAmount + totalShortEntrustAmount;
            var totalDealAmount    = totalLongDealAmount + totalShortDealAmount;

            //基于数量计算出的比例
            double entrustRatio = GetRatio(totalEntrustAmount, eachCopyAmount);

            //基于市值计算出的比例
            double longEntrustRatio  = GetRatio(totalLongEntrustMktCap, totalLongCmdMktCap);
            double longDealRatio     = GetRatio(totalLongDealMktCap, totalLongCmdMktCap);
            double shortEntrustRatio = GetRatio(totalShortEntrustMktCap, totalShortCmdMktCap);
            double shortDealRatio    = GetRatio(totalShortDealMktCap, totalShortCmdMktCap);

            uiCommand.CommandAmount = totalCmdAmount;
            uiCommand.TargetNum     = (int)Math.Ceiling(entrustRatio);
            uiCommand.LongMoreThan  = longEntrustRatio;
            uiCommand.BearMoreThan  = shortEntrustRatio;
            uiCommand.LongRatio     = longDealRatio;
            uiCommand.BearRatio     = shortDealRatio;
            uiCommand.EntrustAmount = totalEntrustAmount;
            uiCommand.DealAmount    = totalDealAmount;
        }