Пример #1
0
        public void PerformSpeculativeFlagging(List <EQSpeculativeVo> eqSpeculativeVoList)
        {
            EQSpeculativeVo        eqSpeculativeVo     = new EQSpeculativeVo();
            EQTransactionVo        eqTransactionVo     = new EQTransactionVo();
            List <EQTransactionVo> eqTransactionVoList = new List <EQTransactionVo>();
            int   speculativeGroupCount       = eqSpeculativeVoList.Count;
            int   speculativeTransactionCount = 0;
            float buyQuantity  = 0;
            float sellQuantity = 0;

            float cummBuyQuantity  = 0;
            float cummSellQuantity = 0;
            int   i = 0;
            int   j = 0;

            for (i = 0; i < speculativeGroupCount; i++)
            {
                eqTransactionVoList         = new List <EQTransactionVo>();
                speculativeTransactionCount = eqSpeculativeVoList[i].EQTransactionVoList.Count;
                for (j = 0; j < speculativeTransactionCount; j++)
                {
                    if (eqSpeculativeVoList[i].EQTransactionVoList[j].BuySell == "B")
                    {
                        buyQuantity = buyQuantity + eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity;
                    }
                    else
                    {
                        sellQuantity = sellQuantity + eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity;
                    }
                }
                if (buyQuantity == sellQuantity)
                {
                    for (j = 0; j < speculativeTransactionCount; j++)
                    {
                        eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 1;
                    }
                }
                else if ((buyQuantity > 0 && sellQuantity == 0) || (sellQuantity > 0 && buyQuantity == 0))
                {
                    for (j = 0; j < speculativeTransactionCount; j++)
                    {
                        eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 0;
                    }
                }
                else if (buyQuantity > sellQuantity)
                {
                    cummSellQuantity = sellQuantity;
                    cummBuyQuantity  = 0;
                    for (j = 0; j < speculativeTransactionCount; j++)
                    {
                        if (eqSpeculativeVoList[i].EQTransactionVoList[j].BuySell == "S")
                        {
                            eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 1;
                        }
                        else
                        {
                            cummBuyQuantity = cummBuyQuantity + eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity;
                            if (cummBuyQuantity <= sellQuantity)
                            {
                                eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 1;
                                cummSellQuantity = cummSellQuantity - eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity;
                            }
                            else if (cummBuyQuantity > sellQuantity && cummSellQuantity > 0)
                            {
                                eqTransactionVo = new EQTransactionVo();


                                eqTransactionVo = (eqSpeculativeVoList[i].EQTransactionVoList[j]).Clone();

                                eqTransactionVo.IsSpeculative      = 1;
                                eqTransactionVo.IsSplit            = 1;
                                eqTransactionVo.Quantity           = cummSellQuantity;
                                eqTransactionVo.SplitTransactionId = eqTransactionVo.TransactionId;
                                eqTransactionVoList.Add(eqTransactionVo);
                                eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 0;
                                eqSpeculativeVoList[i].EQTransactionVoList[j].IsSplit       = 1;
                                eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity      = eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity - cummSellQuantity;
                                cummSellQuantity = 0;
                            }
                            else
                            {
                                eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 0;
                            }
                        }
                    }
                }
                else
                {
                    cummBuyQuantity  = buyQuantity;
                    cummSellQuantity = 0;
                    for (j = 0; j < speculativeTransactionCount; j++)
                    {
                        if (eqSpeculativeVoList[i].EQTransactionVoList[j].BuySell == "B")
                        {
                            eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 1;
                        }
                        else
                        {
                            cummSellQuantity = cummSellQuantity + eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity;
                            if (cummSellQuantity <= buyQuantity)
                            {
                                eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 1;
                                cummBuyQuantity = cummBuyQuantity - eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity;
                            }
                            else if (cummSellQuantity > buyQuantity && cummBuyQuantity > 0)
                            {
                                eqTransactionVo = new EQTransactionVo();
                                eqTransactionVo = (eqSpeculativeVoList[i].EQTransactionVoList[j]).Clone();
                                eqTransactionVo.IsSpeculative      = 1;
                                eqTransactionVo.IsSplit            = 1;
                                eqTransactionVo.Quantity           = cummBuyQuantity;
                                eqTransactionVo.SplitTransactionId = eqTransactionVo.TransactionId;
                                eqTransactionVoList.Add(eqTransactionVo);
                                eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 0;
                                eqSpeculativeVoList[i].EQTransactionVoList[j].IsSplit       = 1;
                                eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity      = eqSpeculativeVoList[i].EQTransactionVoList[j].Quantity - cummBuyQuantity;
                                cummBuyQuantity = 0;
                            }
                            else
                            {
                                eqSpeculativeVoList[i].EQTransactionVoList[j].IsSpeculative = 0;
                            }
                        }
                    }
                }

                UpdateSpeculativeTrades(eqSpeculativeVoList[i].EQTransactionVoList);
                AddEquityTransaction(eqTransactionVoList, 1665);
            }
        }
        public List <EQSpeculativeVo> GetEquitySpeculativeTradeGroups(DateTime tradeDate)
        {
            List <EQSpeculativeVo> eqSpeculativeVoList = new List <EQSpeculativeVo>();
            EQSpeculativeVo        eqSpeculativeVo     = new EQSpeculativeVo();
            Database  db;
            DbCommand getEquitySpeculativeTradeGroupsCmd;
            DataSet   dsEquitySpeculativeTradeGroups;
            DataTable dtEquitySpeculativeTradeGroups;

            try
            {
                db = DatabaseFactory.CreateDatabase("wealtherp");
                getEquitySpeculativeTradeGroupsCmd = db.GetStoredProcCommand("SP_GetEquityTradeGroups");
                db.AddInParameter(getEquitySpeculativeTradeGroupsCmd, "@Trade_Date", DbType.String, tradeDate);

                dsEquitySpeculativeTradeGroups = db.ExecuteDataSet(getEquitySpeculativeTradeGroupsCmd);
                dtEquitySpeculativeTradeGroups = dsEquitySpeculativeTradeGroups.Tables[0];
                eqSpeculativeVoList            = new List <EQSpeculativeVo>();
                foreach (DataRow dr in dtEquitySpeculativeTradeGroups.Rows)
                {
                    eqSpeculativeVo = new EQSpeculativeVo();
                    if (dr["C_CustomerId"].ToString() != null && dr["C_CustomerId"].ToString() != string.Empty)
                    {
                        eqSpeculativeVo.CustomerId = int.Parse(dr["C_CustomerId"].ToString());
                    }
                    if (dr["PEM_ScripCode"].ToString() != null && dr["PEM_ScripCode"].ToString() != string.Empty)
                    {
                        eqSpeculativeVo.ScripCode = int.Parse(dr["PEM_ScripCode"].ToString());
                    }
                    if (dr["TradeDate"].ToString() != null && dr["TradeDate"].ToString() != string.Empty)
                    {
                        eqSpeculativeVo.Date = dr["TradeDate"].ToString();
                    }
                    if (dr["CETA_AccountId"].ToString() != null && dr["CETA_AccountId"].ToString() != string.Empty)
                    {
                        eqSpeculativeVo.AccountId = int.Parse(dr["CETA_AccountId"].ToString());
                    }
                    eqSpeculativeVo.BrokerCode          = dr["XB_BrokerCode"].ToString();
                    eqSpeculativeVo.Exchange            = dr["XE_ExchangeCode"].ToString();
                    eqSpeculativeVo.EQTransactionVoList = GetEquityTransactionsForSpeculativeFlagging(eqSpeculativeVo.CustomerId, eqSpeculativeVo.AccountId, eqSpeculativeVo.ScripCode, eqSpeculativeVo.BrokerCode, eqSpeculativeVo.Date, eqSpeculativeVo.Exchange);

                    eqSpeculativeVoList.Add(eqSpeculativeVo);
                }
            }
            catch (BaseApplicationException Ex)
            {
                throw Ex;
            }
            catch (Exception Ex)
            {
                BaseApplicationException exBase       = new BaseApplicationException(Ex.Message, Ex);
                NameValueCollection      FunctionInfo = new NameValueCollection();

                FunctionInfo.Add("Method", "EQSpeculativeDao.cs:GetEquitySpeculativeTradeGroups()");


                object[] objects = new object[2];
                objects[0] = eqSpeculativeVoList;


                FunctionInfo = exBase.AddObject(FunctionInfo, objects);
                exBase.AdditionalInformation = FunctionInfo;
                ExceptionManager.Publish(exBase);
                throw exBase;
            }


            return(eqSpeculativeVoList);
        }