Esempio n. 1
0
        /// <summary>
        /// ������֤���Ʊ
        /// </summary>
        /// <param name="SZRate"></param>
        /// <param name="userFund"></param>
        /// <param name="userOrder"></param>
        /// <param name="userStock"></param>
        /// <param name="dBoughtAmount"></param>
        /// <returns></returns>
        private bool BuySZ(ref SjshqDBFRecord SZRate, ref UserFund userFund, ref UserOrders userOrder, ref UserStocks userStock, out double dBoughtAmount)
        {
            try
            {
                dBoughtAmount = 0;
                if (userOrder.UserID != userFund.UserID || userStock.UserID != userFund.UserID)
                    return false;
                else if (!userOrder.Side || userOrder.OrdStatus != OrderStatus.Waiting || userFund.UserID != userOrder.UserID)
                    return false;
                else if (userOrder.OrderVolume < 0)
                    return false;
                else if (SZRate.SellingVal1 < 0.001 || SZRate.LatestPrice < 0.001)
                    return false;
                UserFund tmpFund = userFund;
                UserOrders tmpOrder = userOrder;
                UserStocks tmpStock = userStock;
                dBoughtAmount = Common.ConvertPrice((tmpOrder.OrderVolume * SZRate.SellingVal1) * (1 + defaultBuyTax));
                if (Common.ComparePrice(userFund.Cash, dBoughtAmount) >= 0)
                {
                    tmpFund.UsableCash += Common.ConvertPrice((tmpOrder.OrderVolume * tmpOrder.OrderPrice) * (1 + defaultBuyTax));
                    tmpFund.UsableCash -= Common.ConvertPrice(dBoughtAmount);

                    Synchronizer.FundHistory fundHistory = new Synchronizer.FundHistory(); fundHistory.Initialize();
                    fundHistory.UserID = userFund.UserID; fundHistory.OrderID = userOrder.OrderID;
                    fundHistory.OriginalCash = Common.ConvertPrice(userFund.Cash);
                    tmpFund.Cash -= Common.ConvertPrice(dBoughtAmount);
                    fundHistory.ChangedCash = Common.ConvertPrice(tmpFund.Cash - fundHistory.OriginalCash);
                    fundHistory.Curr = tmpOrder.Curr;
                    Common.DBSync.FundChanged(fundHistory, userFund.UserID);

                    if (tmpStock.Volume + tmpOrder.OrderVolume > 0)
                        tmpStock.AveragePrice = Common.ConvertPrice(
                            ((tmpStock.AveragePrice * tmpStock.Volume) + (SZRate.SellingVal1 * tmpOrder.OrderVolume))
                            / (tmpStock.Volume + tmpOrder.OrderVolume) * (1 + defaultBuyTax));
                    else
                        tmpStock.AveragePrice = 0;
                    tmpStock.Volume += tmpOrder.OrderVolume;
                    tmpStock.Curr = tmpOrder.Curr;

                    if (GetStockType(tmpOrder.StockCode, StockMarket.Shenzhen) == StockType.SZ_Warrant)
                        tmpStock.Sellable = true;
                    else
                        tmpStock.Sellable = false;
                    if (tmpFund.UsableCash < 0)
                        tmpFund.UsableCash = 0;
                }
                else
                {
                    tmpOrder.UpdatedDate = DateTime.Now;
                    tmpOrder.OrdStatus = OrderStatus.Failure;
                    Common.DBSync.RecordError(tmpOrder, "(SZ)���㣺Currency-" + userFund.Curr.ToString().Trim() + "/Cash-" +
                        userFund.Cash.ToString("f3").Trim() + "/Cost-" + dBoughtAmount.ToString("f3").Trim());
                }

                if (tmpOrder.OrdStatus != OrderStatus.Failure)
                {
                    tmpOrder.TradePrice = Common.ConvertPrice(SZRate.SellingVal1);
                    if (tmpOrder.OrdType == OrderType.ImmediateOrder)
                        tmpOrder.OrderPrice = 0;
                    tmpOrder.UpdatedDate = DateTime.Now;
                    tmpOrder.OrdStatus = OrderStatus.Finished;
                    userFund = tmpFund;
                    userStock = tmpStock;
                }
                userOrder = tmpOrder;
                if (userOrder.OrdStatus == OrderStatus.Finished)
                    return true;
                else
                    return false;
            }
            catch
            {
                dBoughtAmount = 0;
                return false;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// �����֤���Ʊ
        /// </summary>
        /// <param name="SZRate"></param>
        /// <param name="userFund"></param>
        /// <param name="userOrder"></param>
        /// <param name="userStock"></param>
        /// <param name="dSoldAmount"></param>
        /// <returns></returns>
        private bool SellSZ(ref SjshqDBFRecord SZRate, ref UserFund userFund, ref UserOrders userOrder, ref UserStocks userStock, out double dSoldAmount)
        {
            try
            {
                dSoldAmount = 0;
                if (userOrder.UserID != userFund.UserID || userStock.UserID != userFund.UserID)
                    return false;
                else if (userOrder.Side || userOrder.OrdStatus != OrderStatus.Waiting || userFund.UserID != userOrder.UserID)
                    return false;
                else if (userOrder.OrderVolume < 0)
                    return false;
                else if (SZRate.BuyingVal1 < 0.001 || SZRate.LatestPrice < 0.001)
                    return false;
                UserFund tmpFund = userFund;
                UserOrders tmpOrder = userOrder;
                UserStocks tmpStock = userStock;
                dSoldAmount = Common.ConvertPrice((tmpOrder.OrderVolume * SZRate.BuyingVal1) * (1 - defaultSellTax));
                if (tmpStock.Volume >= tmpOrder.OrderVolume)
                {
                    tmpStock.Volume -= tmpOrder.OrderVolume;

                    Synchronizer.FundHistory fundHistory = new Synchronizer.FundHistory(); fundHistory.Initialize();
                    fundHistory.UserID = userFund.UserID; fundHistory.OrderID = userOrder.OrderID;
                    fundHistory.OriginalCash = Common.ConvertPrice(userFund.Cash);
                    tmpFund.Cash += Common.ConvertPrice(dSoldAmount);
                    fundHistory.ChangedCash = Common.ConvertPrice(tmpFund.Cash - fundHistory.OriginalCash);
                    fundHistory.Curr = tmpOrder.Curr;
                    Common.DBSync.FundChanged(fundHistory, userFund.UserID);

                    tmpFund.UsableCash += Common.ConvertPrice(dSoldAmount);
                    if (tmpStock.Volume > 0)
                        tmpStock.AveragePrice = Common.ConvertPrice(
                            ((tmpStock.AveragePrice * tmpStock.Volume) + (SZRate.BuyingVal1 * tmpOrder.OrderVolume))
                            / (tmpStock.Volume + tmpOrder.OrderVolume) * (1 + defaultSellTax));
                    else
                        tmpStock.AveragePrice = 0;
                    if (tmpFund.Cash < 0)
                        tmpFund.Cash = 0;
                    if (tmpFund.UsableCash < 0)
                        tmpFund.UsableCash = 0;
                }
                else
                {
                    tmpOrder.UpdatedDate = DateTime.Now;
                    tmpOrder.OrdStatus = OrderStatus.Failure;
                    Common.DBSync.RecordError(tmpOrder, "(SZ)��ɲ��㣺Volume" +
                        tmpStock.Volume.ToString().Trim() + "/Cost-" + tmpOrder.OrderVolume.ToString().Trim());
                }

                if (tmpOrder.OrdStatus != OrderStatus.Failure)
                {
                    tmpOrder.TradePrice = Common.ConvertPrice(SZRate.BuyingVal1);
                    if (tmpOrder.OrdType == OrderType.ImmediateOrder)
                        tmpOrder.OrderPrice = 0;
                    tmpOrder.UpdatedDate = DateTime.Now;
                    tmpOrder.OrdStatus = OrderStatus.Finished;
                    userFund = tmpFund;
                    userStock = tmpStock;
                }
                userOrder = tmpOrder;
                if (userOrder.OrdStatus == OrderStatus.Finished)
                    return true;
                else
                    return false;
            }
            catch
            {
                dSoldAmount = 0;
                return false;
            }
        }