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); }
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; }
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; }