示例#1
0
 /// <summary>
 /// 是否停牌或退市
 /// </summary>
 /// <param name="StockCode">股票代码</param>
 /// <param name="Market">市场</param>
 /// <returns></returns>
 public bool CheckSuspended(string StockCode, TradingSystem.StockMarket Market)
 {
     try
     {
         if (StockCode == null || StockCode.Trim().Length != 6)
         {
             return(true);
         }
         //上证类处理
         if (Market == TradingSystem.StockMarket.Shanghai)
         {
             Dictionary <string, Show2003DBFRecord> mapSHTemp = null;//此变量有啥用?
             lock (mapSHRates)
             {
                 mapSHTemp = new Dictionary <string, Show2003DBFRecord>(mapSHRates);
             }
             if (!mapSHRates.ContainsKey(StockCode.Trim()))
             {
                 return(true);
             }
             else if (mapSHRates[StockCode.Trim()].OpenPrice < 0.001)
             {
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         //深证类处理
         else if (Market == TradingSystem.StockMarket.Shenzhen)
         {
             Dictionary <string, SjshqDBFRecord> mapSZTemp = null;
             lock (mapSZRates)
             {
                 mapSZTemp = new Dictionary <string, SjshqDBFRecord>(mapSZRates);
             }
             if (!mapSZRates.ContainsKey(StockCode.Trim()))
             {
                 return(true);
             }
             else if (mapSZRates[StockCode.Trim()].OpenPrice < 0.001)
             {
                 return(true);
             }
             else
             {
                 return(false);
             }
         }
         else
         {
             return(true);
         }
     }
     catch
     {
         return(false);
     }
 }
示例#2
0
 /// <summary>
 /// 获取即时行情
 /// </summary>
 /// <param name="StockCode">股票代码</param>
 /// <param name="Market">市场</param>
 /// <param name="SHRecord">上证类股票行情</param>
 /// <param name="SZRecord">深证类股票行情</param>
 /// <returns></returns>
 public bool GetStkRate(string StockCode, TradingSystem.StockMarket Market,
                        out Show2003DBFRecord SHRecord, out SjshqDBFRecord SZRecord)
 {
     SHRecord = new Show2003DBFRecord();
     SZRecord = new SjshqDBFRecord();
     try
     {
         SHRecord.Clear(); SZRecord.Clear();
         if (StockCode == null || StockCode.Trim().Length <= 0 || Market == TradingSystem.StockMarket.Unknown)
         {
             return(false);
         }
         //上证类股票
         if (Market == TradingSystem.StockMarket.Shanghai)
         {
             lock (mapSHSnapShot)
             {
                 if (mapSHSnapShot == null || mapSHSnapShot.Count <= 0)
                 {
                     return(false);
                 }
                 if (mapSHSnapShot.ContainsKey(StockCode.Trim()))
                 {
                     SHRecord = mapSHSnapShot[StockCode.Trim()];
                     return(true);
                 }
             }
         }
         //深证类股票
         else if (Market == TradingSystem.StockMarket.Shenzhen)
         {
             lock (mapSZSnapShot)
             {
                 if (mapSZSnapShot == null || mapSZSnapShot.Count <= 0)
                 {
                     return(false);
                 }
                 else if (mapSZSnapShot.ContainsKey(StockCode.Trim()))
                 {
                     SZRecord = mapSZSnapShot[StockCode.Trim()];
                     return(true);
                 }
             }
         }
         return(false);
     }
     catch (Exception err)
     {
         Common.Log(err);
         SHRecord.Clear();
         SZRecord.Clear();
         return(false);
     }
 }
示例#3
0
 public void Initialize()
 {
     try
     {
         TradeID     = 0;
         OrderID     = 0;
         UserID      = 0;
         Side        = false;
         StockCode   = "";
         Market      = TradingSystem.StockMarket.Unknown;
         TradeVolume = 0;
         TradePrice  = 0;
         Curr        = TradingSystem.Currency.Unknown;
         TradeDate   = Common.MinDateTime;
     }
     catch
     { }
 }
示例#4
0
 public void Initialize()
 {
     try
     {
         TradeID = 0;
         OrderID = 0;
         UserID = 0;
         Side = false;
         StockCode = "";
         Market = TradingSystem.StockMarket.Unknown;
         TradeVolume = 0;
         TradePrice = 0;
         Curr = TradingSystem.Currency.Unknown;
         TradeDate = Common.MinDateTime;
     }
     catch
     { }
 }
        /// <summary>
        /// 除权
        /// </summary>
        /// <param name="StockCode"></param>
        /// <param name="Market"></param>
        /// <param name="Quotiety"></param>
        /// <returns></returns>
        public RemotingInterface.RI_Result SetExRights(string StockCode, TradingSystem.StockMarket Market, double Quotiety)
        {
            bool bConn = false;
            try
            {
                if (StockCode == null || Market == TradingSystem.StockMarket.Unknown)
                    return RemotingInterface.RI_Result.Banned_Stock;
                else if (Quotiety <= 1)
                    return RemotingInterface.RI_Result.Illegal_Quotiety;
                else if (!Common.IsWeekend
                    && DateTime.Now.TimeOfDay >= Common.BeginAMTS
                    && DateTime.Now.TimeOfDay <= Common.EndPMTS.Add(new TimeSpan(0, 15, 0)))
                    return RemotingInterface.RI_Result.Out_Of_Maintain_Time;
                bConn = true;

                // 盘后方可除权
                if (sqlConn_Adm.State == ConnectionState.Closed)
                    sqlConn_Adm.Open();
                sqlTrans_Adm = sqlConn_Adm.BeginTransaction();

                List<TradingSystem.UserStocks> listStocks = new List<TradingSystem.UserStocks>();
                List<TradingHistory> listTrades = new List<TradingHistory>();
                sqlCmd_Adm = new SqlCommand("SELECT * FROM [UserStocks] WHERE (StockCode = @StockCode) AND (Market = @Market", sqlConn_Adm, sqlTrans_Adm);
                sqlCmd_Adm.Parameters.Add("@StockCode", SqlDbType.NVarChar, 6); sqlCmd_Adm.Parameters["@StockCode"].Value = StockCode.Trim();
                sqlCmd_Adm.Parameters.Add("@Market", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Market"].Value = (byte)Market;
                sqlReader_Adm = sqlCmd_Adm.ExecuteReader();
                while (sqlReader_Adm.Read())
                {
                    TradingSystem.UserStocks data_stock = new TradingSystem.UserStocks();
                    TradingHistory data_trade = new TradingHistory();
                    data_stock.Initialize(); data_trade.Initialize();
                    data_stock.UserID = (int)sqlReader_Adm["UserID"]; data_trade.UserID = data_stock.UserID;
                    data_stock.StockCode = sqlReader_Adm["StockCode"].ToString().Trim(); data_trade.StockCode = data_stock.StockCode;
                    data_stock.Market = (TradingSystem.StockMarket)Convert.ToByte(sqlReader_Adm["Market"].ToString().Trim()); data_trade.Market = data_stock.Market;
                    data_stock.Volume = (int)sqlReader_Adm["Volume"]; data_trade.TradeVolume = (int)(((double)data_stock.Volume * (Quotiety - 1) + 50) / 100) * 100;
                    if (data_trade.TradeVolume < 100)
                        continue;
                    data_stock.AveragePrice = Common.ConvertPrice(
                        (double.Parse(sqlReader_Adm["AveragePrice"].ToString().Trim()) * data_stock.Volume)
                        / (data_stock.Volume + data_trade.TradeVolume));
                    data_stock.Volume += data_trade.TradeVolume;
                    data_stock.Curr = (TradingSystem.Currency)Convert.ToByte(sqlReader_Adm["Currency"].ToString().Trim()); data_trade.Curr = data_stock.Curr;
                    if (sqlReader_Adm["Sellable"].ToString().Trim() == "1")
                        data_stock.Sellable = true;
                    else
                        data_stock.Sellable = false;
                    data_trade.OrderID = (int)Special_OrderID.ExRights;
                    data_trade.Side = true;
                    data_trade.TradeDate = DateTime.Now;
                    data_trade.TradePrice = 0;
                    listStocks.Add(data_stock);
                    listTrades.Add(data_trade);
                }
                sqlReader_Adm.Close();

                foreach (TradingSystem.UserStocks data in listStocks)
                {
                    sqlCmd_Adm = new SqlCommand("UPDATE [UserStocks] SET Volume = @Volume, AveragePrice = @AveragePrice " +
                        "WHERE (UserID = @UserID) AND (StockCode = @StockCode) AND (Market = @Market) AND (Sellable = @Sellable)", sqlConn_Adm, sqlTrans_Adm);
                    sqlCmd_Adm.Parameters.Add("@Volume", SqlDbType.Int); sqlCmd_Adm.Parameters["@Volume"].Value = data.Volume;
                    sqlCmd_Adm.Parameters.Add("@AveragePrice", SqlDbType.Money); sqlCmd_Adm.Parameters["@AveragePrice"].Value = data.AveragePrice;
                    sqlCmd_Adm.Parameters.Add("@UserID", SqlDbType.Int); sqlCmd_Adm.Parameters["@UserID"].Value = data.UserID;
                    sqlCmd_Adm.Parameters.Add("@StockCode", SqlDbType.NVarChar, 6); sqlCmd_Adm.Parameters["@StockCode"].Value = data.StockCode.Trim();
                    sqlCmd_Adm.Parameters.Add("@Market", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Market"].Value = (byte)data.Market;
                    sqlCmd_Adm.Parameters.Add("@Sellable", SqlDbType.TinyInt);
                    if (data.Sellable)
                        sqlCmd_Adm.Parameters["@Sellable"].Value = (byte)1;
                    else
                        sqlCmd_Adm.Parameters["@Sellable"].Value = (byte)0;
                    sqlCmd_Adm.ExecuteNonQuery();
                }

                foreach (TradingHistory data in listTrades)
                {
                    sqlCmd_Adm = new SqlCommand("INSERT INTO [TradingHistory] (OrderID,UserID," +
                        "OrderSide,StockCode,Market,TradeVolume,TradePrice,Currency,TradeDate) " +
                        "VALUES (@OrderID,@UserID,@OrderSide,@StockCode,@Market," +
                        "@TradeVolume,@TradePrice,@Currency,@TradeDate)", sqlConn_Adm, sqlTrans_Adm);
                    sqlCmd_Adm.Parameters.Add("@OrderID", SqlDbType.Int); sqlCmd_Adm.Parameters["@OrderID"].Value = data.OrderID;
                    sqlCmd_Adm.Parameters.Add("@UserID", SqlDbType.Int); sqlCmd_Adm.Parameters["@UserID"].Value = data.UserID;
                    if (data.Side)
                    {
                        sqlCmd_Adm.Parameters.Add("@OrderSide", SqlDbType.Bit); sqlCmd_Adm.Parameters["@OrderSide"].Value = (byte)1;
                    }
                    else
                    {
                        sqlCmd_Adm.Parameters.Add("@OrderSide", SqlDbType.Bit); sqlCmd_Adm.Parameters["@OrderSide"].Value = (byte)0;
                    }
                    sqlCmd_Adm.Parameters.Add("@StockCode", SqlDbType.NVarChar, 6); sqlCmd_Adm.Parameters["@StockCode"].Value = data.StockCode.Trim();
                    sqlCmd_Adm.Parameters.Add("@Market", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Market"].Value = (byte)data.Market;
                    sqlCmd_Adm.Parameters.Add("@TradeVolume", SqlDbType.Int); sqlCmd_Adm.Parameters["@TradeVolume"].Value = data.TradeVolume;
                    sqlCmd_Adm.Parameters.Add("@TradePrice", SqlDbType.Money); sqlCmd_Adm.Parameters["@TradePrice"].Value = data.TradePrice;
                    sqlCmd_Adm.Parameters.Add("@Currency", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Currency"].Value = (byte)data.Curr;
                    sqlCmd_Adm.Parameters.Add("@TradeDate", SqlDbType.DateTime); sqlCmd_Adm.Parameters["@TradeDate"].Value = data.TradeDate;
                    sqlCmd_Adm.ExecuteNonQuery();
                }

                sqlTrans_Adm.Commit();
                return RemotingInterface.RI_Result.Success;
            }
            catch (Exception err)
            {
                Common.DBLog(err, ReplaceSqlPara(sqlCmd_Adm), false);
                Common.Log(err);
                if (sqlReader_Adm != null && !sqlReader_Adm.IsClosed)
                    sqlReader_Adm.Close();
                if (sqlTrans_Adm != null && sqlTrans_Adm.Connection != null && sqlTrans_Adm.Connection.State == ConnectionState.Open)
                    sqlTrans_Adm.Rollback();
                return RemotingInterface.RI_Result.Internal_Error;
            }
            finally
            {
                if (bConn && sqlConn_Adm.State != ConnectionState.Closed)
                    sqlConn_Adm.Close();
            }
        }
        /// <summary>
        /// 分红
        /// </summary>
        /// <param name="StockCode"></param>
        /// <param name="Market"></param>
        /// <param name="Quotiety"></param>
        /// <returns></returns>
        public RemotingInterface.RI_Result SetBonus(string StockCode, TradingSystem.StockMarket Market, double Quotiety)
        {
            bool bConn = false;
            try
            {
                if (StockCode == null || Market == TradingSystem.StockMarket.Unknown)
                    return RemotingInterface.RI_Result.Banned_Stock;
                else if (Quotiety <= 1)
                    return RemotingInterface.RI_Result.Illegal_Quotiety;
                else if (!Common.IsWeekend
                    && DateTime.Now.TimeOfDay >= Common.BeginAMTS
                    && DateTime.Now.TimeOfDay <= Common.EndPMTS.Add(new TimeSpan(0, 15, 0)))
                    return RemotingInterface.RI_Result.Out_Of_Maintain_Time;
                bConn = true;

                // 盘后方可分红
                if (sqlConn_Adm.State == ConnectionState.Closed)
                    sqlConn_Adm.Open();
                sqlTrans_Adm = sqlConn_Adm.BeginTransaction();

                List<FundHistory> listFunds = new List<FundHistory>();
                sqlCmd_Adm = new SqlCommand("SELECT * FROM [UserStocks] WHERE (StockCode = @StockCode) AND (Market = @Market", sqlConn_Adm, sqlTrans_Adm);
                sqlCmd_Adm.Parameters.Add("@StockCode", SqlDbType.NVarChar, 6); sqlCmd_Adm.Parameters["@StockCode"].Value = StockCode.Trim();
                sqlCmd_Adm.Parameters.Add("@Market", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Market"].Value = (byte)Market;
                sqlReader_Adm = sqlCmd_Adm.ExecuteReader();
                while (sqlReader_Adm.Read())
                {
                    FundHistory data = new FundHistory();
                    data.Initialize();
                    data.ChangedCash = (double)((int)sqlReader_Adm["Volume"]) * Quotiety;
                    data.ChangedTime = DateTime.Now;
                    data.Curr = (TradingSystem.Currency)Convert.ToByte(sqlReader_Adm["Currency"].ToString().Trim());
                    data.OrderID = (int)Special_OrderID.Bonus;
                    data.UserID = (int)sqlReader_Adm["UserID"];
                    listFunds.Add(data);
                }
                sqlReader_Adm.Close();

                for (int i = 0; i < listFunds.Count; i++)
                {
                    sqlCmd_Adm = new SqlCommand("SELECT Cash FROM [UserFund] WHERE (UserID = @UserID) AND (Currency = @Currency)", sqlConn_Adm, sqlTrans_Adm);
                    sqlCmd_Adm.Parameters.Add("@UserID", SqlDbType.Int); sqlCmd_Adm.Parameters["@UserID"].Value = listFunds[i].UserID;
                    sqlCmd_Adm.Parameters.Add("@Currency", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Currency"].Value = (byte)listFunds[i].Curr;
                    sqlReader_Adm = sqlCmd_Adm.ExecuteReader();
                    if (sqlReader_Adm.Read())
                    {
                        FundHistory data = listFunds[i];
                        data.OriginalCash = Convert.ToDouble(sqlReader_Adm["Cash"].ToString().Trim());
                        listFunds[i] = data;
                    }
                    sqlReader_Adm.Close();

                    sqlCmd_Adm = new SqlCommand("UPDATE [UserFund] SET Cash = Cash + @Add WHERE " +
                        "(UserID = @UserID) AND (Currency = @Currency)", sqlConn_Adm, sqlTrans_Adm);
                    sqlCmd_Adm.Parameters.Add("@Add", SqlDbType.Money); sqlCmd_Adm.Parameters["@Add"].Value = listFunds[i].ChangedCash;
                    sqlCmd_Adm.Parameters.Add("@UserID", SqlDbType.Int); sqlCmd_Adm.Parameters["@UserID"].Value = listFunds[i].UserID;
                    sqlCmd_Adm.Parameters.Add("@Currency", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Currency"].Value = (byte)listFunds[i].Curr;
                    sqlCmd_Adm.ExecuteNonQuery();

                    sqlCmd_Adm = new SqlCommand("INSERT INTO [FundHistory] (UserID,OriginalCash,ChangedCash,Currency,ChangedTime,OrderID) " +
                        "VALUES (@UserID,@OriginalCash,@ChangedCash,@Currency,@ChangedTime,@OrderID)", sqlConn_Adm, sqlTrans_Adm);
                    sqlCmd_Adm.Parameters.Add("@UserID", SqlDbType.Int); sqlCmd_Adm.Parameters["@UserID"].Value = listFunds[i].UserID;
                    sqlCmd_Adm.Parameters.Add("@OriginalCash", SqlDbType.Money); sqlCmd_Adm.Parameters["@OriginalCash"].Value = listFunds[i].OriginalCash;
                    sqlCmd_Adm.Parameters.Add("@ChangedCash", SqlDbType.Money); sqlCmd_Adm.Parameters["@ChangedCash"].Value = listFunds[i].ChangedCash;
                    sqlCmd_Adm.Parameters.Add("@Currency", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Currency"].Value = (byte)listFunds[i].Curr;
                    sqlCmd_Adm.Parameters.Add("@ChangedTime", SqlDbType.DateTime); sqlCmd_Adm.Parameters["@ChangedTime"].Value = listFunds[i].ChangedTime.ToString("yyyy-MM-dd HH:mm:ss");
                    sqlCmd_Adm.Parameters.Add("@OrderID", SqlDbType.Int); sqlCmd_Adm.Parameters["@OrderID"].Value = listFunds[i].OrderID;
                    sqlCmd_Adm.ExecuteNonQuery();
                }

                sqlCmd_Adm = new SqlCommand("UPDATE [UserFund] SET UsableCash = Cash", sqlConn_Adm, sqlTrans_Adm);
                sqlCmd_Adm.ExecuteNonQuery();

                sqlTrans_Adm.Commit();
                return RemotingInterface.RI_Result.Success;
            }
            catch (Exception err)
            {
                Common.DBLog(err, ReplaceSqlPara(sqlCmd_Adm), false);
                Common.Log(err);
                if (sqlReader_Adm != null && !sqlReader_Adm.IsClosed)
                    sqlReader_Adm.Close();
                if (sqlTrans_Adm != null && sqlTrans_Adm.Connection != null && sqlTrans_Adm.Connection.State == ConnectionState.Open)
                    sqlTrans_Adm.Rollback();
                return RemotingInterface.RI_Result.Internal_Error;
            }
            finally
            {
                if (bConn && sqlConn_Adm.State != ConnectionState.Closed)
                    sqlConn_Adm.Close();
            }
        }
示例#7
0
        /// <summary>
        /// 更新用户订单
        /// </summary>
        /// <param name="UserID"></param>
        /// <param name="UserOrder"></param>
        /// <returns></returns>
        public bool SetUserOrders(int UserID, RemotingInterface.RI_Order UserOrder)
        {
            try
            {
                if (UserID <= 0)
                {
                    return(false);
                }
                if (UserOrder.OrderDate.Date != DateTime.Now.Date ||
                    DateTime.Now.TimeOfDay > Common.EndPMTS)
                {
                    return(false);
                }

                TradingSystem.StockMarket sMarket = TradingSystem.StockMarket.Unknown;
                if (UserOrder.StockMarket == RemotingInterface.RI_Market.Shanghai)
                {
                    sMarket = TradingSystem.StockMarket.Shanghai;
                }
                else if (UserOrder.StockMarket == RemotingInterface.RI_Market.Shenzhen)
                {
                    sMarket = TradingSystem.StockMarket.Shenzhen;
                }
                TradingSystem.StockType sType = Common.stkTrading.GetStockType(UserOrder.StockCode, sMarket);
                switch (sType)
                {
                case TradingSystem.StockType.SH_A:
                case TradingSystem.StockType.SZ_A:
                case TradingSystem.StockType.SH_Bond:
                case TradingSystem.StockType.SZ_Bond:
                {
                    UserOrder.OrderPrice = Common.ConvertPrice(UserOrder.OrderPrice, 2);
                    UserOrder.TradePrice = Common.ConvertPrice(UserOrder.TradePrice, 2);
                }
                break;

                default:
                {
                    UserOrder.OrderPrice = Common.ConvertPrice(UserOrder.OrderPrice);
                    UserOrder.TradePrice = Common.ConvertPrice(UserOrder.TradePrice);
                }
                break;
                }

                if (UserOrder.UpdatedDate < UserOrder.OrderDate)
                {
                    UserOrder.UpdatedDate = UserOrder.OrderDate;
                }

                lock (mapRIUserOrders)
                {
                    if (mapRIUserOrders.ContainsKey(UserID))
                    {
                        Dictionary <int, RemotingInterface.RI_Order> mapOrders = mapRIUserOrders[UserID];
                        mapOrders[UserOrder.OrderID] = UserOrder;
                        mapRIUserOrders[UserID]      = mapOrders;
                        Common.Debug("SetOrderInfoInBuffer: UserID-" + UserID + "; StockCode-" + UserOrder.StockCode + (byte)UserOrder.StockMarket +
                                     "; OrderID-" + UserOrder.OrderID + "; Type-" + UserOrder.OrderType.ToString() + "; Status-" + UserOrder.OrderStatus.ToString());
                    }
                    else
                    {
                        Dictionary <int, RemotingInterface.RI_Order> mapOrders = new Dictionary <int, RemotingInterface.RI_Order>();
                        mapOrders[UserOrder.OrderID] = UserOrder;
                        mapRIUserOrders[UserID]      = mapOrders;
                        Common.Debug("SetOrderInfoInBuffer: UserID-" + UserID + "; StockCode-" + UserOrder.StockCode + (byte)UserOrder.StockMarket +
                                     "; OrderID-" + UserOrder.OrderID + "; Type-" + UserOrder.OrderType.ToString() + "; Status-" + UserOrder.OrderStatus.ToString());
                    }
                }
                return(true);
            }
            catch (Exception err)
            {
                Common.Log(err);
                return(false);
            }
        }