/// <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; } }
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; } }
/// <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; } }
/// <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; } }
/// <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(); } }
/// <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(); } }
/// <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="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; } }
/// <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; } }
/// <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; } }
/// <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; } }
/// <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; } }