コード例 #1
0
        /// <summary>
        /// 添加用户资金到 listNewUserFund
        /// </summary>
        /// <param name="Fund"></param>
        /// <returns></returns>
        public bool AddNewUserFund(TradingSystem.UserFund Fund)
        {
            try
            {
                if (Fund.UserID <= 0)
                    return false;
                else if (Fund.Cash < 0.01 || Fund.UsableCash < 0.01)
                    return false;
                else if (Common.ComparePrice(Fund.Cash, Fund.UsableCash) != 0)
                    return false;

                if (Common.stkBuffer != null)
                {
                    RemotingInterface.RI_Fund stiFund = new RemotingInterface.RI_Fund();
                    stiFund.Clear();
                    stiFund.Cash = Fund.Cash;
                    stiFund.UsableCash = Fund.UsableCash;
                    stiFund.Wealth = Common.ConvertPrice(Fund.Wealth);
                    stiFund.Curr = (RemotingInterface.RI_Currency)Fund.Curr;
                    Common.stkBuffer.SetUserFund(Fund.UserID, stiFund);
                }
                lock (listNewUserFund)
                {
                    listNewUserFund.Add(Fund);
                }

                return true;
            }
            catch (Exception err)
            {
                Common.Log(err);
                return false;
            }
        }
コード例 #2
0
ファイル: Quotation.cs プロジェクト: thetazhou/StockTrading
        private Thread ThReceiving = null; //�����߳�

        #endregion Fields

        #region Methods

        /// <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;
            }
        }
コード例 #3
0
ファイル: Quotation.cs プロジェクト: thetazhou/StockTrading
 /// <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;
     }
 }
コード例 #4
0
 /// <summary>
 /// 是否禁止交易指定证券类型的证券
 /// </summary>
 /// <param name="sType"></param>
 /// <returns></returns>
 private bool IsBanned(TradingSystem.StockType sType)
 {
     try
     {
         string strSpecies = "";
         for (int i = 0; i < 100; i++)
         {
             strSpecies = Common.Config("Trading", "Species-" + i.ToString("00").Trim());
             if (strSpecies.Length > 0)
             {
                 if (string.Compare(strSpecies.ToUpper().Trim(),
                     sType.ToString().ToUpper().Trim()) == 0)
                     return false;
             }
         }
         return true;
     }
     catch
     {
         return true;
     }
 }
コード例 #5
0
        /// <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();
            }
        }
コード例 #6
0
        /// <summary>
        /// 扣除现金
        /// </summary>
        /// <param name="UserID"></param>
        /// <param name="Curr"></param>
        /// <param name="Quotiety"></param>
        /// <returns></returns>
        public RemotingInterface.RI_Result SetForfeiture(int UserID, TradingSystem.Currency Curr, double Quotiety)
        {
            bool bConn = false;
            try
            {
                if (UserID <= 0)
                    return RemotingInterface.RI_Result.Illegal_UserID;
                else if (Curr == TradingSystem.Currency.Unknown)
                    return RemotingInterface.RI_Result.Illegal_Currency;
                else if (Quotiety > 1 || Quotiety <= 0)
                    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 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 = UserID;
                sqlCmd_Adm.Parameters.Add("@Currency", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Currency"].Value = (byte)Curr;
                sqlReader_Adm = sqlCmd_Adm.ExecuteReader();
                if (sqlReader_Adm.Read())
                {
                    double dOriginalCash = Convert.ToDouble(sqlReader_Adm["Cash"].ToString().Trim());
                    double dCash = dOriginalCash * (1 - Quotiety);
                    sqlReader_Adm.Close();

                    sqlCmd_Adm = new SqlCommand("UPDATE [UserFund] SET Cash = @Cash, UsableCash = @UsableCash WHERE (UserID = @UserID) AND (Currency = @Currency)", sqlConn_Adm, sqlTrans_Adm);
                    sqlCmd_Adm.Parameters.Add("@Cash", SqlDbType.Money); sqlCmd_Adm.Parameters["@Cash"].Value = dCash;
                    sqlCmd_Adm.Parameters.Add("@UsableCash", SqlDbType.Money); sqlCmd_Adm.Parameters["@UsableCash"].Value = dCash;
                    sqlCmd_Adm.Parameters.Add("@UserID", SqlDbType.Int); sqlCmd_Adm.Parameters["@UserID"].Value = UserID;
                    sqlCmd_Adm.Parameters.Add("@Currency", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Currency"].Value = (byte)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 = UserID;
                    sqlCmd_Adm.Parameters.Add("@OriginalCash", SqlDbType.Money); sqlCmd_Adm.Parameters["@OriginalCash"].Value = dOriginalCash;
                    sqlCmd_Adm.Parameters.Add("@ChangedCash", SqlDbType.Money); sqlCmd_Adm.Parameters["@ChangedCash"].Value = (dCash - dOriginalCash);
                    sqlCmd_Adm.Parameters.Add("@Currency", SqlDbType.TinyInt); sqlCmd_Adm.Parameters["@Currency"].Value = (byte)Curr;
                    sqlCmd_Adm.Parameters.Add("@ChangedTime", SqlDbType.DateTime); sqlCmd_Adm.Parameters["@ChangedTime"].Value = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss").Trim();
                    sqlCmd_Adm.Parameters.Add("@OrderID", SqlDbType.Int); sqlCmd_Adm.Parameters["@OrderID"].Value = Special_OrderID.Punishment;
                    sqlCmd_Adm.ExecuteNonQuery();
                }
                else
                {
                    sqlReader_Adm.Close();
                }

                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="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();
            }
        }
コード例 #8
0
        /// <summary>
        /// ����״̬�����ı�
        /// </summary>
        /// <param name="userFund"></param>
        /// <param name="userOrder"></param>
        /// <param name="userStock"></param>
        /// <returns></returns>
        public bool OrderChanged(TradingSystem.UserFund userFund, TradingSystem.UserOrders userOrder, TradingSystem.UserStocks userStock)
        {
            try
            {
                if (userFund.UserID != userOrder.UserID)
                {
                    Common.Log("Illegal Trading [UserFund.UserID=" + userFund.UserID + ";UserOrder.UserID=" + userOrder.UserID + "] @ OrderChanged.");
                    return false;
                }
                if (userOrder.OrdStatus == TradingSystem.OrderStatus.Finished
                    && userStock.UserID != userOrder.UserID)
                {
                    Common.Log("Illegal Trading [UserStock.UserID=" + userStock.UserID + ";UserOrder.UserID=" + userOrder.UserID + "] @ OrderChanged.");
                    return false;
                }

                bool bExist = false;
                switch (userOrder.OrdStatus)
                {
                    case TradingSystem.OrderStatus.Finished:
                        {
                            lock (listUserOrders)
                            {
                                for (int i = 0; i < listUserOrders.Count; i++)
                                {
                                    if (listUserOrders[i].OrderID == userOrder.OrderID)
                                    {
                                        listUserOrders.RemoveAt(i);
                                        break;
                                    }
                                }
                            }

                            bExist = false;
                            lock (listOrdersHistory)
                            {
                                for (int i = 0; i < listOrdersHistory.Count; i++)
                                {
                                    if (listOrdersHistory[i].OrderID == userOrder.OrderID)
                                    {
                                        bExist = true;
                                        listOrdersHistory[i] = userOrder;
                                        break;
                                    }
                                }
                                if (!bExist)
                                    listOrdersHistory.Add(userOrder);
                            }
                            lock (listRemoveOrders)
                            {
                                listRemoveOrders.Add(userOrder.OrderID);
                            }
                            if (userOrder.OrdType == TradingSystem.OrderType.ImmediateOrder
                                || userOrder.OrdType == TradingSystem.OrderType.LimitedOrder)
                            {
                                bExist = false;
                                lock (listUserStocks)
                                {
                                    for (int i = 0; i < listUserStocks.Count; i++)
                                    {
                                        if (listUserStocks[i].UserID == userStock.UserID
                                            && listUserStocks[i].StockCode != null
                                            && string.Compare(userStock.StockCode.Trim(),
                                            listUserStocks[i].StockCode.Trim()) == 0
                                            && userStock.Market == listUserStocks[i].Market)
                                        {
                                            bExist = true;
                                            listUserStocks[i] = userStock;
                                            break;
                                        }
                                    }
                                    if (!bExist)
                                        listUserStocks.Add(userStock);
                                }

                                TradingHistory TradeItem = new TradingHistory();
                                TradeItem.Initialize();
                                TradeItem.OrderID = userOrder.OrderID;
                                TradeItem.Side = userOrder.Side;
                                TradeItem.StockCode = userOrder.StockCode;
                                TradeItem.Market = userOrder.Market;
                                TradeItem.TradeVolume = userOrder.OrderVolume;
                                TradeItem.TradeDate = userOrder.UpdatedDate;
                                if (userOrder.TradePrice > 0)
                                    TradeItem.TradePrice = userOrder.TradePrice;
                                else
                                {
                                    Common.Log("Illegal Trading Price [TradePrice=" + userOrder.TradePrice.ToString("f4") + "].");
                                    TradeItem.TradePrice = userOrder.OrderPrice;
                                }
                                TradeItem.Curr = userOrder.Curr;
                                TradeItem.UserID = userOrder.UserID;
                                lock (listTradingHistory)
                                {
                                    listTradingHistory.Add(TradeItem);
                                }
                            }

                            if (Common.stkBuffer != null)
                            {
                                RemotingInterface.RI_Order stiOrder = new RemotingInterface.RI_Order();
                                stiOrder.Clear();
                                stiOrder.ExpiredDate = userOrder.ExpiredDate;
                                stiOrder.OrderDate = userOrder.OrderDate;
                                stiOrder.OrderID = userOrder.OrderID;
                                stiOrder.OrderPrice = Common.ConvertPrice(userOrder.OrderPrice);
                                stiOrder.TradePrice = Common.ConvertPrice(userOrder.TradePrice);
                                stiOrder.OrderStatus = (RemotingInterface.RI_Status)userOrder.OrdStatus;
                                stiOrder.OrderType = (RemotingInterface.RI_Type)userOrder.OrdType;
                                stiOrder.OrderVolume = userOrder.OrderVolume;
                                stiOrder.Side = userOrder.Side;
                                stiOrder.StockCode = userOrder.StockCode.Trim();
                                stiOrder.StockMarket = (RemotingInterface.RI_Market)userOrder.Market;
                                stiOrder.UpdatedDate = userOrder.UpdatedDate;
                                stiOrder.Curr = (RemotingInterface.RI_Currency)userOrder.Curr;
                                Common.stkBuffer.SetUserOrders(userOrder.UserID, stiOrder);

                                if (userOrder.OrdType == TradingSystem.OrderType.ImmediateOrder
                                    || userOrder.OrdType == TradingSystem.OrderType.LimitedOrder)
                                {
                                    RemotingInterface.RI_Stock stiStock = new RemotingInterface.RI_Stock();
                                    stiStock.Clear();
                                    stiStock.AveragePrice = Common.ConvertPrice(userStock.AveragePrice);
                                    stiStock.Curr = (RemotingInterface.RI_Currency)userStock.Curr;
                                    stiStock.StockCode = userStock.StockCode.Trim();
                                    stiStock.StockMarket = (RemotingInterface.RI_Market)userStock.Market;
                                    stiStock.Volume = userOrder.OrderVolume;
                                    if (userStock.Sellable)
                                        stiStock.SellableVolume = userOrder.OrderVolume;
                                    else
                                        stiStock.SellableVolume = 0;
                                    if (userOrder.Side)
                                        Common.stkBuffer.AddUserStocks(userStock.UserID, stiStock);
                                    else
                                        Common.stkBuffer.SubUserStocks(userStock.UserID, stiStock);

                                    RemotingInterface.RI_Trading stiTrading = new RemotingInterface.RI_Trading();
                                    stiTrading.Clear();
                                    stiTrading.Side = userOrder.Side;
                                    stiTrading.StockCode = userOrder.StockCode.Trim();
                                    stiTrading.StockMarket = (RemotingInterface.RI_Market)userOrder.Market;
                                    stiTrading.TradeVolume = userOrder.OrderVolume;
                                    stiTrading.TradeDate = userOrder.UpdatedDate;
                                    stiTrading.Curr = (RemotingInterface.RI_Currency)userOrder.Curr;
                                    if (userOrder.TradePrice > 0)
                                        stiTrading.TradePrice = Common.ConvertPrice(userOrder.TradePrice);
                                    else
                                        stiTrading.TradePrice = Common.ConvertPrice(userOrder.OrderPrice);
                                    Common.stkBuffer.SetUserTradings(userOrder.UserID, stiTrading);
                                }
                            }
                        }
                        break;
                    case TradingSystem.OrderStatus.Cancelled:
                    case TradingSystem.OrderStatus.Failure:
                    case TradingSystem.OrderStatus.Unknown:
                        {
                            bExist = false;
                            lock (listUserOrders)
                            {
                                for (int i = 0; i < listUserOrders.Count; i++)
                                {
                                    if (listUserOrders[i].OrderID == userOrder.OrderID)
                                    {
                                        listUserOrders.RemoveAt(i);
                                        break;
                                    }
                                }
                            }
                            lock (listOrdersHistory)
                            {
                                for (int i = 0; i < listOrdersHistory.Count; i++)
                                {
                                    if (listOrdersHistory[i].OrderID == userOrder.OrderID)
                                    {
                                        bExist = true;
                                        listOrdersHistory[i] = userOrder;
                                        break;
                                    }
                                }
                                if (!bExist)
                                    listOrdersHistory.Add(userOrder);
                            }
                            lock (listRemoveOrders)
                            {
                                listRemoveOrders.Add(userOrder.OrderID);
                            }

                            if (Common.stkBuffer != null)
                            {
                                RemotingInterface.RI_Order stiOrder = new RemotingInterface.RI_Order();
                                stiOrder.Clear();
                                stiOrder.ExpiredDate = userOrder.ExpiredDate;
                                stiOrder.OrderDate = userOrder.OrderDate;
                                stiOrder.OrderID = userOrder.OrderID;
                                stiOrder.OrderPrice = Common.ConvertPrice(userOrder.OrderPrice);
                                stiOrder.OrderStatus = (RemotingInterface.RI_Status)userOrder.OrdStatus;
                                stiOrder.OrderType = (RemotingInterface.RI_Type)userOrder.OrdType;
                                stiOrder.OrderVolume = userOrder.OrderVolume;
                                stiOrder.Side = userOrder.Side;
                                stiOrder.StockCode = userOrder.StockCode.Trim();
                                stiOrder.StockMarket = (RemotingInterface.RI_Market)userOrder.Market;
                                stiOrder.UpdatedDate = userOrder.UpdatedDate;
                                stiOrder.Curr = (RemotingInterface.RI_Currency)userOrder.Curr;
                                Common.stkBuffer.SetUserOrders(userOrder.UserID, stiOrder);
                            }
                        }
                        break;
                    case TradingSystem.OrderStatus.Cancelling:
                    case TradingSystem.OrderStatus.Waiting:
                        {
                            bExist = false;
                            lock (listUserOrders)
                            {
                                for (int i = 0; i < listUserOrders.Count; i++)
                                {
                                    if (listUserOrders[i].OrderID == userOrder.OrderID)
                                    {
                                        bExist = true;
                                        listUserOrders[i] = userOrder;
                                        break;
                                    }
                                }
                                if (!bExist)
                                {
                                    listUserOrders.Add(userOrder);
                                }
                            }

                            if (Common.stkBuffer != null)
                            {
                                RemotingInterface.RI_Order stiOrder = new RemotingInterface.RI_Order();
                                stiOrder.Clear();
                                stiOrder.ExpiredDate = userOrder.ExpiredDate;
                                stiOrder.OrderDate = userOrder.OrderDate;
                                stiOrder.OrderID = userOrder.OrderID;
                                stiOrder.OrderPrice = Common.ConvertPrice(userOrder.OrderPrice);
                                stiOrder.OrderStatus = (RemotingInterface.RI_Status)userOrder.OrdStatus;
                                stiOrder.OrderType = (RemotingInterface.RI_Type)userOrder.OrdType;
                                stiOrder.OrderVolume = userOrder.OrderVolume;
                                stiOrder.Side = userOrder.Side;
                                stiOrder.StockCode = userOrder.StockCode.Trim();
                                stiOrder.StockMarket = (RemotingInterface.RI_Market)userOrder.Market;
                                stiOrder.UpdatedDate = userOrder.UpdatedDate;
                                stiOrder.Curr = (RemotingInterface.RI_Currency)userOrder.Curr;
                                Common.stkBuffer.SetUserOrders(userOrder.UserID, stiOrder);
                            }
                        }
                        break;
                    default:
                        return false;
                }

                bExist = false;
                lock (listUserCash)
                {
                    for (int i = 0; i < listUserCash.Count; i++)
                    {
                        if (listUserCash[i].UserID == userFund.UserID
                            && listUserCash[i].Curr == userFund.Curr)
                        {
                            bExist = true;
                            listUserCash[i] = userFund;
                            break;
                        }
                    }
                    if (!bExist)
                    {
                        listUserCash.Add(userFund);
                    }
                }
                if (Common.stkBuffer != null)
                {
                    RemotingInterface.RI_Fund stiFund = new RemotingInterface.RI_Fund();
                    stiFund.Clear();
                    stiFund.Cash = userFund.Cash;
                    stiFund.UsableCash = userFund.UsableCash;
                    stiFund.Wealth = Common.ConvertPrice(userFund.Wealth);
                    stiFund.Curr = (RemotingInterface.RI_Currency)userFund.Curr;
                    Common.stkBuffer.SetUserFund(userFund.UserID, stiFund);
                }

                try
                {
                    Common.OrderNotifier.UserOrders_Handled(Common.WebService_PlayID, userOrder.UserID, (byte)userOrder.OrdStatus);
                }
                catch
                {
                    Common.Log("OrderNotifier.RI_UserOrders_Handled() Failed. [" + userOrder.UserID + "/" + userOrder.OrderID + "]");
                }
                return true;
            }
            catch (Exception err)
            {
                Common.Log(err);
                return false;
            }
        }
コード例 #9
0
        /// <summary>
        /// �¶���׷�������
        /// </summary>
        /// <param name="userOrder"></param>
        /// <param name="UserID"></param>
        /// <returns></returns>
        public bool OrderAppended(TradingSystem.UserOrders userOrder, int UserID)
        {
            try
            {
                if (UserID != userOrder.UserID)
                {
                    Common.Log("Illegal Append [UserFund.UserID=" + UserID + ";UserOrder.UserID=" + userOrder.UserID + "] @ OrderAppended.");
                    return false;
                }

                bool bExist = false;
                switch (userOrder.OrdStatus)
                {
                    case TradingSystem.OrderStatus.Waiting:
                        {
                            bExist = false;
                            lock (listUserOrders)
                            {
                                for (int i = 0; i < listUserOrders.Count; i++)
                                {
                                    if (listUserOrders[i].OrderID == userOrder.OrderID)
                                    {
                                        bExist = true;
                                        listUserOrders[i] = userOrder;
                                        break;
                                    }
                                }
                                if (!bExist)
                                {
                                    listUserOrders.Add(userOrder);
                                }
                            }
                        }
                        break;
                    default:
                        return false;
                }
                if (Common.stkBuffer != null)
                {
                    RemotingInterface.RI_Order stiOrder = new RemotingInterface.RI_Order();
                    stiOrder.Clear();
                    stiOrder.ExpiredDate = userOrder.ExpiredDate;
                    stiOrder.OrderDate = userOrder.OrderDate;
                    stiOrder.OrderID = userOrder.OrderID;
                    stiOrder.OrderPrice = Common.ConvertPrice(userOrder.OrderPrice);
                    stiOrder.Curr = (RemotingInterface.RI_Currency)userOrder.Curr;
                    stiOrder.OrderStatus = (RemotingInterface.RI_Status)userOrder.OrdStatus;
                    stiOrder.OrderType = (RemotingInterface.RI_Type)userOrder.OrdType;
                    stiOrder.OrderVolume = userOrder.OrderVolume;
                    stiOrder.Side = userOrder.Side;
                    stiOrder.StockCode = userOrder.StockCode.Trim();
                    stiOrder.StockMarket = (RemotingInterface.RI_Market)userOrder.Market;
                    stiOrder.UpdatedDate = userOrder.UpdatedDate;
                    Common.stkBuffer.SetUserOrders(userOrder.UserID, stiOrder);
                }
                return true;
            }
            catch (Exception err)
            {
                Common.Log(err);
                return false;
            }
        }
コード例 #10
0
        /// <summary>
        /// �����û��ֽ��¼
        /// </summary>
        /// <param name="userFund"></param>
        /// <param name="UserID"></param>
        /// <returns></returns>
        public bool FundUpdate(TradingSystem.UserFund userFund, int UserID)
        {
            try
            {
                double defaultFund = 0;
                switch(userFund.Curr)
                {
                    case TradingSystem.Currency.AUD:
                        defaultFund = Common.stkTrading.defaultAUD;
                        break;
                    case TradingSystem.Currency.CAD:
                        defaultFund = Common.stkTrading.defaultCAD;
                        break;
                    case TradingSystem.Currency.CHF:
                        defaultFund = Common.stkTrading.defaultCHF;
                        break;
                    case TradingSystem.Currency.EUR:
                        defaultFund = Common.stkTrading.defaultEUR;
                        break;
                    case TradingSystem.Currency.GBP:
                        defaultFund = Common.stkTrading.defaultGBP;
                        break;
                    case TradingSystem.Currency.HKD:
                        defaultFund = Common.stkTrading.defaultHKD;
                        break;
                    case TradingSystem.Currency.JPY:
                        defaultFund = Common.stkTrading.defaultJPY;
                        break;
                    case TradingSystem.Currency.NZD:
                        defaultFund = Common.stkTrading.defaultNZD;
                        break;
                    case TradingSystem.Currency.USD:
                        defaultFund = Common.stkTrading.defaultUSD;
                        break;
                    default:
                        defaultFund = Common.stkTrading.defaultRMB;
                        break;
                }
                if (userFund.UserID != UserID)
                {
                    Common.Log("Illegal Fund Updating [UserFund.UserID=" + userFund.UserID + ";UserOrder.UserID=" + UserID + "] @ FundUpdate.");
                    return false;
                }
                else if (Common.ComparePrice(userFund.Cash + (defaultFund * 0.001), userFund.UsableCash) < 0)
                {
                    Common.Log("Illegal Fund Updating [UserFund.UserID=" + userFund.UserID + ";UserFund.Currency=" + userFund.Curr.ToString().Trim() +
                        ";UserFund.Cash=" + userFund.Cash + ";UserFund.UsableCash=" + userFund.UsableCash + "] @ FundUpdate.");
                    return false;
                }
                else if (Common.ComparePrice(userFund.Cash, userFund.UsableCash) < 0)
                {
                    userFund.UsableCash = userFund.Cash;
                }

                if (Common.stkBuffer != null)
                {
                    RemotingInterface.RI_Fund stiFund = new RemotingInterface.RI_Fund();
                    stiFund.Clear();
                    stiFund.Cash = userFund.Cash;
                    stiFund.UsableCash = userFund.UsableCash;
                    stiFund.Wealth = Common.ConvertPrice(userFund.Wealth);
                    stiFund.Curr = (RemotingInterface.RI_Currency)userFund.Curr;
                    Common.stkBuffer.SetUserFund(userFund.UserID, stiFund);
                }
                lock (listUserUsableCash)
                {
                    for (int i = 0; i < listUserUsableCash.Count; i++)
                    {
                        if (listUserUsableCash[i].UserID == userFund.UserID
                            && listUserUsableCash[i].Curr == userFund.Curr)
                        {
                            listUserUsableCash[i] = userFund;
                            return true;
                        }
                    }
                    listUserUsableCash.Add(userFund);
                }
                return true;
            }
            catch (Exception err)
            {
                Common.Log(err);
                return false;
            }
        }
コード例 #11
0
        /// <summary>
        /// ��¼������Ϣ
        /// </summary>
        /// <param name="userOrder"></param>
        /// <param name="strDescription"></param>
        /// <returns></returns>
        public bool RecordError(TradingSystem.UserOrders userOrder, string strDescription)
        {
            // ������ʧ��ʱ����¼ʧ��ԭ��
            try
            {
                if (strDescription == null)
                    return false;

                switch (userOrder.OrdStatus)
                {
                    case TradingSystem.OrderStatus.Failure:
                        {
                            TradingError TrdErr = new TradingError();
                            TrdErr.Initialize();
                            TrdErr.OrderID = userOrder.OrderID;
                            TrdErr.Description = strDescription;
                            TrdErr.ErrDate = userOrder.UpdatedDate;
                            lock (listTradingError)
                            {
                                listTradingError.Add(TrdErr);
                            }
                        }
                        break;
                    default:
                        return false;
                }
                return true;
            }
            catch (Exception err)
            {
                Common.Log(err);
                return false;
            }
        }
コード例 #12
0
ファイル: Main.cs プロジェクト: thetazhou/StockTrading
        /// <summary>
        /// ��ʼ�������
        /// </summary>
        /// <returns></returns>
        public static bool Initialize()
        {
            try
            {
                Common.Log(">>> Loading Configuration Settings...");
                //�������ļ�
                if (!File.Exists(Common.Config()))
                {
                    Common.Log("Unaccessible Configuration File. [ " + Common.Config() + " ]");
                    return false;
                }
                //���ؽ��׿���ʱ������
                if (!TimeSpan.TryParse(Common.Config("System", "BeginTimeAM"), out Common.BeginAMTS)
                    || !TimeSpan.TryParse(Common.Config("System", "EndTimeAM"), out Common.EndAMTS)
                    || !TimeSpan.TryParse(Common.Config("System", "BeginTimePM"), out Common.BeginPMTS)
                    || !TimeSpan.TryParse(Common.Config("System", "EndTimePM"), out Common.EndPMTS)
                    || Common.BeginAMTS >= Common.EndAMTS || Common.EndAMTS >= Common.BeginPMTS
                    || Common.BeginPMTS >= Common.EndPMTS || Common.BeginAMTS.Hours < 1 || Common.EndPMTS.Hours > 22)
                {
                    Common.Log("<<< Illegal Configuration Settings [System:BeginTime/EndTime (01:00:00~22:59:59)].");
                    return false;
                }
                else
                {
                    Common.Log("Stock Quotation Time: " + BeginAMTS.ToString() + " ~ " + EndAMTS.ToString()
                        + " / " + BeginPMTS.ToString() + " ~ " + EndPMTS.ToString());
                }
                //���ؽӿڿ���ʱ������
                if (!TimeSpan.TryParse(Common.Config("System", "BeginInterface"), out Common.BeginTradingInterface)
                    || !TimeSpan.TryParse(Common.Config("System", "EndInterface"), out Common.EndTradingInterface)
                    || Common.BeginTradingInterface == Common.EndTradingInterface)
                {
                    Common.Log("<<< Illegal Configuration Settings [System:BeginInterface/EndInterface (00:00:00~23:59:59)].");
                    return false;
                }
                else
                {
                    Common.Log("Interface Quotation Time: " + BeginTradingInterface.ToString() + " ~ " + EndTradingInterface.ToString());
                }
                //����Debug��־��������
                string strDBG = Common.Config("System", "DebugLog").ToUpper().Trim();
                if (strDBG == "1" || strDBG == "TRUE" || strDBG == "T" ||
                    strDBG == "YES" || strDBG == "Y" || strDBG == "OPEN" || strDBG == "OPENED")
                    Common.DbgLog = true;
                //���ؼ����б�����
                string strHoliday = "";
                DateTime dtHoliday = DateTime.MinValue;
                listHolidays.Clear();
                for (int i = 0; i < 100; i++)
                {
                    strHoliday = Common.Config("System", "Holiday-" + i.ToString("00").Trim());
                    if (strHoliday.Length > 0 && DateTime.TryParse(strHoliday, out dtHoliday))
                        listHolidays.Add(dtHoliday.Date);
                }
                //���ع���webService����
                if (!int.TryParse(Common.Config("WebService", "WSPlayID"), out WebService_PlayID))
                    WebService_PlayID = 0;
                Common.OrderNotifier.Url = Common.Config("WebService", "OrderNotifier");
                Common.UserWealthSvc.Url = Common.Config("WebService", "UserWealthSvc");
                //�������ݿ������ִ�����
                Common.strConn = Common.Config("Database", "Connection").Trim();
                if (Common.strConn.Length <= 0)
                {
                    Common.Log("<<< Illegal Configuration Settings [Database:Connection].");
                    return false;
                }
                //������֤����֤����Դ����
                Common.strSHQuotation = Common.Config("Quotation", "Shanghai");
                Common.strSZQuotation = Common.Config("Quotation", "Shenzhen");
                if (Common.strSHQuotation.Length <= 0 || !File.Exists(Common.strSHQuotation)
                    || Common.strSZQuotation.Length <= 0 || !File.Exists(Common.strSZQuotation))
                {
                    Common.Log("<<< Illegal Configuration Settings [Quotation:Shanghai/Shenzhen].");
                    return false;
                }
                //����ʵʱ�����ļ��������
                Common.strQuotationHistory = Common.Config("Quotation", "History");
                if (Common.strQuotationHistory.Length <= 0 || !Directory.Exists(Common.strQuotationHistory))
                {
                    Common.Log("<<< Illegal Configuration Settings [Quotation:History].");
                    return false;
                }
                //������󶩵�������
                if (!short.TryParse(Common.Config("Trading", "MaxOrders"), out Common.MaxOrders)
                    || Common.MaxOrders < 16 || Common.MaxOrders > 256)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:MaxOrders (16~256)].");
                    return false;
                }
                //���湹���ʼ��
                Common.stkBuffer = new StkBuffer();
                if (Common.stkBuffer.Initialize())
                {
                    Common.Log("Interface Buffer Initialized");
                }
                else
                {
                    Common.Log("Failed to Initialize The Interface Buffer");
                    return false;
                }
                //����ϵͳ����
                Common.stkTrading = new TradingSystem();
                #region ���س�ʼ�ʽ�����
                double.TryParse(Common.Config("Trading", "InitAUD"), out Common.stkTrading.defaultAUD);
                if (Common.stkTrading.defaultAUD < 0 || Common.stkTrading.defaultAUD > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitAUD (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitCAD"), out Common.stkTrading.defaultCAD);
                if (Common.stkTrading.defaultCAD < 0 || Common.stkTrading.defaultCAD > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitCAD (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitCHF"), out Common.stkTrading.defaultCHF);
                if (Common.stkTrading.defaultCHF < 0 || Common.stkTrading.defaultCHF > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitCHF (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitEUR"), out Common.stkTrading.defaultEUR);
                if (Common.stkTrading.defaultEUR < 0 || Common.stkTrading.defaultEUR > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitEUR (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitGBP"), out Common.stkTrading.defaultGBP);
                if (Common.stkTrading.defaultGBP < 0 || Common.stkTrading.defaultGBP > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitGBP (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitHKD"), out Common.stkTrading.defaultHKD);
                if (Common.stkTrading.defaultHKD < 0 || Common.stkTrading.defaultHKD > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitHKD (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitJPY"), out Common.stkTrading.defaultJPY);
                if (Common.stkTrading.defaultJPY < 0 || Common.stkTrading.defaultJPY > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitJPY (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitNZD"), out Common.stkTrading.defaultNZD);
                if (Common.stkTrading.defaultNZD < 0 || Common.stkTrading.defaultNZD > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitNZD (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitRMB"), out Common.stkTrading.defaultRMB);
                if (Common.stkTrading.defaultRMB < 0 || Common.stkTrading.defaultRMB > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitRMB (0~1,000,000,000)].");
                    return false;
                }
                double.TryParse(Common.Config("Trading", "InitUSD"), out Common.stkTrading.defaultUSD);
                if (Common.stkTrading.defaultUSD < 0 || Common.stkTrading.defaultUSD > (double)1000 * 1000 * 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitUSD (0~1,000,000,000)].");
                    return false;
                }

                if (Common.stkTrading.defaultAUD < 1000 && Common.stkTrading.defaultCAD < 1000 &&
                    Common.stkTrading.defaultCHF < 1000 && Common.stkTrading.defaultEUR < 1000 &&
                    Common.stkTrading.defaultGBP < 1000 && Common.stkTrading.defaultHKD < 1000 &&
                    Common.stkTrading.defaultJPY < 1000 && Common.stkTrading.defaultNZD < 1000 &&
                    Common.stkTrading.defaultRMB < 1000 && Common.stkTrading.defaultUSD < 1000)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:InitFund (1000~1,000,000,000)].");
                    return false;
                }
                #endregion
                //������������������
                double.TryParse(Common.Config("Trading", "BuyTax"), out Common.stkTrading.defaultBuyTax);
                if (Common.stkTrading.defaultBuyTax < 0 || Common.stkTrading.defaultBuyTax > 0.5)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:BuyTax (0~0.5)].");
                    return false;
                }
                //�����������������
                double.TryParse(Common.Config("Trading", "SellTax"), out Common.stkTrading.defaultSellTax);
                if (Common.stkTrading.defaultSellTax < 0 || Common.stkTrading.defaultSellTax > 0.5)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:SellTax (0~0.5)].");
                    return false;
                }
                //���ص��ɱ�����������
                double.TryParse(Common.Config("Trading", "SingleRate"), out Common.stkTrading.defaultSingleStockRate);
                if (Common.stkTrading.defaultSingleStockRate < 0.01 || Common.stkTrading.defaultSingleStockRate > 10)
                {
                    Common.Log("<<< Illegal Configuration Settings [Trading:SingleRate (0.01~10)].");
                    return false;
                }
                //���ض���ID����
                if (!int.TryParse(Common.Config("Trading", "InitOrderID"), out Common.stkTrading.nLastOrderID))
                    Common.stkTrading.nLastOrderID = 0;
                //����ϵͳ���
                if (!Common.stkTrading.Initialize())
                {
                    return false;
                }
                //����ϵͳ���
                Common.stkQuotation = new Quotation();
                if (!Common.stkQuotation.Initialize())
                {
                    return false;
                }

                #region �ӿڿ���
                #region �����
                //������û�����
                string strReq = Common.Config("Interface", "NewUser").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_NewUser)
                        Common.Log(" *** Interface-NewUser [Closed] *** ");
                    Common.Switch_NewUser = false;
                }
                else
                {
                    if (!Common.Switch_NewUser)
                        Common.Log(" *** Interface-NewUser [Opened] *** ");
                    Common.Switch_NewUser = true;
                }
                //��Ӽ�ʱ��������
                strReq = Common.Config("Interface", "ImmediateOrder").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_ImmediateOrder)
                        Common.Log(" *** Interface-ImmediateOrder [Closed] *** ");
                    Common.Switch_ImmediateOrder = false;
                }
                else
                {
                    if (!Common.Switch_ImmediateOrder)
                        Common.Log(" *** Interface-ImmediateOrder [Opened] *** ");
                    Common.Switch_ImmediateOrder = true;
                }
                //����޼۶�������
                strReq = Common.Config("Interface", "LimitedOrder").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_LimitedOrder)
                        Common.Log(" *** Interface-LimitedOrder [Closed] *** ");
                    Common.Switch_LimitedOrder = false;
                }
                else
                {
                    if (!Common.Switch_LimitedOrder)
                        Common.Log(" *** Interface-LimitedOrder [Opened] *** ");
                    Common.Switch_LimitedOrder = true;
                }
                //���ȡ����������
                strReq = Common.Config("Interface", "CancelOrder").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_CancelOrder)
                        Common.Log(" *** Interface-CancelOrder [Closed] *** ");
                    Common.Switch_CancelOrder = false;
                }
                else
                {
                    if (!Common.Switch_CancelOrder)
                        Common.Log(" *** Interface-CancelOrder [Opened] *** ");
                    Common.Switch_CancelOrder = true;
                }
                #endregion
                #region ������
                strReq = Common.Config("Interface", "UserFund").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_UserFund)
                        Common.Log(" *** Interface-UserFund [Closed] *** ");
                    Common.Switch_UserFund = false;
                }
                else
                {
                    if (!Common.Switch_UserFund)
                        Common.Log(" *** Interface-UserFund [Opened] *** ");
                    Common.Switch_UserFund = true;
                }

                strReq = Common.Config("Interface", "UserOrders").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_UserOrders)
                        Common.Log(" *** Interface-UserOrders [Closed] *** ");
                    Common.Switch_UserOrders = false;
                }
                else
                {
                    if (!Common.Switch_UserOrders)
                        Common.Log(" *** Interface-UserOrders [Opened] *** ");
                    Common.Switch_UserOrders = true;
                }

                strReq = Common.Config("Interface", "UserStocks").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_UserStocks)
                        Common.Log(" *** Interface-UserStocks [Closed] *** ");
                    Common.Switch_UserStocks = false;
                }
                else
                {
                    if (!Common.Switch_UserStocks)
                        Common.Log(" *** Interface-UserStocks [Opened] *** ");
                    Common.Switch_UserStocks = true;
                }

                strReq = Common.Config("Interface", "UserTrades").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_UserTrades)
                        Common.Log(" *** Interface-UserTrades [Closed] *** ");
                    Common.Switch_UserTrades = false;
                }
                else
                {
                    if (!Common.Switch_UserTrades)
                        Common.Log(" *** Interface-UserTrades [Opened] *** ");
                    Common.Switch_UserTrades = true;
                }

                strReq = Common.Config("Interface", "UserFundChanges").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_UserFundChanges)
                        Common.Log(" *** Interface-UserFundChanges [Closed] *** ");
                    Common.Switch_UserFundChanges = false;
                }
                else
                {
                    if (!Common.Switch_UserFundChanges)
                        Common.Log(" *** Interface-UserFundChanges [Opened] *** ");
                    Common.Switch_UserFundChanges = true;
                }
                #endregion
                #region ������
                strReq = Common.Config("Interface", "ServiceStatus").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_ServiceStatus)
                        Common.Log(" *** Interface-ServiceStatus [Closed] *** ");
                    Common.Switch_ServiceStatus = false;
                }
                else
                {
                    if (!Common.Switch_ServiceStatus)
                        Common.Log(" *** Interface-ServiceStatus [Opened] *** ");
                    Common.Switch_ServiceStatus = true;
                }

                strReq = Common.Config("Interface", "ServiceConfiguration").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_Configuration)
                        Common.Log(" *** Interface-ServiceConfiguration [Closed] *** ");
                    Common.Switch_Configuration = false;
                }
                else
                {
                    if (!Common.Switch_Configuration)
                        Common.Log(" *** Interface-ServiceConfiguration [Opened] *** ");
                    Common.Switch_Configuration = true;
                }

                strReq = Common.Config("Interface", "ServiceMaintain").ToUpper().Trim();
                if (strReq == "0" || strReq == "FALSE" || strReq == "F" ||
                    strReq == "NO" || strReq == "N" || strReq == "CLOSE" || strReq == "CLOSED")
                {
                    if (Common.Switch_Maintain)
                        Common.Log(" *** Interface-ServiceMaintain [Closed] *** ");
                    Common.Switch_Maintain = false;
                }
                else
                {
                    if (!Common.Switch_Maintain)
                        Common.Log(" *** Interface-ServiceMaintain [Opened] *** ");
                    Common.Switch_Maintain = true;
                }
                #endregion
                #endregion
                //����remoting����
                RemotingConfiguration.Configure(Process.GetCurrentProcess().MainModule.FileName + ".config", false);
                Common.Log("Interface System Created");

                try
                {
                    OrderNotifier.Clear(WebService_PlayID);
                }
                catch
                { }
                Common.Log("<<< Configuration Settings Loaded.");
                return true;
            }
            catch (Exception err)
            {
                Common.Log(err);
                return false;
            }
        }