/// <summary> /// CANCEL BINARY COMMAND OF MARKETAREA BINARY /// </summary> /// <param name="InvestorID"></param> internal void CancelBinaryCommand(int CommandID) { Business.OpenTrade Result = new OpenTrade(); if (Business.Market.CommandExecutor != null) { int count = Business.Market.CommandExecutor.Count; for (int i = 0; i < count; i++) { if (Business.Market.CommandExecutor[i].ID == CommandID) { #region Find Command In Command Executor Result.ClientCode = Business.Market.CommandExecutor[i].ClientCode; Result.ClosePrice = Business.Market.CommandExecutor[i].ClosePrice; Result.CloseTime = Business.Market.CommandExecutor[i].CloseTime; Result.CommandCode = Business.Market.CommandExecutor[i].CommandCode; Result.Commission = Business.Market.CommandExecutor[i].Commission; Result.ExpTime = Business.Market.CommandExecutor[i].ExpTime; Result.ID = Business.Market.CommandExecutor[i].ID; Result.IsClose = Business.Market.CommandExecutor[i].IsClose; Result.Margin = Business.Market.CommandExecutor[i].Margin; Result.OpenPrice = Business.Market.CommandExecutor[i].OpenPrice; Result.OpenTime = Business.Market.CommandExecutor[i].OpenTime; Result.Profit = Business.Market.CommandExecutor[i].Profit; Result.Size = Business.Market.CommandExecutor[i].Size; Result.StopLoss = Business.Market.CommandExecutor[i].StopLoss; Result.Swap = Business.Market.CommandExecutor[i].Swap; Result.Symbol = Business.Market.CommandExecutor[i].Symbol; Result.TakeProfit = Business.Market.CommandExecutor[i].TakeProfit; Result.Investor = Business.Market.CommandExecutor[i].Investor; Result.Type = Business.Market.CommandExecutor[i].Type; if (TradingServer.Business.BinaryCommand.isTrade == true) { //Call Function Remove In Investor List Result.Symbol.MarketAreaRef.CloseCommand(Result); return; } else { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(5, false, "CM016", Business.Market.CommandExecutor[i]); Result.Investor.ClientCommandQueue.Add(Message); return; } #endregion } } } }
/// <summary> /// /// </summary> /// <param name="Command"></param> /// <returns></returns> public IPresenter.CloseCommandDelegate CloseCommandNotify(OpenTrade Command) { return null; }
/// <summary> /// MAKE COMMAND OF MARKETAREA SPOT COMMAND /// </summary> /// <param name="Cmd"></param> internal void MakeCommand(string Cmd) { Business.OpenTrade Command = new OpenTrade(); Command = Model.CommandFramework.CommandFrameworkInstance.ExtractCommand(Cmd); if (Command.Symbol.IsTrade == false) { string Message = "CMD12369$False,CM034"; Command.Investor.ClientCommandQueue.Add(Message); return; } if (Business.Market.IsOpen == false) { string Message = "CMD12369$False,CM033"; Command.Investor.ClientCommandQueue.Add(Message); return; } if (Command.Symbol.IsHoliday == 1) { string Message = "CMD12369$False,CM035"; Command.Investor.ClientCommandQueue.Add(Message); return; } #region Get Setting IsTrade In Group bool IsTradeGroup = false; if (Business.Market.InvestorGroupList != null) { int count = Business.Market.InvestorGroupList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorGroupList[i].InvestorGroupID == Command.Investor.InvestorGroupInstance.InvestorGroupID) { if (Business.Market.InvestorGroupList[i].ParameterItems != null) { int countParameter = Business.Market.InvestorGroupList[i].ParameterItems.Count; for (int j = 0; j < countParameter; j++) { if (Business.Market.InvestorGroupList[i].ParameterItems[j].Code == "G01") { if (Business.Market.InvestorGroupList[i].ParameterItems[j].BoolValue == 1) IsTradeGroup = true; break; } } } break; } } } #endregion if (IsTradeGroup == true) { if (Command.Symbol == null || Command.Investor == null || Command.Type == null || Command.IGroupSecurity == null) { #region Check Investor != null Then Return Error To Client if (Command.Investor != null) { //Add Result To Client Command Queue Of Investor string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM001", Command); Command.Investor.ClientCommandQueue.Add(Message); } #endregion return; } //End If Check Instant Symbol,Investor,Type,IGroupSecurity else { #region Check Lots Minimum And Maximum In IGroupSecurity And Check IsTrade In IGroupSecurity bool IsTrade = false; double Minimum = -1; double Maximum = -1; double Step = -1; bool ResultCheckStepLots = false; #region Get Config IGroupSecurity if (Command.IGroupSecurity.IGroupSecurityConfig != null) { int countIGroupSecurityConfig = Command.IGroupSecurity.IGroupSecurityConfig.Count; for (int i = 0; i < countIGroupSecurityConfig; i++) { if (Command.IGroupSecurity.IGroupSecurityConfig[i].Code == "B01") { if (Command.IGroupSecurity.IGroupSecurityConfig[i].BoolValue == 1) IsTrade = true; } if (Command.IGroupSecurity.IGroupSecurityConfig[i].Code == "B11") { double.TryParse(Command.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Minimum); } if (Command.IGroupSecurity.IGroupSecurityConfig[i].Code == "B12") { double.TryParse(Command.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Maximum); } if (Command.IGroupSecurity.IGroupSecurityConfig[i].Code == "B13") { double.TryParse(Command.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Step); } } } #endregion if (IsTrade == true) { ResultCheckStepLots = Command.IGroupSecurity.CheckStepLots(Minimum, Maximum, Step, Command.Size); #region If Check Step Lots False Return Client if (ResultCheckStepLots == false) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM002", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } #endregion #region Check Status Trade Of Symbol(Full Access,Close Only, No) if (Command.Symbol.Trade != "Full access") { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM003", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } #endregion #region Check Stop Loss And Take Profit if (Command.StopLoss > 0 || Command.TakeProfit > 0) { if (Command.Type.ID == 1 || Command.Type.ID == 2) { #region Check Limit And Stop Of Open Trade bool ResultCheckLimit = false; ResultCheckLimit = Command.Symbol.CheckLimitAndStop(Command.Symbol.Name, Command.Type.ID, Command.StopLoss, Command.TakeProfit, Command.Symbol.LimitStopLevel, Command.Symbol.Digit); if (ResultCheckLimit == false) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM004", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } #endregion } else if (Command.Type.ID == 7 || Command.Type.ID == 8 || Command.Type.ID == 9 || Command.Type.ID == 10) { #region Check Limit And Stop Of Pending Order bool ResultCheckLimit = false; ResultCheckLimit = Command.Symbol.CheckLimitAndStopPendingOrder(Command.Symbol.Name, Command.Type.ID, Command.OpenPrice, Command.StopLoss, Command.TakeProfit, Command.Symbol.LimitStopLevel, Command.Symbol.Digit); if (ResultCheckLimit == false) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM005", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } #endregion } } #endregion #region Check Setting IsLong switch (Command.Type.ID) { #region Case Sell case 2: { if (Command.Symbol.LongOnly == true) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM006", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } } break; #endregion #region Case Sell Limit case 8: { if (Command.Symbol.LongOnly == true) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM006", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } } break; #endregion #region Case Sell Stop case 10: { if (Command.Symbol.LongOnly == true) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM006", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } } break; #endregion } #endregion #region If Command Type == 1 Or 2 Then Call Dealer Else Then Call Function In MarketArea(SpotCommand, FutureCommand....) if (Command.Type.ID == 1 || Command.Type.ID == 2) { //Call Dealer Business.RequestDealer newRequestDealer = new Business.RequestDealer(); newRequestDealer.InvestorID = Command.Investor.InvestorID; newRequestDealer.MaxDev = Command.MaxDev; newRequestDealer.Name = "Open"; newRequestDealer.Request = Command; newRequestDealer.TimeClientRequest = DateTime.Now; TradingServer.Facade.FacadeSendRequestToDealer(newRequestDealer); } else { Command.Symbol.MarketAreaRef.AddCommand(Command); } #endregion } //End If Check IsTrade In IGroupSecurity else { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM007", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } //End If Check Is Trade In IGroupSecurity #endregion } //End Else Check Instant Symbol,Investor,Type,IGroupSecurity } //End If Check IsTrade In Group else { if (Command.Investor != null) { //Add Result To Client Command Queue Of Investor string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(1, false, "CM008", Command); Command.Investor.ClientCommandQueue.Add(Message); } return; } //End Else Check IsTrade In Group }
/// <summary> /// GET ONLINE COMMAND BY ONLINE COMMAND ID OF MARKETARE SPOT COMMAND /// </summary> /// <param name="OpenTradeID"></param> /// <returns></returns> internal string GetOpenTradeByOpenTradeID(int OpenTradeID) { string Result = string.Empty; Business.OpenTrade OpenTrade = new OpenTrade(); OpenTrade = TradingServer.Facade.FacadeGetOpenTradeByOpenTradeID(OpenTradeID); if (OpenTrade != null) { Result = OpenTrade.ClientCode + "," + OpenTrade.ClosePrice + "," + OpenTrade.CloseTime + "," + OpenTrade.CommandCode + "," + OpenTrade.Commission + "," + OpenTrade.ExpTime + "," + OpenTrade.ID + "," + OpenTrade.Investor.InvestorID + "," + OpenTrade.IsClose + "," + OpenTrade.IsHedged + "," + OpenTrade.Margin + "," + OpenTrade.MaxDev + "," + OpenTrade.OpenPrice + "," + OpenTrade.OpenTime + "," + OpenTrade.Profit + "," + OpenTrade.Size + "," + OpenTrade.StopLoss + "," + OpenTrade.Swap + "," + OpenTrade.Symbol.Name + "," + OpenTrade.TakeProfit + "," + OpenTrade.Taxes + "," + OpenTrade.Type.Name + "," + OpenTrade.Type.ID + "," + OpenTrade.Symbol.ContractSize; } return Result; }
/// <summary> /// CLOSE COMMAND BY MANAGER /// </summary> /// <param name="CommandID"></param> /// <returns></returns> internal bool CloseCommandByManager(int CommandID) { bool Result = false; Business.OpenTrade OpenTrade = new OpenTrade(); OpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandExecutor(CommandID); if (OpenTrade != null) { OpenTrade.Symbol.MarketAreaRef.CloseCommand(OpenTrade); Result = true; } return Result; }
/// <summary> /// /// </summary> /// <param name="command"></param> private void MultiUpdateCommand(Business.OpenTrade command) { List<Business.OpenTrade> listBackupData = new List<OpenTrade>(); if (this.CommandList != null) { int count = this.CommandList.Count; for (int i = 0; i < count; i++) { if (this.CommandList[i].Symbol.Name.Trim().ToUpper() == command.Symbol.Name.Trim().ToUpper()) { #region BACKUP DATA Business.OpenTrade newOpenTrade = new OpenTrade(); newOpenTrade.AgentCommission = this.CommandList[i].AgentCommission; newOpenTrade.ClientCode = this.CommandList[i].ClientCode; newOpenTrade.ClosePrice = this.CommandList[i].ClosePrice; newOpenTrade.CommandCode = this.CommandList[i].CommandCode; newOpenTrade.Comment = this.CommandList[i].Comment; newOpenTrade.Commission = this.CommandList[i].Commission; newOpenTrade.ExpTime = this.CommandList[i].ExpTime; newOpenTrade.FreezeMargin = this.CommandList[i].FreezeMargin; newOpenTrade.ID = this.CommandList[i].ID; newOpenTrade.IGroupSecurity = this.CommandList[i].IGroupSecurity; newOpenTrade.Investor = this.CommandList[i].Investor; newOpenTrade.IsClose = this.CommandList[i].IsClose; newOpenTrade.IsHedged = this.CommandList[i].IsHedged; newOpenTrade.IsMultiClose = this.CommandList[i].IsMultiClose; newOpenTrade.IsMultiUpdate = this.CommandList[i].IsMultiUpdate; newOpenTrade.IsProcess = this.CommandList[i].IsProcess; newOpenTrade.IsServer = this.CommandList[i].IsServer; newOpenTrade.ManagerID = this.CommandList[i].ManagerID; newOpenTrade.Margin = this.CommandList[i].Margin; newOpenTrade.MaxDev = this.CommandList[i].MaxDev; newOpenTrade.NumberUpdate = this.CommandList[i].NumberUpdate; newOpenTrade.OpenPrice = this.CommandList[i].OpenPrice; newOpenTrade.OpenTime = this.CommandList[i].OpenTime; newOpenTrade.Size = this.CommandList[i].Size; newOpenTrade.SpreaDifferenceInOpenTrade = this.CommandList[i].SpreaDifferenceInOpenTrade; newOpenTrade.StopLoss = this.CommandList[i].StopLoss; newOpenTrade.Swap = this.CommandList[i].Swap; newOpenTrade.Symbol = this.CommandList[i].Symbol; newOpenTrade.TakeProfit = this.CommandList[i].TakeProfit; newOpenTrade.Taxes = this.CommandList[i].Taxes; newOpenTrade.Type = this.CommandList[i].Type; newOpenTrade.ClosePrice = this.CommandList[i].ClosePrice; newOpenTrade.Profit = this.CommandList[i].Profit; newOpenTrade.CloseTime = this.CommandList[i].CloseTime; listBackupData.Add(newOpenTrade); #endregion } } } if (listBackupData != null) { TradingServer.DBW.DBWOnlineCommand newDBWOnlineCommand = new DBW.DBWOnlineCommand(); bool resultUpdate = newDBWOnlineCommand.MultipleUpdateOpenTrade(listBackupData, command.StopLoss, command.TakeProfit); if (!resultUpdate) { //rollback data RollBackData(listBackupData, 2); } } }
/// <summary> /// EXTRACT COMMAND AND CALL FUNCTION /// </summary> /// <param name="Cmd"></param> /// <returns></returns> public List<string> ExtractServerCommand(string Cmd, string ipAddress, string code) { List<string> StringResult = new List<string>(); if (!string.IsNullOrEmpty(Cmd)) { string[] subCommand = Cmd.Split('#'); if (subCommand.Length > 0) { int count = subCommand.Length; for (int i = 0; i < count; i++) { string[] subValue = subCommand[i].Split('$'); switch (subValue[0]) { #region Function Class Symbol(LOG) case "SelectSymbol": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { StringResult = this.SelectSymbolInSymbolList(); } //#region INSERT SYSTEM LOG ////INSERT SYSTEM LOG //string content = "'" + code + "': " + StringResult.Count + " symbol has been request"; //string comment = "[request symbol]"; //TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); //#endregion } break; #endregion #region Function Class TradingConfig(SymbolConfig) case "SelectTradingConfigBySymbolID": { string[] listParameter = subValue[1].Split(','); string temp = string.Empty; if (listParameter.Length > 0) { int countParameter = listParameter.Length; string result = string.Empty; for (int j = 0; j < countParameter; j++) { temp = this.ExtractCommandServer(subValue[0] + "$" + listParameter[j], "", code); StringResult.Add(temp); } } } break; #endregion #region GET TRADING CONFIG BY LIST SYMBOL ID case "GetTradingConfigByListSymbolID": { string[] listSymbolID = subValue[1].Split(','); int countListSymbolID = listSymbolID.Length; for (int j = 0; j < count; j++) { string temp = string.Empty; temp = this.SelectTradingConfigBySymbolIDInSymbolList(int.Parse(listSymbolID[j])); StringResult.Add(subValue[0] + "$" + temp); } } break; #endregion #region Function Class Investor Group case "SelectInvestorGroup": { string temp = string.Empty; temp = this.ExtractCommandServer(subValue[0], "", code); StringResult.Add(temp); } break; #endregion #region Function Class Investor Group Config case "SelectInvestorGroupConfigByInvestorGroupID": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { string[] listParameter = subValue[1].Split(','); string temp = string.Empty; if (listParameter.Length > 0) { int countParameter = listParameter.Length; string result = string.Empty; for (int j = 0; j < countParameter; j++) { temp = this.ExtractCommandServer(subValue[0] + "$" + listParameter[j], "", code); StringResult.Add(temp); } } } } break; #endregion #region Function Class Security case "SelectSecurity": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { string temp = string.Empty; temp = this.ExtractCommandServer(subValue[0], "", code); StringResult.Add(temp); } } break; #endregion #region Function Class Security Config case "SelectSecurityConfigBySecurityID": { string[] listParameter = subValue[1].Split(','); string temp = string.Empty; if (listParameter.Length > 0) { int countParameter = listParameter.Length; string result = string.Empty; for (int j = 0; j < countParameter; j++) { temp = this.ExtractCommandServer(subValue[0] + "$" + listParameter[j], "", code); result = listParameter[j] + "*" + temp + "@"; } StringResult.Add(result); } } break; #endregion #region Function Class Investor case "SelectInvestor": { string temp = string.Empty; temp = this.ExtractCommandServer(subValue[0], "", code); StringResult.Add(temp); } break; #region GET ALL INVESTOR IN DATABASE(GET FROM TO)(LOG COMMENT) case "SelectInvestorWithRowNumber": { List<Business.Investor> Result = new List<Investor>(); if (subValue.Length == 2) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 2) { int From = -1; int To = -1; int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); int RowNumber = To - From; //Result = TradingServer.Facade.FacadeGetInvestorWithRowNumber(RowNumber, From); Result = TradingServer.Facade.FacadeGetInvestorFormTo(From, To); if (Result != null && Result.Count > 0) { int countInvestor = Result.Count; for (int j = 0; j < countInvestor; j++) { string Message = string.Empty; Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + Result[j].RegisterDay + "," + Result[j].InvestorComment + "," + Result[j].State + "," + Result[j].NickName + "," + Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline; StringResult.Add(Message); } } //else //{ //if (From == 0) //{ // Result = TradingServer.Facade.FacadeGetAllInvestor(); // if (Result != null && Result.Count > 0) // { // int countInvestor = Result.Count; // for (int j = 0; j < countInvestor; j++) // { // string Message = string.Empty; // Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + // Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + // Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + // Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + // Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + // Result[j].RegisterDay + "," + Result[j].Comment + "," + Result[j].State + "," + Result[j].NickName + "," + // Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline; // StringResult.Add(Message); // } // } //} //else //{ // string Message = subValue[0] + "$"; // StringResult.Add(Message); //} //} #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': 22450 accounts have been requested //string content = "'" + code + "': " + StringResult.Count + " accounts have been requested"; //string comment = "[account request]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } } break; #endregion #region GET INVESTOR ONLINE IN RAM(GET FROM TO) case "SelectInvestorOnline": { List<Business.Investor> Result = new List<Investor>(); if (subValue.Length == 2) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 2) { int From = -1; int To = -1; int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); Result = TradingServer.Facade.FacadeGetInvestorOnline(From, To); if (Result != null && Result.Count > 0) { int countInvestor = Result.Count; for (int j = 0; j < countInvestor; j++) { string Message = string.Empty; Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + Result[j].RegisterDay + "," + Result[j].InvestorComment + "," + Result[j].State + "," + Result[j].NickName + "," + Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': 22450 accounts have been requested string content = "'" + code + "': " + StringResult.Count + " account have been requested"; string comment = "[account request]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } break; #endregion #region GET INVESTOR ONLINE IN RAM BY LIST GROUP(GET FROM TO) case "GetInvestorOnlineByListGroup": { List<int> ListGroupID = new List<int>(); int From = -1; int To = -1; if (subValue[1].Length > 0) { string[] subParameter = subValue[1].Split(','); int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); int countParameter = subParameter.Length; for (int j = 2; j < countParameter; j++) { int InvestorGroupID = -1; int.TryParse(subParameter[j], out InvestorGroupID); ListGroupID.Add(InvestorGroupID); } List<Business.Investor> Result = new List<Investor>(); if (ListGroupID != null && ListGroupID.Count > 0) { int countListGroup = ListGroupID.Count; for (int n = 0; n < countListGroup; n++) { Result = TradingServer.Facade.FacadeGetInvestorOnlineByGroupID(From, To, ListGroupID[n]); if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + Result[j].RegisterDay + "," + Result[j].InvestorComment + "," + Result[j].State + "," + Result[j].NickName + "," + Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline; StringResult.Add(Message); } } } } if (StringResult.Count == 0) { string Message = subValue[0] + "$"; StringResult.Add(Message); } } } break; #endregion #region GET INVESTOR WITH COMMAND IN RAM(GET FROM TO) case "SelectInvestorWithCommand": { List<Business.Investor> Result = new List<Investor>(); if (subValue.Length == 2) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 2) { int From = -1; int To = -1; int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); Result = TradingServer.Facade.FacadeGetInvestorWithCommand(From, To); if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string Message = string.Empty; Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + Result[j].RegisterDay + "," + Result[j].InvestorComment + "," + Result[j].State + "," + Result[j].NickName + "," + Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].Credit; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } } } break; #endregion #region GET INVESTOR WITH MARGIN LEVEL IN RAM case "SelectInvestorWithMarginLevel": { List<Business.Investor> Result = new List<Investor>(); Result = TradingServer.Facade.FacadeGetInvestorWithMarginLevel(); if (Result != null && Result.Count > 0) { int countInvestor = Result.Count; for (int j = 0; j < countInvestor; j++) { string Message = string.Empty; Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + Result[j].RegisterDay + "," + Result[j].InvestorComment + "," + Result[j].State + "," + Result[j].NickName + "," + Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } break; #endregion #region GET INVESTOR BY INVESTOR GROUP ID(GET FROM TO) IN RAM case "GetInvestorByInvestorGroupID": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (subValue.Length == 2) { int InvestorGroupID = -1; int From = -1; int To = -1; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 3) { int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); int.TryParse(subParameter[2], out InvestorGroupID); List<Business.Investor> Result = new List<Investor>(); Result = TradingServer.Facade.FacadeGetInvestorByInvestorGroupID(InvestorGroupID, From, To); if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + InvestorGroupID + "," + Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + Result[j].RegisterDay + "," + Result[j].InvestorComment + "," + Result[j].State + "," + Result[j].NickName + "," + Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } } } } break; #endregion #region GET INVESTOR BY INVESTOR GROUP ID GET FROM TO IN DATABASE(LOG COMMENT) case "GetInvestorByInvestorGroupIDWithDB": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { List<Business.Investor> Result = new List<Investor>(); if (subValue.Length == 2) { int From = -1; int To = -1; int InvestorGroupID = -1; string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 3) { int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); int.TryParse(subParameter[2], out InvestorGroupID); int RowNumber = To - From; //Result = TradingServer.Facade.FacadeGetInvestorByInvestorGroupDB(InvestorGroupID, RowNumber, From); Result = TradingServer.Facade.FacadeGetInvestorByGroupFromTo(InvestorGroupID, From, To); if (Result != null && Result.Count > 0) { int countInvestor = Result.Count; for (int j = 0; j < countInvestor; j++) { string Message = string.Empty; Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + Result[j].RegisterDay + "," + Result[j].InvestorComment + "," + Result[j].State + "," + Result[j].NickName + "," + Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline + "," + Result[j].Margin + "," + Result[j].FreezeMargin + "," + Result[j].PhonePwd + "," + Result[j].IDPassport + "," + Result[j].TotalDeposit; StringResult.Add(Message); } } //else //{ // if (From == 0) // { // Result = TradingServer.Facade.FacadeGetInvestorByInvestorGroup(InvestorGroupID); // if (Result != null && Result.Count > 0) // { // int countInvestor = Result.Count; // for (int j = 0; j < countInvestor; j++) // { // string Message = string.Empty; // Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + // Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + // Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + // Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + // Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + // Result[j].RegisterDay + "," + Result[j].Comment + "," + Result[j].State + "," + Result[j].NickName + "," + // Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline; // StringResult.Add(Message); // } // } // } //} } } if (StringResult.Count == 0) { string Message = subValue[0] + "$"; StringResult.Add(Message); } } else { string Message = subValue[0] + "$MCM005"; StringResult.Add(Message); } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': 22450 accounts have been requested //string content = "'" + code + "': " + StringResult.Count + " account have been requested"; //string comment = "[account request]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } break; #endregion #region GET INVESTOR BY INVESTOR GROUP LIST(GET FROM TO) IN RAM case "GetInvestorByListGroup": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { List<int> ListGroupID = new List<int>(); int From = -1; int To = -1; if (subValue[1].Length > 0) { string[] subParameter = subValue[1].Split(','); int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); int countParameter = subParameter.Length; for (int j = 2; j < countParameter; j++) { int InvestorGroupID = -1; int.TryParse(subParameter[j], out InvestorGroupID); ListGroupID.Add(InvestorGroupID); } List<Business.Investor> Result = new List<Investor>(); Result = TradingServer.Facade.FacadeGetInvestorByGroupList(From, To, ListGroupID); if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].InvestorStatusID + "," + Result[j].InvestorGroupInstance.InvestorGroupID + "," + Result[j].AgentID + "," + Result[j].Balance + "," + Result[j].Credit + "," + Result[j].Code + "," + Result[j].IsDisable + "," + Result[j].TaxRate + "," + Result[j].Leverage + "," + Result[j].InvestorProfileID + "," + Result[j].Address + "," + Result[j].Phone + "," + Result[j].City + "," + Result[j].Country + "," + Result[j].Email + "," + Result[j].ZipCode + "," + Result[j].RegisterDay + "," + Result[j].InvestorComment + "," + Result[j].State + "," + Result[j].NickName + "," + Result[j].AllowChangePwd + "," + Result[j].ReadOnly + "," + Result[j].SendReport + "," + Result[j].IsOnline + "," + Result[j].Margin + "," + Result[j].FreezeMargin + "," + Result[j].PhonePwd + "," + Result[j].IDPassport; StringResult.Add(Message); } } } } if (StringResult.Count == 0) { string Message = subValue[0] + "$"; StringResult.Add(Message); } } break; #endregion case "GetInvestorAccountByListCode": { string[] subParameter = subValue[1].Split(','); List<string> listCode = new List<string>(); if (subParameter != null && subParameter.Length > 0) { int countCode = subParameter.Length; for (int j = 0; j < countCode; j++) { listCode.Add(subParameter[j]); } } List<Business.Investor> result = TradingServer.Facade.FacadeGetInvestorByListCode(listCode); if (result != null && result.Count > 0) { int countResult = result.Count; for (int j = 0; j < countResult; j++) { string Message = subValue[0] + "$" + result[j].InvestorID + "," + result[j].InvestorStatusID + "," + result[j].InvestorGroupInstance.InvestorGroupID + "," + result[j].AgentID + "," + result[j].Balance + "," + result[j].Credit + "," + result[j].Code + "," + result[j].IsDisable + "," + result[j].TaxRate + "," + result[j].Leverage + "," + result[j].InvestorProfileID + "," + result[j].Address + "," + result[j].Phone + "," + result[j].City + "," + result[j].Country + "," + result[j].Email + "," + result[j].ZipCode + "," + result[j].RegisterDay + "," + result[j].InvestorComment + "," + result[j].State + "," + result[j].NickName + "," + result[j].AllowChangePwd + "," + result[j].ReadOnly + "," + result[j].SendReport + "," + result[j].IsOnline + "," + result[j].Margin + "," + result[j].FreezeMargin + "," + result[j].PhonePwd + "," + result[j].IDPassport; StringResult.Add(Message); } } else { string message = subValue[0] + "$"; StringResult.Add(message); } } break; #endregion #region Function Class Open Trade //GET ALL ONLINE COMMAND IN INVESTOR LIST OF CLASS MARKET(SERVER CALL) case "SelectOnlineCommand": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { List<Business.OpenTrade> Result = new List<OpenTrade>(); if (subValue.Length == 2) { string[] subParameter = subValue[1].Split(','); int From = -1; int To = -1; int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); Result = TradingServer.Facade.FacadeGetOnlineCommand(From, To); if (Result != null && Result.Count > 0) { int countCommand = Result.Count; for (int j = 0; j < countCommand; j++) { string Message = subValue[0] + "$" + Result[j].ClientCode + "," + Result[j].ClosePrice + "," + Result[j].CloseTime + "," + Result[j].CommandCode + "," + Result[j].Commission + "," + Result[j].ExpTime + "," + Result[j].ID + "," + Result[j].Investor.InvestorID + "," + Result[j].IsClose + "," + Result[j].IsHedged + "," + Result[j].Margin + "," + Result[j].MaxDev + "," + Result[j].OpenPrice + "," + Result[j].OpenTime + "," + Result[j].Profit + "," + Result[j].Size + "," + Result[j].StopLoss + "," + Result[j].Swap + "," + Result[j].Symbol.Name + "," + Result[j].TakeProfit + "," + Result[j].Taxes + "," + Result[j].Type.Name + "," + Result[j].Type.ID + "," + Result[j].Symbol.ContractSize + "," + /*Result[j].Symbol.SpreadDifference*/ Result[j].SpreaDifferenceInOpenTrade + "," + Result[j].Symbol.Currency + "," + Result[j].Comment + "," + Result[j].AgentCommission; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } } } break; //SELECT ONLINE COMMAND BY INVESTOR ID IN INVESTOR LIST OF CLASS MARKET(SERVER CALL) case "SelectOnlineCommandByInvestorID": { List<Business.OpenTrade> Result = new List<OpenTrade>(); int InvestorID = -1; int.TryParse(subValue[1], out InvestorID); Result = TradingServer.Facade.FacadeGetOnlineCommandByInvestorID(InvestorID); if (Result != null && Result.Count > 0) { int countCommand = Result.Count; for (int j = 0; j < countCommand; j++) { string Message = subValue[0] + "$" + Result[j].ClientCode + "," + Result[j].ClosePrice + "," + Result[j].CloseTime + "," + Result[j].CommandCode + "," + Result[j].Commission + "," + Result[j].ExpTime + "," + Result[j].ID + "," + Result[j].Investor.InvestorID + "," + Result[j].IsClose + "," + Result[j].IsHedged + "," + Result[j].Margin + "," + Result[j].MaxDev + "," + Result[j].OpenPrice + "," + Result[j].OpenTime + "," + Result[j].Profit + "," + Result[j].Size + "," + Result[j].StopLoss + "," + Result[j].Swap + "," + Result[j].Symbol.Name + "," + Result[j].TakeProfit + "," + Result[j].Taxes + "," + Result[j].Type.Name + "," + Result[j].Type.ID + "," + Result[j].Symbol.ContractSize + "," + Result[j].Symbol.Currency + "," + Result[j].Comment + "," + Result[j].AgentCommission; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } break; case "SelectOnlineCommandByInvestorWithStartEnd": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { List<Business.OpenTrade> Result = new List<OpenTrade>(); int InvestorID = -1; int start = 0; int end = 0; string[] subParameter = subValue[1].Split(','); int.TryParse(subParameter[0], out InvestorID); int.TryParse(subParameter[1], out start); int.TryParse(subParameter[2], out end); Result = TradingServer.Facade.FacadeGetOpenTradeByInvestorWithStartEnd(InvestorID, start, end); if (Result != null && Result.Count > 0) { int countCommand = Result.Count; for (int j = 0; j < countCommand; j++) { string Message = subValue[0] + "$" + Result[j].ClientCode + "," + Result[j].ClosePrice + "," + Result[j].CloseTime + "," + Result[j].CommandCode + "," + Result[j].Commission + "," + Result[j].ExpTime + "," + Result[j].ID + "," + Result[j].Investor.InvestorID + "," + Result[j].IsClose + "," + Result[j].IsHedged + "," + Result[j].Margin + "," + Result[j].MaxDev + "," + Result[j].OpenPrice + "," + Result[j].OpenTime + "," + Result[j].Profit + "," + Result[j].Size + "," + Result[j].StopLoss + "," + Result[j].Swap + "," + Result[j].Symbol.Name + "," + Result[j].TakeProfit + "," + Result[j].Taxes + "," + Result[j].Type.Name + "," + Result[j].Type.ID + "," + Result[j].Symbol.ContractSize + "," + Result[j].SpreaDifferenceInOpenTrade + "," + Result[j].Symbol.Currency + "," + Result[j].Comment + "," + Result[j].AgentCommission; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } else { string Message = subValue[0] + "$MCM005"; StringResult.Add(Message); } } break; case "SelectOnlineCommandByGroupList": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { List<int> ListGroupID = new List<int>(); int From = -1; int To = -1; if (subValue[1].Length > 0) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out From); int.TryParse(subParameter[1], out To); int countParameter = subParameter.Length; for (int j = 2; j < countParameter; j++) { int InvestorGroupID = -1; int.TryParse(subParameter[j], out InvestorGroupID); ListGroupID.Add(InvestorGroupID); } List<Business.OpenTrade> Result = new List<OpenTrade>(); Result = TradingServer.Facade.FacadeGetOpenTradeByGroupList(From, To, ListGroupID); if (Result != null && Result.Count > 0) { int countCommand = Result.Count; for (int j = 0; j < countCommand; j++) { string Message = subValue[0] + "$" + Result[j].ClientCode + "," + Result[j].ClosePrice + "," + Result[j].CloseTime + "," + Result[j].CommandCode + "," + Result[j].Commission + "," + Result[j].ExpTime + "," + Result[j].ID + "," + Result[j].Investor.InvestorID + "," + Result[j].IsClose + "," + Result[j].IsHedged + "," + Result[j].Margin + "," + Result[j].MaxDev + "," + Result[j].OpenPrice + "," + Result[j].OpenTime + "," + Result[j].Profit + "," + Result[j].Size + "," + Result[j].StopLoss + "," + Result[j].Swap + "," + Result[j].Symbol.Name + "," + Result[j].TakeProfit + "," + Result[j].Taxes + "," + Result[j].Type.Name + "," + Result[j].Type.ID + "," + Result[j].Symbol.ContractSize + "," + Result[j].SpreaDifferenceInOpenTrade + "," + Result[j].Symbol.Currency + "," + Result[j].Comment + "," + Result[j].AgentCommission + "," + Result[j].IsActivePending + "," + Result[j].IsStopLossAndTakeProfit; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } } } } break; case "GetOnlineCommandByListInvestorCode": { List<string> listCode = new List<string>(); string[] subParameter = subValue[1].Split(','); if(subParameter!=null && subParameter.Length>0) { int countCode = subParameter.Length; for (int j = 0; j < countCode; j++) { listCode.Add(subParameter[j]); } } List<Business.OpenTrade> result = TradingServer.Facade.FacadeGetOpenTradeByListInvestorCode(listCode); if (result != null) { int countResult = result.Count; for (int j = 0; j < countResult; j++) { string Message = subValue[0] + "$" + result[j].ClientCode + "," + result[j].ClosePrice + "," + result[j].CloseTime + "," + result[j].CommandCode + "," + result[j].Commission + "," + result[j].ExpTime + "," + result[j].ID + "," + result[j].Investor.InvestorID + "," + result[j].IsClose + "," + result[j].IsHedged + "," + result[j].Margin + "," + result[j].MaxDev + "," + result[j].OpenPrice + "," + result[j].OpenTime + "," + result[j].Profit + "," + result[j].Size + "," + result[j].StopLoss + "," + result[j].Swap + "," + result[j].Symbol.Name + "," + result[j].TakeProfit + "," + result[j].Taxes + "," + result[j].Type.Name + "," + result[j].Type.ID + "," + result[j].Symbol.ContractSize + "," + result[j].SpreaDifferenceInOpenTrade + "," + result[j].Symbol.Currency + "," + result[j].Comment + "," + result[j].AgentCommission + "," + result[j].Investor.Code; StringResult.Add(Message); } } else { string message = subValue[0] + "$"; StringResult.Add(message); } } break; #endregion #region Function Class IGroupSymbol case "AddIGroupSymbol": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int ResultAddNew = -1; List<Business.IGroupSymbol> Result = new List<IGroupSymbol>(); Result = this.ExtractIGroupSymbol(subValue[1]); //Call Function Add New IGroup Symbol if (Result != null) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { ResultAddNew = TradingServer.Facade.FacadeAddNewIGroupSymbol(Result[j].SymbolID, Result[j].InvestorGroupID); string Message = subValue[0] + "$" + ResultAddNew.ToString() + "," + Result[j].SymbolID + "," + Result[j].InvestorGroupID; StringResult.Add(Message); } } } else { string Message = subValue[0] + "$MCM005"; StringResult.Add(Message); } } break; case "SelectIGroupSymbolConfigByIGroupSymbolID": { if (!string.IsNullOrEmpty(subValue[1])) { string[] listParameter = subValue[1].Split(','); string temp = string.Empty; if (listParameter.Length > 0) { int countParameter = listParameter.Length; string result = string.Empty; for (int j = 0; j < countParameter; j++) { temp = this.ExtractCommandServer(subValue[0] + "$" + listParameter[j], "", code); StringResult.Add(temp); } } } } break; #endregion #region Function Class IGroupSecurity case "AddIGroupSecurity": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { int ResultAddNew = -1; List<Business.IGroupSecurity> Result = new List<IGroupSecurity>(); Result = this.ExtractIGroupSecurity(subValue[1]); if (Result != null) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { ResultAddNew = TradingServer.Facade.FacadeAddIGroupSecurity(Result[j].InvestorGroupID, Result[j].SecurityID); string Message = subValue[0] + "$" + ResultAddNew.ToString() + "," + Result[j].InvestorGroupID + "," + Result[j].SecurityID; StringResult.Add(Message); } } //SEND COMMAND TO AGENT SERVER string strAgent = string.Empty; if (StringResult != null) { int countResult = StringResult.Count; for (int j = 0; j < countResult; j++) { strAgent += StringResult[j] + "|"; } } #region SEND NOTIFY TO AGENT if (strAgent.EndsWith("|")) strAgent = strAgent.Remove(strAgent.Length - 1, 1); Business.AgentNotify newAgentNotify = new AgentNotify(); newAgentNotify.NotifyMessage = strAgent; TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify); #endregion } } else { string Message = subValue[0] + "$MCM005"; StringResult.Add(Message); } } break; case "SelectIGroupSecurityConfigByIGroupSecurityID": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { string[] listParameter = subValue[1].Split(','); string temp = string.Empty; if (listParameter.Length > 0) { int countParameter = listParameter.Length; string result = string.Empty; for (int j = 0; j < countParameter; j++) { temp = this.ExtractCommandServer(subValue[0] + "$" + listParameter[j], "", code); StringResult.Add(temp); } } } } } break; #endregion #region Function Class Investor Status case "SelectInvestorStatus": { List<Business.InvestorStatus> Result = new List<InvestorStatus>(); Result = TradingServer.Facade.FacadeGetAllInvestorStatus(); if (Result != null) { int countInvestorStatus = Result.Count; for (int j = 0; j < countInvestorStatus; j++) { string Message = subValue[0] + "$" + Result[j].InvestorStatusID + "," + Result[j].Name; StringResult.Add(Message); } } } break; #endregion #region FUNCTION CLASS MARKET case "TickOnline": { if (Business.Market.SymbolList != null) { int countSymbol = Business.Market.SymbolList.Count; for (int j = 0; j < countSymbol; j++) { if (Business.Market.SymbolList[j].TickValue != null && Business.Market.SymbolList[j].TickValue.Ask > 0) { string Message = subValue[0] + "$" + Business.Market.SymbolList[j].TickValue.Ask + "," + Business.Market.SymbolList[j].TickValue.Bid + "," + Business.Market.SymbolList[j].TickValue.Status + "," + Business.Market.SymbolList[j].TickValue.SymbolID + "," + Business.Market.SymbolList[j].TickValue.SymbolName + "," + Business.Market.SymbolList[j].TickValue.TickTime; StringResult.Add(Message); } } } } break; #endregion #region FUNCTION CLASS INVESTOR ACCOUNT LOG case "GetInvestorAccountLogByInvestor": { List<Business.InvestorAccountLog> Result = new List<InvestorAccountLog>(); int InvestorID = -1; int.TryParse(subValue[1], out InvestorID); Result = TradingServer.Facade.FacadeGetInvestorAccountLogByInvestorID(InvestorID); if (Result != null) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string Message = subValue[0] + "$" + Result[j].InvestorID + "," + Result[j].Name + "," + Result[j].ID + "," + Result[j].DealID + "," + Result[j].Date + "," + Result[j].Comment + "," + Result[j].Amount; StringResult.Add(Message); } } } break; #endregion #region FUNCTION CANDLES case "GetCandlesToDay": { int TimeFrame = 0; string[] subParameter = subValue[1].Split(','); List<string> result = new List<string>(); if (subParameter.Length == 2) { int.TryParse(subParameter[1], out TimeFrame); result = ProcessQuoteLibrary.FacadeDataLog.FacadeGetPriceToDay(subParameter[0], TimeFrame); if (result != null) { int countResult = result.Count; for (int j = 0; j < countResult; j++) { string Message = subValue[0] + "$" + result[j]; StringResult.Add(Message); } } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } break; case "GetCandlesInTime": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int TimeFrame = 0; DateTime StartTime = new DateTime(); DateTime endTime = new DateTime(); string[] subParameter = subValue[1].Split(','); List<string> Result = new List<string>(); if (subParameter.Length == 4) { int.TryParse(subParameter[1], out TimeFrame); DateTime.TryParse(subParameter[2], out StartTime); DateTime.TryParse(subParameter[3], out endTime); //Result = ProcessQuoteLibrary.FacadeDataLog.FacadeGetPriceInTime(subParameter[0], TimeFrame, StartTime, endTime); Result = ProcessQuoteLibrary.FacadeDataLog.FacadeGetCandlesStartEndTime(subParameter[0], TimeFrame, StartTime, endTime); if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string Message = subValue[0] + "$" + Result[j]; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } else { string Message = subValue[0] + "$MCM005"; StringResult.Add(Message); } } break; #endregion #region FUNCTION MARKET CONFIG case "GetMarketConfig": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { if (Business.Market.MarketConfig != null) { int countMarketConfig = Business.Market.MarketConfig.Count; for (int j = 0; j < countMarketConfig; j++) { string Message = subValue[0] + "$" + Business.Market.MarketConfig[j].ParameterItemID + "," + Business.Market.MarketConfig[j].SecondParameterID + "," + Business.Market.MarketConfig[j].Code + "," + Business.Market.MarketConfig[j].Name + "," + Business.Market.MarketConfig[j].BoolValue + "," + Business.Market.MarketConfig[j].StringValue + "," + Business.Market.MarketConfig[j].NumValue + "," + Business.Market.MarketConfig[j].DateValue; StringResult.Add(Message); } } } } break; #endregion #region FUNCTION ALERT case "SelectAlertByInvestorID": { string temp = string.Empty; List<Business.PriceAlert> Result = new List<PriceAlert>(); string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int Start = int.Parse(subParameter[0]); int End = int.Parse(subParameter[1]); int InvestorID = int.Parse(subParameter[2]); Result = TradingServer.Facade.FacadeGetAlertByInvestorID(InvestorID, Start, End); if (Result != null && Result.Count > 0) { for (int n = 0; n < Result.Count; n++) { temp = subValue[0] + "$" + Result[n].ID + "," + Result[n].Symbol + "," + Result[n].Email + "," + Result[n].PhoneNumber + "," + Result[n].Value + "," + Result[n].AlertCondition.ToString() + "," + Result[n].AlertAction.ToString() + "," + Result[n].IsEnable + "," + Result[n].DateCreate + "," + Result[n].DateActive + "," + Result[n].InvestorID + "," + Result[n].Notification; StringResult.Add(temp); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } } break; #endregion #region FUNCTION NEWS case "SelectTopNews": { string temp = string.Empty; List<Business.News> Result = new List<News>(); Result = Market.NewsList; if (Result != null && Result.Count > 0) { for (int n = 0; n < Result.Count; n++) { temp = subValue[0] + "$" + Result[n].ID + "█" + Result[n].Title + "█" + Result[n].Catetory + "█" + Result[n].DateCreated + "█" + Result[n].Body; StringResult.Add(temp); } } else { string Message = subValue[0] + "$"; StringResult.Add(Message); } } break; #endregion #region FUNCTION ORDER DATA case "GetOrderWithDeal": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 3) { List<Business.OpenTrade> Result = new List<OpenTrade>(); Business.OpenTrade newOpenTrade = new OpenTrade(); newOpenTrade = TradingServer.Facade.FacadeGetHistoryByCommandCode(subParameter[0]); if (newOpenTrade == null || newOpenTrade.ID <= 0) { if (Business.Market.CommandExecutor != null) { int countCommand = Business.Market.CommandExecutor.Count; for (int j = 0; j < countCommand; j++) { if (Business.Market.CommandExecutor[j].CommandCode == subParameter[0]) { newOpenTrade = Business.Market.CommandExecutor[j]; break; } } } } if (newOpenTrade != null && newOpenTrade.ID > 0) { string symbolName = ""; double contractSize = 0; string currency = ""; if (newOpenTrade.Symbol != null) { symbolName = newOpenTrade.Symbol.Name; contractSize = newOpenTrade.Symbol.ContractSize; currency = newOpenTrade.Symbol.Currency; } string message = subValue[0] + "$" + newOpenTrade.ClientCode + "," + newOpenTrade.ClosePrice + "," + newOpenTrade.CloseTime + "," + newOpenTrade.CommandCode + "," + newOpenTrade.Commission + "," + newOpenTrade.ExpTime + "," + newOpenTrade.ID + "," + newOpenTrade.Investor.Code + "," + newOpenTrade.IsClose + "," + newOpenTrade.IsHedged + "," + newOpenTrade.Margin + "," + newOpenTrade.MaxDev + "," + newOpenTrade.OpenPrice + "," + newOpenTrade.OpenTime + "," + newOpenTrade.Profit + "," + newOpenTrade.Size + "," + newOpenTrade.StopLoss + "," + newOpenTrade.Swap + "," + symbolName + "," + newOpenTrade.TakeProfit + "," + newOpenTrade.Taxes + "," + newOpenTrade.Type.Name + "," + newOpenTrade.Type.ID + "," + contractSize + "," + currency + "," + newOpenTrade.Taxes + "," + newOpenTrade.Comment + "," + newOpenTrade.AgentCommission + "," + newOpenTrade.Investor.InvestorID; StringResult.Add(message); } if (StringResult.Count == 0) { string message = subValue[0] + "$end"; StringResult.Add(message); } if (StringResult.Count == 0) { string message = subValue[0] + "$end"; StringResult.Add(message); } } } else { string Message = subValue[0] + "$MCM005"; StringResult.Add(Message); } } break; case "GetAllOrderData": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 3) { List<Business.OpenTrade> Result = new List<OpenTrade>(); int InvestorID = 0; int Start = 0; int End = 0; int.TryParse(subParameter[1], out Start); int.TryParse(subParameter[2], out End); int RowNumber = End - Start; bool isWildcards = this.IsWildCards(subParameter[0]); if (isWildcards) { #region GET ORDER WITH WILDCARDS //GET ALL ORDER WITH WILDCARDS Result = TradingServer.Facade.FacadeGetAllHistoryWithStartEnd(RowNumber, Start); #region START GET ONLINE ORDER if (Start == 0) { bool isExistsListOrder = false; if (Business.Market.TempListOrder != null) { int countTempListOrder = Business.Market.TempListOrder.Count; for (int j = 0; j < countTempListOrder; j++) { if (Business.Market.TempListOrder[j].AdminCode == code) { if (Business.Market.CommandExecutor != null) { for (int n = 0; n < Business.Market.CommandExecutor.Count; n++) { if (Business.Market.TempListOrder[j].ListOrder == null) Business.Market.TempListOrder[j].ListOrder = new List<OpenTrade>(); Business.Market.TempListOrder[j].ListOrder.Add(Business.Market.CommandExecutor[n]); } } isExistsListOrder = true; break; } } } if (!isExistsListOrder) { List<Business.OpenTrade> tempOrder = new List<OpenTrade>(); if (Business.Market.CommandExecutor != null) { for (int n = 0; n < Business.Market.CommandExecutor.Count; n++) { tempOrder.Add(Business.Market.CommandExecutor[n]); } } if (tempOrder != null && tempOrder.Count > 0) { Business.OrderInvestor newOrderInvestor = new OrderInvestor(); newOrderInvestor.AdminCode = code; newOrderInvestor.ListOrder = tempOrder; Business.Market.TempListOrder.Add(newOrderInvestor); } } } #endregion #region GET ORDER ONLINE if (Result == null || Result.Count <= 0) { if (Business.Market.TempListOrder != null) { int countTempOpenTrade = Business.Market.TempListOrder.Count; for (int m = 0; m < countTempOpenTrade; m++) { if (Business.Market.TempListOrder[m].AdminCode == code) { if (End > Business.Market.TempListOrder[m].ListOrder.Count) End = Business.Market.TempListOrder[m].ListOrder.Count; if (Start > End) Start = 0; for (int n = Start; n < End; n++) { Result.Add(Business.Market.TempListOrder[m].ListOrder[n]); Business.Market.TempListOrder[m].ListOrder.RemoveAt(n); n--; if (End > Business.Market.TempListOrder[m].ListOrder.Count) End = Business.Market.TempListOrder[m].ListOrder.Count; if (Business.Market.TempListOrder[m].ListOrder.Count == 0 || Business.Market.TempListOrder[m].ListOrder == null) { Business.Market.TempListOrder.RemoveAt(m); } } break; } } } } #endregion #region GET HISTORY BY INVESTOR ID if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string symbolName = ""; double contractSize = 0; string currency = ""; if (Result[j].Symbol != null) { symbolName = Result[j].Symbol.Name; contractSize = Result[j].Symbol.ContractSize; currency = Result[j].Symbol.Currency; } string message = subValue[0] + "$" + Result[j].ClientCode + "," + Result[j].ClosePrice + "," + Result[j].CloseTime + "," + Result[j].CommandCode + "," + Result[j].Commission + "," + Result[j].ExpTime + "," + Result[j].ID + "," + Result[j].Investor.Code + "," + Result[j].IsClose + "," + Result[j].IsHedged + "," + Result[j].Margin + "," + Result[j].MaxDev + "," + Result[j].OpenPrice + "," + Result[j].OpenTime + "," + Result[j].Profit + "," + Result[j].Size + "," + Result[j].StopLoss + "," + Result[j].Swap + "," + symbolName + "," + Result[j].TakeProfit + "," + Result[j].Taxes + "," + Result[j].Type.Name + "," + Result[j].Type.ID + "," + contractSize + "," + currency + "," + Result[j].Taxes + "," + Result[j].Comment + "," + Result[j].AgentCommission + "," + Result[j].Investor.InvestorID; StringResult.Add(message); } } #endregion #endregion } else { #region SELECT NORMAL //SELECT NORMAL InvestorID = TradingServer.Facade.FacadeGetInvestorIDByCode(subParameter[0]); if (InvestorID != -1) { #region GET HISTORY BY INVESTOR ID Result = TradingServer.Facade.FacadeGetHistoryByInvestor(InvestorID, RowNumber, Start); #region START GET ONLINE ORDER if (Start == 0) { bool isExists = false; if (Business.Market.TempListOrder != null) { int countTempListOrder = Business.Market.TempListOrder.Count; for (int j = 0; j < countTempListOrder; j++) { if (Business.Market.TempListOrder[j].AdminCode == code) { if (Business.Market.CommandExecutor != null) { for (int n = 0; n < Business.Market.CommandExecutor.Count; n++) { if (Business.Market.CommandExecutor[n].Investor.InvestorID == InvestorID) { if (Business.Market.TempListOrder[j].ListOrder == null) Business.Market.TempListOrder[j].ListOrder = new List<OpenTrade>(); Business.Market.TempListOrder[j].ListOrder.Add(Business.Market.CommandExecutor[n]); } } } isExists = true; break; } } } if (!isExists) { List<Business.OpenTrade> tempOrder = new List<OpenTrade>(); if (Business.Market.CommandExecutor != null) { for (int n = 0; n < Business.Market.CommandExecutor.Count; n++) { if (Business.Market.CommandExecutor[n].Investor.InvestorID == InvestorID) { tempOrder.Add(Business.Market.CommandExecutor[n]); } } } if (tempOrder != null && tempOrder.Count > 0) { Business.OrderInvestor newOrderInvestor = new OrderInvestor(); newOrderInvestor.AdminCode = code; newOrderInvestor.ListOrder = tempOrder; Business.Market.TempListOrder.Add(newOrderInvestor); } } } #endregion #region GET ORDER ONLINE if (Result == null || Result.Count <= 0) { if (Business.Market.TempListOrder != null) { int countTempOpenTrade = Business.Market.TempListOrder.Count; for (int m = 0; m < countTempOpenTrade; m++) { if (Business.Market.TempListOrder[m].AdminCode == code) { if (End > Business.Market.TempListOrder[m].ListOrder.Count) End = Business.Market.TempListOrder[m].ListOrder.Count; if (Start > End) Start = 0; for (int n = Start; n < End; n++) { Result.Add(Business.Market.TempListOrder[m].ListOrder[n]); Business.Market.TempListOrder[m].ListOrder.RemoveAt(n); n--; if (End > Business.Market.TempListOrder[m].ListOrder.Count) End = Business.Market.TempListOrder[m].ListOrder.Count; if (Business.Market.TempListOrder[m].ListOrder.Count == 0 || Business.Market.TempListOrder[m].ListOrder == null) { Business.Market.TempListOrder.RemoveAt(m); } } break; } } } } #endregion #region MAP COMMAND TO STRING if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string symbolName = ""; double contractSize = 0; string currency = ""; if (Result[j].Symbol != null) { symbolName = Result[j].Symbol.Name; contractSize = Result[j].Symbol.ContractSize; currency = Result[j].Symbol.Currency; } string message = subValue[0] + "$" + Result[j].ClientCode + "," + Result[j].ClosePrice + "," + Result[j].CloseTime + "," + Result[j].CommandCode + "," + Result[j].Commission + "," + Result[j].ExpTime + "," + Result[j].ID + "," + Result[j].Investor.Code + "," + Result[j].IsClose + "," + Result[j].IsHedged + "," + Result[j].Margin + "," + Result[j].MaxDev + "," + Result[j].OpenPrice + "," + Result[j].OpenTime + "," + Result[j].Profit + "," + Result[j].Size + "," + Result[j].StopLoss + "," + Result[j].Swap + "," + symbolName + "," + Result[j].TakeProfit + "," + Result[j].Taxes + "," + Result[j].Type.Name + "," + Result[j].Type.ID + "," + contractSize + "," + currency + "," + Result[j].Taxes + "," + Result[j].Comment + "," + Result[j].AgentCommission + "," + Result[j].Investor.InvestorID; StringResult.Add(message); } } #endregion #endregion #region GET HISTORY BY CODE(COMMENT) //if (StringResult.Count == 0) //{ // if (Start == 0) // { // Business.OpenTrade newOpenTrade = new OpenTrade(); // newOpenTrade = TradingServer.Facade.FacadeGetHistoryByCommandCode(subParameter[0]); // #region GET ORDER ONLINE // if (newOpenTrade == null || newOpenTrade.ID <= 0) // { // if (Business.Market.CommandExecutor != null) // { // for (int j = 0; j < Business.Market.CommandExecutor.Count; j++) // { // if (Business.Market.CommandExecutor[j].CommandCode == subParameter[0]) // { // newOpenTrade = Business.Market.CommandExecutor[j]; // break; // } // } // } // } // #endregion // #region MAP COMMAND TO STRING // if (newOpenTrade != null && newOpenTrade.ID > 0) // { // //string message = subValue[0] + "$" + Result[0].ClientCode + "," + Result[0].ClosePrice + "," + Result[0].CloseTime + "," + // // Result[0].CommandCode + "," + Result[0].Commission + "," + Result[0].ExpTime + "," + Result[0].ID + "," + // // Result[0].Investor.Code + "," + Result[0].IsClose + "," + Result[0].IsHedged + "," + Result[0].Margin + "," + // // Result[0].MaxDev + "," + Result[0].OpenPrice + "," + Result[0].OpenTime + "," + Result[0].Profit + "," + // // Result[0].Size + "," + Result[0].StopLoss + "," + Result[0].Swap + "," + Result[0].Symbol.Name + "," + Result[0].TakeProfit + "," + // // Result[0].Taxes + "," + Result[0].Type.Name + "," + Result[0].Type.ID + "," + Result[0].Symbol.ContractSize + "," + // // Result[0].Symbol.Currency + "," + Result[0].Taxes + "," + Result[0].Comment + "," + Result[0].AgentCommission; // string message = subValue[0] + "$" + newOpenTrade.ClientCode + "," + newOpenTrade.ClosePrice + "," + newOpenTrade.CloseTime + "," + // newOpenTrade.CommandCode + "," + newOpenTrade.Commission + "," + newOpenTrade.ExpTime + "," + newOpenTrade.ID + "," + // newOpenTrade.Investor.Code + "," + newOpenTrade.IsClose + "," + newOpenTrade.IsHedged + "," + newOpenTrade.Margin + "," + // newOpenTrade.MaxDev + "," + newOpenTrade.OpenPrice + "," + newOpenTrade.OpenTime + "," + newOpenTrade.Profit + "," + // newOpenTrade.Size + "," + newOpenTrade.StopLoss + "," + newOpenTrade.Swap + "," + symbolName + "," + newOpenTrade.TakeProfit + "," + // newOpenTrade.Taxes + "," + newOpenTrade.Type.Name + "," + newOpenTrade.Type.ID + "," + contractSize + "," + // currency + "," + newOpenTrade.Taxes + "," + newOpenTrade.Comment + "," + newOpenTrade.AgentCommission; // StringResult.Add(message); // } // #endregion // } // else // { // List<Business.OpenTrade> listOpenTrade = new List<OpenTrade>(); // listOpenTrade = TradingServer.Facade.FacadeGetOnlineCommandByInvestorID(InvestorID); // if (listOpenTrade != null && listOpenTrade.Count > 0) // { // int countOpenTrade = listOpenTrade.Count; // if (End > countOpenTrade) // End = countOpenTrade; // if (Start > End) // Start = End; // for (int j = Start; j < End; j++) // { // string message = subValue[0] + "$" + listOpenTrade[j].ClientCode + "," + listOpenTrade[j].ClosePrice + "," + // listOpenTrade[j].CloseTime + "," + listOpenTrade[j].CommandCode + "," + listOpenTrade[j].Commission + "," + // listOpenTrade[j].ExpTime + "," + listOpenTrade[j].ID + "," + listOpenTrade[j].Investor.Code + "," + // listOpenTrade[j].IsClose + "," + listOpenTrade[j].IsHedged + "," + listOpenTrade[j].Margin + "," + // listOpenTrade[j].MaxDev + "," + listOpenTrade[j].OpenPrice + "," + listOpenTrade[j].OpenTime + "," + // listOpenTrade[j].Profit + "," + listOpenTrade[j].Size + "," + listOpenTrade[j].StopLoss + "," + // listOpenTrade[j].Swap + "," + listOpenTrade[j].Symbol.Name + "," + listOpenTrade[j].TakeProfit + "," + // listOpenTrade[j].Taxes + "," + listOpenTrade[j].Type.Name + "," + listOpenTrade[j].Type.ID + "," + // listOpenTrade[j].Symbol.ContractSize + "," + listOpenTrade[j].Symbol.Currency + "," + // listOpenTrade[j].Taxes + "," + listOpenTrade[j].Comment + "," + listOpenTrade[j].AgentCommission; // StringResult.Add(message); // } // } // } //} #endregion if (StringResult.Count == 0) { string message = subValue[0] + "$end"; StringResult.Add(message); } } #endregion } if (StringResult.Count == 0) { string message = subValue[0] + "$end"; StringResult.Add(message); } } } else { string Message = subValue[0] + "$MCM005"; StringResult.Add(Message); } } break; case "GetOrderData": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 3) { List<Business.OpenTrade> Result = new List<OpenTrade>(); int InvestorID = 0; int Start = 0; int End = 0; bool isWildcards = this.IsWildCards(subParameter[0]); if (isWildcards) { #region GET ORDER WITH WILDCARDS int.TryParse(subParameter[1], out Start); int.TryParse(subParameter[2], out End); int RowNumber = End - Start; //GET ALL ORDER WITH WILDCARDS Result = TradingServer.Facade.FacadeGetAllHistoryWithStartEnd(RowNumber, Start); #region GET HISTORY BY INVESTOR ID if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string symbolName = ""; double contractSize = 0; string currency = ""; if (Result[j].Symbol != null) { symbolName = Result[j].Symbol.Name; contractSize = Result[j].Symbol.ContractSize; currency = Result[j].Symbol.Currency; } string message = subValue[0] + "$" + Result[j].ClientCode + "," + Result[j].ClosePrice + "," + Result[j].CloseTime + "," + Result[j].CommandCode + "," + Result[j].Commission + "," + Result[j].ExpTime + "," + Result[j].ID + "," + Result[j].Investor.Code + "," + Result[j].IsClose + "," + Result[j].IsHedged + "," + Result[j].Margin + "," + Result[j].MaxDev + "," + Result[j].OpenPrice + "," + Result[j].OpenTime + "," + Result[j].Profit + "," + Result[j].Size + "," + Result[j].StopLoss + "," + Result[j].Swap + "," + symbolName + "," + Result[j].TakeProfit + "," + Result[j].Taxes + "," + Result[j].Type.Name + "," + Result[j].Type.ID + "," + contractSize + "," + currency + "," + Result[j].Taxes + "," + Result[j].Comment + "," + Result[j].AgentCommission + "," + Result[j].Investor.InvestorID; StringResult.Add(message); } } #endregion #endregion } else { //SELECT NORMAL InvestorID = TradingServer.Facade.FacadeGetInvestorIDByCode(subParameter[0]); if (InvestorID != -1) { int.TryParse(subParameter[1], out Start); int.TryParse(subParameter[2], out End); int RowNumber = End - Start; #region GET HISTORY BY INVESTOR ID Result = TradingServer.Facade.FacadeGetHistoryByInvestor(InvestorID, RowNumber, Start); if (Result != null && Result.Count > 0) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { string symbolName = ""; double contractSize = 0; string currency = ""; if (Result[j].Symbol != null) { symbolName = Result[j].Symbol.Name; contractSize = Result[j].Symbol.ContractSize; currency = Result[j].Symbol.Currency; } string message = subValue[0] + "$" + Result[j].ClientCode + "," + Result[j].ClosePrice + "," + Result[j].CloseTime + "," + Result[j].CommandCode + "," + Result[j].Commission + "," + Result[j].ExpTime + "," + Result[j].ID + "," + Result[j].Investor.Code + "," + Result[j].IsClose + "," + Result[j].IsHedged + "," + Result[j].Margin + "," + Result[j].MaxDev + "," + Result[j].OpenPrice + "," + Result[j].OpenTime + "," + Result[j].Profit + "," + Result[j].Size + "," + Result[j].StopLoss + "," + Result[j].Swap + "," + symbolName + "," + Result[j].TakeProfit + "," + Result[j].Taxes + "," + Result[j].Type.Name + "," + Result[j].Type.ID + "," + contractSize + "," + currency + "," + Result[j].Taxes + "," + Result[j].Comment + "," + Result[j].AgentCommission + "," + Result[j].Investor.InvestorID; StringResult.Add(message); } } #endregion #region GET HISTORY BY CODE(COMMENT CODE) //if (StringResult.Count == 0) //{ // if (Start == 0) // { // Business.OpenTrade newOpenTrade = new OpenTrade(); // newOpenTrade = TradingServer.Facade.FacadeGetHistoryByCommandCode(subParameter[0]); // if (newOpenTrade != null && newOpenTrade.ID > 0) // { // string message = subValue[0] + "$" + Result[0].ClientCode + "," + Result[0].ClosePrice + "," + Result[0].CloseTime + "," + // Result[0].CommandCode + "," + Result[0].Commission + "," + Result[0].ExpTime + "," + Result[0].ID + "," + // Result[0].Investor.Code + "," + Result[0].IsClose + "," + Result[0].IsHedged + "," + Result[0].Margin + "," + // Result[0].MaxDev + "," + Result[0].OpenPrice + "," + Result[0].OpenTime + "," + Result[0].Profit + "," + // Result[0].Size + "," + Result[0].StopLoss + "," + Result[0].Swap + "," + Result[0].Symbol.Name + "," + Result[0].TakeProfit + "," + // Result[0].Taxes + "," + Result[0].Type.Name + "," + Result[0].Type.ID + "," + Result[0].Symbol.ContractSize + "," + // Result[0].Symbol.Currency + "," + Result[0].Taxes + "," + Result[0].Comment + "," + Result[0].AgentCommission; // StringResult.Add(message); // } // } // else // { // List<Business.OpenTrade> listOpenTrade = new List<OpenTrade>(); // listOpenTrade = TradingServer.Facade.FacadeGetOnlineCommandByInvestorID(InvestorID); // if (listOpenTrade != null && listOpenTrade.Count > 0) // { // int countOpenTrade = listOpenTrade.Count; // if (End > countOpenTrade) // End = countOpenTrade; // for (int j = Start; j < End; j++) // { // string message = subValue[0] + "$" + listOpenTrade[j].ClientCode + "," + listOpenTrade[j].ClosePrice + "," + // listOpenTrade[j].CloseTime + "," + listOpenTrade[j].CommandCode + "," + listOpenTrade[j].Commission + "," + // listOpenTrade[j].ExpTime + "," + listOpenTrade[j].ID + "," + listOpenTrade[j].Investor.Code + "," + // listOpenTrade[j].IsClose + "," + listOpenTrade[j].IsHedged + "," + listOpenTrade[j].Margin + "," + // listOpenTrade[j].MaxDev + "," + listOpenTrade[j].OpenPrice + "," + listOpenTrade[j].OpenTime + "," + // listOpenTrade[j].Profit + "," + listOpenTrade[j].Size + "," + listOpenTrade[j].StopLoss + "," + // listOpenTrade[j].Swap + "," + listOpenTrade[j].Symbol.Name + "," + listOpenTrade[j].TakeProfit + "," + // listOpenTrade[j].Taxes + "," + listOpenTrade[j].Type.Name + "," + listOpenTrade[j].Type.ID + "," + // listOpenTrade[j].Symbol.ContractSize + "," + listOpenTrade[j].Symbol.Currency + "," + // listOpenTrade[j].Taxes + "," + listOpenTrade[j].Comment + "," + listOpenTrade[j].AgentCommission; // StringResult.Add(message); // } // } // } //} #endregion if (StringResult.Count == 0) { string message = subValue[0] + "$end"; StringResult.Add(message); } } } if (StringResult.Count == 0) { string message = subValue[0] + "$end"; StringResult.Add(message); } } } else { string message = subValue[0] + "$MCM005"; StringResult.Add(message); } } break; case "GetOrderOpenOnly": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 3) { int start = 0; int end = 0; int.TryParse(subParameter[1], out start); int.TryParse(subParameter[2], out end); List<Business.OpenTrade> tempResult = new List<OpenTrade>(); bool isWildCards = this.IsWildCards(subParameter[0]); if (isWildCards) { #region SEARCH WITH WILDCARDS if (Business.Market.CommandExecutor != null) { int countCommand = Business.Market.CommandExecutor.Count; for (int j = 0; j < countCommand; j++) { tempResult.Add(Business.Market.CommandExecutor[j]); } } if (tempResult.Count > 0 && tempResult != null) { int countTempResult = tempResult.Count; if (countTempResult < end) end = countTempResult; for (int j = start; j < end; j++) { string message = subValue[0] + "$" + tempResult[j].ClientCode + "," + tempResult[j].ClosePrice + "," + tempResult[j].CloseTime + "," + tempResult[j].CommandCode + "," + tempResult[j].Commission + "," + tempResult[j].ExpTime + "," + tempResult[j].ID + "," + tempResult[j].Investor.Code + "," + tempResult[j].IsClose + "," + tempResult[j].IsHedged + "," + tempResult[j].Margin + "," + tempResult[j].MaxDev + "," + tempResult[j].OpenPrice + "," + tempResult[j].OpenTime + "," + tempResult[j].Profit + "," + tempResult[j].Size + "," + tempResult[j].StopLoss + "," + tempResult[j].Swap + "," + tempResult[j].Symbol.Name + "," + tempResult[j].TakeProfit + "," + tempResult[j].Taxes + "," + tempResult[j].Type.Name + "," + tempResult[j].Type.ID + "," + tempResult[j].Symbol.ContractSize + "," + tempResult[j].Symbol.Currency + "," + tempResult[j].Taxes + "," + tempResult[j].Comment + "," + tempResult[j].AgentCommission + "," + tempResult[j].Investor.InvestorID; StringResult.Add(message); } } #endregion } else { #region SEARCH IN COMMAND EXECUTOR WITH SEARCH VALUE IS INVESTOR ID if (Business.Market.CommandExecutor != null) { int countCommand = Business.Market.CommandExecutor.Count; for (int j = 0; j < countCommand; j++) { if (Business.Market.CommandExecutor[j].Investor.Code.ToUpper() == subParameter[0].ToUpper()) { tempResult.Add(Business.Market.CommandExecutor[j]); } } } #endregion #region IF TEMP COUNT RESULT <=0 THEN FIND WITH SEARCH VALUE IS COMMAND CODE if (tempResult.Count <= 0) { if (Business.Market.CommandExecutor != null) { int countCommand = Business.Market.CommandExecutor.Count; for (int j = 0; j < countCommand; j++) { if (Business.Market.CommandExecutor[j].CommandCode == subParameter[0]) { tempResult.Add(Business.Market.CommandExecutor[j]); break; } } } } #endregion if (tempResult.Count > 0 && tempResult != null) { int countTempResult = tempResult.Count; if (countTempResult < end) end = countTempResult; for (int j = start; j < end; j++) { string message = subValue[0] + "$" + tempResult[j].ClientCode + "," + tempResult[j].ClosePrice + "," + tempResult[j].CloseTime + "," + tempResult[j].CommandCode + "," + tempResult[j].Commission + "," + tempResult[j].ExpTime + "," + tempResult[j].ID + "," + tempResult[j].Investor.Code + "," + tempResult[j].IsClose + "," + tempResult[j].IsHedged + "," + tempResult[j].Margin + "," + tempResult[j].MaxDev + "," + tempResult[j].OpenPrice + "," + tempResult[j].OpenTime + "," + tempResult[j].Profit + "," + tempResult[j].Size + "," + tempResult[j].StopLoss + "," + tempResult[j].Swap + "," + tempResult[j].Symbol.Name + "," + tempResult[j].TakeProfit + "," + tempResult[j].Taxes + "," + tempResult[j].Type.Name + "," + tempResult[j].Type.ID + "," + tempResult[j].Symbol.ContractSize + "," + tempResult[j].Symbol.Currency + "," + tempResult[j].Taxes + "," + tempResult[j].Comment + "," + tempResult[j].AgentCommission + "," + tempResult[j].Investor.InvestorID; StringResult.Add(message); } } } if (StringResult.Count == 0) { string message = subValue[0] + "$end"; StringResult.Add(message); } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG string content = "'" + code + "': " + StringResult.Count + " orders have been request"; string comment = "[request order open only]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } else { string Message = subValue[0] + "$MCM005"; StringResult.Add(Message); } } break; //GET ORDER IN DATABASE WITH TABLE COMMAND HISTORY case "GetOrderDataWithTime": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 6) { int from = 0; int to = 0; int investorID = 0; int ManagerID = 0; DateTime timeStart; DateTime timeEnd; int.TryParse(subParameter[0], out from); int.TryParse(subParameter[1], out to); int.TryParse(subParameter[2], out investorID); int.TryParse(subParameter[3], out ManagerID); DateTime.TryParse(subParameter[4], out timeStart); DateTime.TryParse(subParameter[5], out timeEnd); List<Business.OpenTrade> Result = new List<OpenTrade>(); #region FIRST GET DATA HISTORY OF INVESTOR if (Business.Market.AgentList != null) { int countAgent = Business.Market.AgentList.Count; bool isExists = false; for (int j = 0; j < countAgent; j++) { if (Business.Market.AgentList[j].AgentID == ManagerID) { if (from == 0) { #region REMOVE LIST HISTORY OF AGENT if (Business.Market.AgentList[j].ListHistoryInvestor != null && Business.Market.AgentList[j].ListHistoryInvestor.Count > 0) { int countHistory = Business.Market.AgentList[j].ListHistoryInvestor.Count; for (int n = 0; n < countHistory; n++) { Business.Market.AgentList[j].ListHistoryInvestor.RemoveAt(n); } } #endregion #region GET HISTORY IN DATABASE AND ADD TO LIST HISTORY OF AGENT Result = TradingServer.Facade.FacadeGetCommandHistoryWithStarLimit(investorID, ManagerID, timeStart, timeEnd); if (Result != null && Result.Count > 0) { int countResult = Result.Count; if (Business.Market.AgentList[j].ListHistoryInvestor == null) Business.Market.AgentList[j].ListHistoryInvestor = new List<OpenTrade>(); for (int m = 0; m < countResult; m++) { Business.Market.AgentList[j].ListHistoryInvestor.Add(Result[m]); } } #endregion } int rowNumber = to - from; if (Business.Market.AgentList[j].ListHistoryInvestor == null) Business.Market.AgentList[j].ListHistoryInvestor = new List<OpenTrade>(); if (Business.Market.AgentList[j].ListHistoryInvestor.Count < rowNumber) rowNumber = Business.Market.AgentList[j].ListHistoryInvestor.Count; for (int n = 0; n < rowNumber; n++) { string symbolName = string.Empty; string currency = string.Empty; string typeName = string.Empty; if (Business.Market.AgentList[j].ListHistoryInvestor[0].Symbol != null) { symbolName = Business.Market.AgentList[j].ListHistoryInvestor[0].Symbol.Name; currency = Business.Market.AgentList[j].ListHistoryInvestor[0].Symbol.Currency; } if (Business.Market.AgentList[j].ListHistoryInvestor[0].Type.ID == 13 || Business.Market.AgentList[j].ListHistoryInvestor[0].Type.ID == 14 || Business.Market.AgentList[j].ListHistoryInvestor[0].Type.ID == 15 || Business.Market.AgentList[j].ListHistoryInvestor[0].Type.ID == 16) { Business.Market.AgentList[j].ListHistoryInvestor[0].CloseTime = DateTime.MinValue; } #region MAP STRING string message = subValue[0] + "$" + Business.Market.AgentList[j].ListHistoryInvestor[0].ClientCode + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].ClosePrice + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].CloseTime + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].CommandCode + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Commission + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].ExpTime + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].ID + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Investor.InvestorID + "," + true + "," + false + "," + "0,0" + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].OpenPrice + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].OpenTime + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Profit + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Size + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].StopLoss + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Swap + "," + symbolName + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].TakeProfit + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Taxes + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Type.Name + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Type.ID + ",-1,-1" + "," + currency + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Comment + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].AgentCommission + "," + Business.Market.AgentList[j].ListHistoryInvestor[0].Investor.InvestorID; StringResult.Add(message); #endregion Business.Market.AgentList[j].ListHistoryInvestor.RemoveAt(0); } isExists = true; break; } } if (!isExists) { int countAdminList = Business.Market.AdminList.Count; for (int j = 0; j < countAdminList; j++) { if (Business.Market.AdminList[j].AgentID == ManagerID) { if (from == 0) { #region REMOVE LIST HISTORY OF AGENT if (Business.Market.AdminList[j].ListHistoryInvestor != null && Business.Market.AdminList[j].ListHistoryInvestor.Count > 0) Business.Market.AdminList[j].ListHistoryInvestor.Clear(); #endregion #region GET HISTORY IN DATABASE AND ADD TO LIST HISTORY OF AGENT Result = TradingServer.Facade.FacadeGetCommandHistoryWithStarLimit(investorID, ManagerID, timeStart, timeEnd); if (Result != null && Result.Count > 0) { int countResult = Result.Count; if (Business.Market.AdminList[j].ListHistoryInvestor == null) Business.Market.AdminList[j].ListHistoryInvestor = new List<OpenTrade>(); for (int m = 0; m < countResult; m++) { Business.Market.AdminList[j].ListHistoryInvestor.Add(Result[m]); } } #endregion } int rowNumber = to - from; if (Business.Market.AdminList[j].ListHistoryInvestor == null) Business.Market.AdminList[j].ListHistoryInvestor = new List<OpenTrade>(); if (Business.Market.AdminList[j].ListHistoryInvestor.Count < rowNumber) rowNumber = Business.Market.AdminList[j].ListHistoryInvestor.Count; for (int n = 0; n < rowNumber; n++) { string symbolName = string.Empty; string currency = string.Empty; string typeName = string.Empty; if (Business.Market.AdminList[j].ListHistoryInvestor[0].Symbol != null) { symbolName = Business.Market.AdminList[j].ListHistoryInvestor[0].Symbol.Name; currency = Business.Market.AdminList[j].ListHistoryInvestor[0].Symbol.Currency; } if (Business.Market.AdminList[j].ListHistoryInvestor[0].Type.ID == 13 || Business.Market.AdminList[j].ListHistoryInvestor[0].Type.ID == 14 || Business.Market.AdminList[j].ListHistoryInvestor[0].Type.ID == 15 || Business.Market.AdminList[j].ListHistoryInvestor[0].Type.ID == 16) { Business.Market.AdminList[j].ListHistoryInvestor[0].CloseTime = DateTime.MinValue; } #region MAP STRING string message = subValue[0] + "$" + Business.Market.AdminList[j].ListHistoryInvestor[0].ClientCode + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].ClosePrice + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].CloseTime + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].CommandCode + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Commission + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].ExpTime + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].ID + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Investor.InvestorID + "," + true + "," + false + "," + "0,0" + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].OpenPrice + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].OpenTime + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Profit + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Size + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].StopLoss + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Swap + "," + symbolName + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].TakeProfit + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Taxes + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Type.Name + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Type.ID + ",-1,-1" + "," + currency + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Comment + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].AgentCommission + "," + Business.Market.AdminList[j].ListHistoryInvestor[0].Investor.InvestorID; StringResult.Add(message); #endregion Business.Market.AdminList[j].ListHistoryInvestor.RemoveAt(0); } break; } } } } #endregion } if (StringResult.Count == 0) { string message = subValue[0] + "$"; StringResult.Add(message); } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG string content = "'" + code + "': " + StringResult.Count + " orders have been request"; string comment = "[request order]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } else { string message = subValue[0] + "$MCM005"; StringResult.Add(message); } } break; case "GetDepositInvestor": { string[] subParameter = subValue[1].Split('{'); List<int> listInvestor = new List<int>(); int countInvestor = subParameter.Length; for (int j = 0; j < countInvestor; j++) { listInvestor.Add(int.Parse(subParameter[j])); } Dictionary<int, double> result = Facade.FacadeGetDepositByListInvestorID(listInvestor); if (result != null) { foreach (KeyValuePair<int, double> d in result) { string temp = subValue[0] + "$" + d.Key + "{" + d.Value; StringResult.Add(temp); } } } break; case "GetTopOpenClosePosition": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split('|'); if (subParameter.Length == 2) { List<Business.OpenTrade> listOpenPosition = new List<OpenTrade>(); List<Business.OpenTrade> listClosePosition = new List<OpenTrade>(); List<Business.OpenTrade> listAllPosition = new List<OpenTrade>(); List<int> listInvestorID = new List<int>(); int numberGet = int.Parse(subParameter[0]); string[] subListGroup = subParameter[1].Split(','); #region GET OPEN POSITION INVESTOR AND GET INVESTOR ID if (subListGroup != null && subListGroup.Length > 0) { int countSubGroupt = subListGroup.Length; for (int j = 0; j < countSubGroupt; j++) { int grouptID = int.Parse(subListGroup[j]); if (Business.Market.InvestorList != null) { int countGroupt = Business.Market.InvestorList.Count; for (int k = 0; k < countGroupt; k++) { if (Business.Market.InvestorList[k].InvestorGroupInstance.InvestorGroupID == grouptID) { if (Business.Market.InvestorList[k].CommandList != null) { int countCommand = Business.Market.InvestorList[k].CommandList.Count; for (int n = 0; n < countCommand; n++) { bool isPending = Model.TradingCalculate.Instance.CheckIsPendingPosition(Business.Market.InvestorList[k].CommandList[n].Type.ID); if (!isPending) listOpenPosition.Add(Business.Market.InvestorList[k].CommandList[n]); } } listInvestorID.Add(Business.Market.InvestorList[k].InvestorID); } } } } } else { StringResult.Add(subValue[0] + "$IVC0002"); } #endregion #region GET CLOSE POSITION AND MAP COMMAND TO CLIENT listClosePosition = TradingServer.Facade.FacadeGetTopClosePosition(numberGet, listInvestorID); if (listClosePosition != null) listAllPosition = listClosePosition; if (listOpenPosition != null && listOpenPosition.Count > 0) { listOpenPosition = listOpenPosition.OrderByDescending(o => o.OpenTime).ToList(); int countGet = 0; if (numberGet > listOpenPosition.Count) countGet = listOpenPosition.Count; else countGet = numberGet; for (int j = 0; j < countGet; j++) { listOpenPosition[j].IsClose = false; listAllPosition.Add(listOpenPosition[j]); } } #endregion #region SORT POSITION if (listAllPosition != null) { int countPosition = listAllPosition.Count; for (int j = 0; j < countPosition; j++) { for (int n = j + 1; n < countPosition - 1; n++) { if (listAllPosition[j].IsClose) { if (listAllPosition[n].IsClose) { TimeSpan span = listAllPosition[j].CloseTime - listAllPosition[n].CloseTime; if (span.TotalSeconds > 0) { Business.OpenTrade temp = new OpenTrade(); temp = listAllPosition[n]; listAllPosition[n] = listAllPosition[j]; listAllPosition[j] = temp; } } else { TimeSpan span = listAllPosition[j].CloseTime - listAllPosition[n].OpenTime; if (span.TotalSeconds > 0) { Business.OpenTrade temp = new OpenTrade(); temp = listAllPosition[n]; listAllPosition[n] = listAllPosition[j]; listAllPosition[j] = temp; } } } else { if (listAllPosition[n].IsClose) { TimeSpan span = listAllPosition[j].OpenTime - listAllPosition[n].CloseTime; if (span.TotalSeconds > 0) { Business.OpenTrade temp = new OpenTrade(); temp = listAllPosition[n]; listAllPosition[n] = listAllPosition[j]; listAllPosition[j] = temp; } } else { TimeSpan span = listAllPosition[j].OpenTime - listAllPosition[n].OpenTime; if (span.TotalSeconds > 0) { Business.OpenTrade temp = new OpenTrade(); temp = listAllPosition[n]; listAllPosition[n] = listAllPosition[j]; listAllPosition[j] = temp; } } } } } } #endregion if (listAllPosition != null && listAllPosition.Count > 0) { int countGet = int.Parse(subParameter[0]); if (countGet > listAllPosition.Count) countGet = listAllPosition.Count; for (int j = 0; j < countGet; j++) { string message = subValue[0] + "$" + listAllPosition[j].ClientCode + "," + listAllPosition[j].ClosePrice + "," + listAllPosition[j].CloseTime + "," + listAllPosition[j].CommandCode + "," + listAllPosition[j].Commission + "," + listAllPosition[j].ExpTime + "," + listAllPosition[j].ID + "," + listAllPosition[j].Investor.InvestorID + "," + listAllPosition[j].IsClose + "," + listAllPosition[j].IsHedged + "," + listAllPosition[j].Margin + "," + listAllPosition[j].MaxDev + "," + listAllPosition[j].OpenPrice + "," + listAllPosition[j].OpenTime + "," + listAllPosition[j].Profit + "," + listAllPosition[j].Size + "," + listAllPosition[j].StopLoss + "," + listAllPosition[j].Swap + "," + listAllPosition[j].Symbol.Name + "," + listAllPosition[j].TakeProfit + "," + listAllPosition[j].Taxes + "," + listAllPosition[j].Type.Name + "," + listAllPosition[j].Type.ID + "," + listAllPosition[j].Symbol.ContractSize + "," + listAllPosition[j].SpreaDifferenceInOpenTrade + "," + listAllPosition[j].Symbol.Currency + "," + listAllPosition[j].Comment + "," + listAllPosition[j].AgentCommission + "," + listAllPosition[j].IsActivePending + "," + listAllPosition[j].IsStopLossAndTakeProfit; StringResult.Add(message); } } } else { StringResult.Add(subValue[0] + "$IVC0001"); } } } break; #endregion #region FUNCTION REPORT case "GetCommandHistoryWithGroupList": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int start = 0; int end = 0; int managerID = 0; DateTime startTime; DateTime endTime; List<int> InvestorList = new List<int>(); List<Business.OpenTrade> Result = new List<OpenTrade>(); int.TryParse(subParameter[0], out start); int.TryParse(subParameter[1], out end); int.TryParse(subParameter[2], out managerID); DateTime.TryParse(subParameter[3], out startTime); DateTime.TryParse(subParameter[4], out endTime); //set new time start,end startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, 00, 00, 00); endTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, 23, 59, 59); for (int j = 5; j < subParameter.Length; j++) { int investorID = 0; int.TryParse(subParameter[j], out investorID); InvestorList.Add(investorID); } if (Business.Market.AgentList != null) { int countAgent = Business.Market.AgentList.Count; for (int j = 0; j < countAgent; j++) { if (Business.Market.AgentList[j].AgentID == managerID) { if (start == 0) { #region REMOVE ALL DATA HISTORY REPORT OF INVESTOR Business.Market.AgentList[j].ListHistoryReport = new List<OpenTrade>(); #endregion #region GET REPORT IN DATABASE AND ADD TO LIST HISTORY REPORT DateTime timeLastAccount = startTime.AddDays(-1); Result = TradingServer.Facade.FacadegetCommandHistoryWithInvestorList(InvestorList, managerID, startTime, endTime); if (Result != null) { int countResult = Result.Count; if (Business.Market.AgentList[j].ListHistoryReport == null) Business.Market.AgentList[j].ListHistoryReport = new List<OpenTrade>(); for (int n = 0; n < countResult; n++) { Business.Market.AgentList[j].ListHistoryReport.Add(Result[n]); } } #endregion #region GET LAST ACCOUNT DateTime timeEndLastAccount = new DateTime(timeLastAccount.Year, timeLastAccount.Month, timeLastAccount.Day, 23, 59, 59); List<Business.LastBalance> listLastAccount = TradingServer.Facade.FacadeGetLastBalanceByTimeListInvestor(InvestorList, timeLastAccount, timeEndLastAccount); if (listLastAccount != null) { int countLastAccount = listLastAccount.Count; for (int n = 0; n < countLastAccount; n++) { Business.OpenTrade newOpenTrade = new OpenTrade(); newOpenTrade.AgentCommission = listLastAccount[n].Balance; newOpenTrade.AskServer = listLastAccount[n].ClosePL; newOpenTrade.BidServer = listLastAccount[n].Credit; newOpenTrade.ClosePrice = listLastAccount[n].CreditAccount; newOpenTrade.Commission = listLastAccount[n].CreditOut; newOpenTrade.FreezeMargin = listLastAccount[n].Deposit; newOpenTrade.Margin = listLastAccount[n].FloatingPL; newOpenTrade.MaxDev = listLastAccount[n].FreeMargin; newOpenTrade.NumberUpdate = listLastAccount[n].InvestorID; newOpenTrade.OpenPrice = listLastAccount[n].LastEquity; newOpenTrade.OpenTime = listLastAccount[n].LogDate; newOpenTrade.Profit = listLastAccount[n].LastMargin; newOpenTrade.Size = listLastAccount[n].PLBalance; newOpenTrade.SpreaDifferenceInOpenTrade = listLastAccount[n].Withdrawal; newOpenTrade.Comment = listLastAccount[n].LoginCode; newOpenTrade.Type = new TradeType(); newOpenTrade.Type.ID = 21; newOpenTrade.Type.Name = "LastBalance"; newOpenTrade.Investor = new Investor(); Business.Market.AgentList[j].ListHistoryReport.Add(newOpenTrade); } } #endregion #region GET END LAST ACCOUNT DateTime tempStartTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, 00, 00, 00); DateTime tempEndTime = new DateTime(endTime.Year, endTime.Month, endTime.Day, 23, 59, 59); List<Business.LastBalance> listEndLastAccount = TradingServer.Facade.FacadeGetLastBalanceByTimeListInvestor(InvestorList, tempStartTime, tempEndTime); if (listEndLastAccount != null) { int countLastAccount = listEndLastAccount.Count; for (int n = 0; n < countLastAccount; n++) { Business.OpenTrade newOpenTrade = new OpenTrade(); newOpenTrade.AgentCommission = listEndLastAccount[n].Balance; newOpenTrade.AskServer = listEndLastAccount[n].ClosePL; newOpenTrade.BidServer = listEndLastAccount[n].Credit; newOpenTrade.ClosePrice = listEndLastAccount[n].CreditAccount; newOpenTrade.Commission = listEndLastAccount[n].CreditOut; newOpenTrade.FreezeMargin = listEndLastAccount[n].Deposit; newOpenTrade.Margin = listEndLastAccount[n].FloatingPL; newOpenTrade.MaxDev = listEndLastAccount[n].FreeMargin; newOpenTrade.NumberUpdate = listEndLastAccount[n].InvestorID; newOpenTrade.OpenPrice = listEndLastAccount[n].LastEquity; newOpenTrade.OpenTime = listEndLastAccount[n].LogDate; newOpenTrade.Profit = listEndLastAccount[n].LastMargin; newOpenTrade.Size = listEndLastAccount[n].PLBalance; newOpenTrade.SpreaDifferenceInOpenTrade = listEndLastAccount[n].Withdrawal; newOpenTrade.Comment = listEndLastAccount[n].LoginCode; newOpenTrade.Type = new TradeType(); newOpenTrade.Type.ID = 22; newOpenTrade.Type.Name = "EndLastBalance"; newOpenTrade.Investor = new Investor(); Business.Market.AgentList[j].ListHistoryReport.Add(newOpenTrade); } } #endregion } if (Business.Market.AgentList[j].ListHistoryReport != null) { int rowNumber = end - start; if (Business.Market.AgentList[j].ListHistoryReport.Count < rowNumber) rowNumber = Business.Market.AgentList[j].ListHistoryReport.Count; #region FOR GET ORDER WITH START ,END for (int n = 0; n < rowNumber; n++) { string symbolName = string.Empty; if (Business.Market.AgentList[j].ListHistoryReport[0].Type == null || Business.Market.AgentList[j].ListHistoryReport[0].Investor == null) continue; if (Business.Market.AgentList[j].ListHistoryReport[0].Type.ID == 21) { //string messageLastBalance = "LastBalance$" + Business.Market.AgentList[j].ListHistoryReport[0].Investor.InvestorID + "," + // Business.Market.AgentList[j].ListHistoryReport[0].Profit; string messageLastBalance = "LastBalance$" + Business.Market.AgentList[j].ListHistoryReport[0].NumberUpdate + "," + Business.Market.AgentList[j].ListHistoryReport[0].AgentCommission + "," + Business.Market.AgentList[j].ListHistoryReport[0].AskServer + "," + Business.Market.AgentList[j].ListHistoryReport[0].FreezeMargin + "," + Business.Market.AgentList[j].ListHistoryReport[0].Margin + "," + Business.Market.AgentList[j].ListHistoryReport[0].BidServer + "," + Business.Market.AgentList[j].ListHistoryReport[0].OpenPrice + "," + Business.Market.AgentList[j].ListHistoryReport[0].Profit + "," + Business.Market.AgentList[j].ListHistoryReport[0].MaxDev + "," + Business.Market.AgentList[j].ListHistoryReport[0].OpenTime + "," + Business.Market.AgentList[j].ListHistoryReport[0].Commission + "," + Business.Market.AgentList[j].ListHistoryReport[0].SpreaDifferenceInOpenTrade + "," + Business.Market.AgentList[j].ListHistoryReport[0].ClosePrice + "," + Business.Market.AgentList[j].ListHistoryReport[0].Comment; StringResult.Add(messageLastBalance); Business.Market.AgentList[j].ListHistoryReport.RemoveAt(0); //n--; //if (Business.Market.AgentList[j].ListHistoryReport.Count < rowNumber) // rowNumber = Business.Market.AgentList[j].ListHistoryReport.Count; } else if (Business.Market.AgentList[j].ListHistoryReport[0].Type.ID == 22) { string messageLastBalance = "EndLastBalance$" + Business.Market.AgentList[j].ListHistoryReport[0].NumberUpdate + "," + Business.Market.AgentList[j].ListHistoryReport[0].AgentCommission + "," + Business.Market.AgentList[j].ListHistoryReport[0].AskServer + "," + Business.Market.AgentList[j].ListHistoryReport[0].FreezeMargin + "," + Business.Market.AgentList[j].ListHistoryReport[0].Margin + "," + Business.Market.AgentList[j].ListHistoryReport[0].BidServer + "," + Business.Market.AgentList[j].ListHistoryReport[0].OpenPrice + "," + Business.Market.AgentList[j].ListHistoryReport[0].Profit + "," + Business.Market.AgentList[j].ListHistoryReport[0].MaxDev + "," + Business.Market.AgentList[j].ListHistoryReport[0].OpenTime + "," + Business.Market.AgentList[j].ListHistoryReport[0].Commission + "," + Business.Market.AgentList[j].ListHistoryReport[0].SpreaDifferenceInOpenTrade + "," + Business.Market.AgentList[j].ListHistoryReport[0].ClosePrice + "," + Business.Market.AgentList[j].ListHistoryReport[0].Comment; StringResult.Add(messageLastBalance); Business.Market.AgentList[j].ListHistoryReport.RemoveAt(0); } else { if (Business.Market.AgentList[j].ListHistoryReport[0].Symbol != null) symbolName = Business.Market.AgentList[j].ListHistoryReport[0].Symbol.Name; string message = subValue[0] + "$" + Business.Market.AgentList[j].ListHistoryReport[0].ClientCode + "," + Business.Market.AgentList[j].ListHistoryReport[0].ClosePrice + "," + Business.Market.AgentList[j].ListHistoryReport[0].CloseTime + "," + Business.Market.AgentList[j].ListHistoryReport[0].CommandCode + "," + Business.Market.AgentList[j].ListHistoryReport[0].Commission + "," + Business.Market.AgentList[j].ListHistoryReport[0].ExpTime + "," + Business.Market.AgentList[j].ListHistoryReport[0].ID + "," + Business.Market.AgentList[j].ListHistoryReport[0].Investor.InvestorID + "," + true + "," + false + "," + "0,0" + "," + Business.Market.AgentList[j].ListHistoryReport[0].OpenPrice + "," + Business.Market.AgentList[j].ListHistoryReport[0].OpenTime + "," + Business.Market.AgentList[j].ListHistoryReport[0].Profit + "," + Business.Market.AgentList[j].ListHistoryReport[0].Size + "," + Business.Market.AgentList[j].ListHistoryReport[0].StopLoss + "," + Business.Market.AgentList[j].ListHistoryReport[0].Swap + "," + symbolName + "," + Business.Market.AgentList[j].ListHistoryReport[0].TakeProfit + "," + Business.Market.AgentList[j].ListHistoryReport[0].Taxes + "," + Business.Market.AgentList[j].ListHistoryReport[0].Type.Name + "," + Business.Market.AgentList[j].ListHistoryReport[0].Type.ID + ",-1,-1" + "," + Business.Market.AgentList[j].ListHistoryReport[0].AgentCommission + "," + Business.Market.AgentList[j].ListHistoryReport[0].Investor.AgentID + "," + Business.Market.AgentList[j].ListHistoryReport[0].Comment; StringResult.Add(message); Business.Market.AgentList[j].ListHistoryReport.RemoveAt(0); //n--; //if (Business.Market.AgentList[j].ListHistoryReport.Count < rowNumber) // rowNumber = Business.Market.AgentList[j].ListHistoryReport.Count; } } #endregion } break; } } } } } if (StringResult.Count == 0) { string message = subValue[0] + "$"; StringResult.Add(message); } } break; #endregion #region FUNCTION SYSTEM LOG case "GetLogByTime": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 7) { #region GET PARAMETER List<Business.SystemLog> result = new List<SystemLog>(); DateTime begin; DateTime end; int typeID = 0; int positionStart = 0; int positionEnd = 0; int managerID = 0; bool isExists = false; //GetLogByTime$00000093,-1,05/01/2012 00:00:00,12/13/2012 15:01:13,0,10000,37 int.TryParse(subParameter[1], out typeID); DateTime.TryParse(subParameter[2], out begin); DateTime.TryParse(subParameter[3], out end); int.TryParse(subParameter[4], out positionStart); int.TryParse(subParameter[5], out positionEnd); int.TryParse(subParameter[6], out managerID); #endregion #region GET LOG IF POSITION START = 0 if (positionStart == 0) { if (string.IsNullOrEmpty(subParameter[0])) { if (typeID == -1) { result = TradingServer.Facade.FacadeGetSystemLogByTime(begin, end); } else { result = TradingServer.Facade.FacadeGetSystemLogByTimeAndType(typeID, begin, end); } } else { if (typeID == -1) { string contentSearch = "%" + subParameter[0] + "%"; //IPAddress IP = null; bool isParseIP = true;//IPAddress.TryParse(subParameter[0], out IP); bool isNumber = false; int valueAddress = -1; int dotIndex = subParameter[0].IndexOf('.'); if (dotIndex > 0) { string[] subAddress = subParameter[0].Split('.'); if (subAddress.Length == 4) { for (int n = 0; n < subAddress.Length; n++) { isNumber = int.TryParse(subAddress[n], out valueAddress); if (!isNumber) { isParseIP = false; break; } else { if (valueAddress > 254) { isParseIP = false; break; } } } } else { isParseIP = false; } } else { isParseIP = false; } if (isParseIP) result = TradingServer.Facade.FacadeGetLogByIPAddress(begin, end, subParameter[0]); else result = TradingServer.Facade.FacadeGetLogLikeCode(begin, end, contentSearch); } else { string contentSearch = "%" + subParameter[0] + "%"; //IPAddress IP = null; bool isParseIP = true;//IPAddress.TryParse(subParameter[0], out IP); bool isNumber = false; int valueAddress = -1; int dotIndex = subParameter[0].IndexOf('.'); if (dotIndex > 0) { string[] subAddress = subParameter[0].Split('.'); if (subAddress.Length == 4) { for (int n = 0; n < subAddress.Length; n++) { isNumber = int.TryParse(subAddress[n], out valueAddress); if (!isNumber) { isParseIP = false; break; } else { if (valueAddress > 254) { isParseIP = false; break; } } } } else { isParseIP = false; } } else { isParseIP = false; } if (isParseIP) result = TradingServer.Facade.FacadeGetLogByIPAddressAndType(begin, end, subParameter[0], typeID); else result = TradingServer.Facade.FacadeGetSystemLogByCodeAndTime(begin, end, typeID, contentSearch); } } } #endregion #region MAP RESULT TO AGENT LIST SYSTEM LOG if (Business.Market.AdminList != null && Business.Market.AdminList.Count > 0) { int countAgent = Business.Market.AdminList.Count; for (int j = 0; j < countAgent; j++) { if (Business.Market.AdminList[j].AgentID == managerID) { if (positionStart == 0) { Business.Market.AdminList[j].ListSystemLog = new List<SystemLog>(); if (result != null) { int countResult = result.Count; for (int n = 0; n < countResult; n++) { Business.Market.AdminList[j].ListSystemLog.Add(result[n]); } } } int rowNumber = positionEnd - positionStart; if (Business.Market.AdminList[j].ListSystemLog.Count < rowNumber) rowNumber = Business.Market.AdminList[j].ListSystemLog.Count; for (int m = 0; m < rowNumber; m++) { string message = subValue[0] + "$" + Business.Market.AdminList[j].ListSystemLog[0].ID + "," + Business.Market.AdminList[j].ListSystemLog[0].LogDay + "," + Business.Market.AdminList[j].ListSystemLog[0].IPAddress + "," + Business.Market.AdminList[j].ListSystemLog[0].LogContent + "," + Business.Market.AdminList[j].ListSystemLog[0].Comment; StringResult.Add(message); Business.Market.AdminList[j].ListSystemLog.RemoveAt(0); } isExists = true; break; } } } #endregion #region MAP RESULT TO AGENT LIST SYSTEM LOG if (!isExists) { if (Business.Market.AgentList != null && Business.Market.AgentList.Count > 0) { int countAgent = Business.Market.AgentList.Count; for (int j = 0; j < countAgent; j++) { if (Business.Market.AgentList[j].AgentID == managerID) { if (positionStart == 0) { Business.Market.AgentList[j].ListSystemLog = new List<SystemLog>(); if (result != null) { int countResult = result.Count; for (int n = 0; n < countResult; n++) { Business.Market.AgentList[j].ListSystemLog.Add(result[n]); } } } int rowNumber = positionEnd - positionStart; if (Business.Market.AgentList[j].ListSystemLog.Count < rowNumber) rowNumber = Business.Market.AgentList[j].ListSystemLog.Count; for (int m = 0; m < rowNumber; m++) { string message = subValue[0] + "$" + Business.Market.AgentList[j].ListSystemLog[0].ID + "," + Business.Market.AgentList[j].ListSystemLog[0].LogDay + "," + Business.Market.AgentList[j].ListSystemLog[0].IPAddress + "," + Business.Market.AgentList[j].ListSystemLog[0].LogContent + "," + Business.Market.AgentList[j].ListSystemLog[0].Comment; StringResult.Add(message); Business.Market.AgentList[j].ListSystemLog.RemoveAt(0); } break; } } } } #endregion #region INSERT SYSTEM LOG string content = "'" + code + "': Requested '" + subParameter[0] + "' "; string contentResult = string.Empty; if (result != null) { if (result.Count > 0) contentResult = result.Count + " rows returned"; else contentResult = result.Count + " row returned"; } else { contentResult = "0 row returned"; } content = content + contentResult; string comment = "[Requested Log]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } #region RETURN -1 IF DON'T FIND LOG if (StringResult.Count == 0) { string message = subValue[0] + "$-1"; StringResult.Add(message); } #endregion } break; #endregion #region GET TOP INTERNAL MAIL TO INVESTOR case "GetTopInternalMailToInvestor": { List<Business.InternalMail> result = new List<InternalMail>(); result = TradingServer.Facade.FacadeGetTopInternalMailToInvestor(subValue[1]); if (result != null) { int countResult = result.Count; for (int j = 0; j < countResult; j++) { string message = subValue[j] + "$" + result[j].InternalMailID + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].Subject) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].From) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].FromName) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].Time.ToString()) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].Content); StringResult.Add(message); } } if (StringResult.Count == 0) { StringResult.Add(subValue[1] + "$-1"); } } break; case "GetInternalMailToInvestor": { int start = 0, end = 0; string[] tem = subValue[1].Split(','); int.TryParse(tem[0], out start); int.TryParse(tem[1], out end); List<Business.InternalMail> result = new List<InternalMail>(); result = TradingServer.Facade.FacadeGetInternalMailToInvestor(start, end, tem[2]); if (result != null) { int countResult = result.Count; for (int j = 0; j < countResult; j++) { string message = subValue[0] + "$" + result[j].InternalMailID + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].Subject) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].From) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].FromName) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].Time.ToString()) + "," + result[j].IsNew.ToString() + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result[j].Content); StringResult.Add(message); } } if (StringResult.Count == 0) { StringResult.Add(subValue[0] + "$"); } } break; #endregion #region CHECK TIME EVENT DEBUG case "DayEvent": { if (Business.Market.DayEvent != null) { int countDayEvent = Business.Market.DayEvent.Count; for (int j = 0; j < countDayEvent; j++) { if (Business.Market.DayEvent[j].TargetFunction != null) { int countTarget = Business.Market.DayEvent[j].TargetFunction.Count; for (int n = 0; n < countTarget; n++) { string message = subValue[0] + "$Event Type: " + Business.Market.DayEvent[j].EventType + "-Every: " + Business.Market.DayEvent[j].Every + "-Enable: " + Business.Market.DayEvent[j].IsEnable + "-Event Position: " + Business.Market.DayEvent[j].TargetFunction[n].EventPosition + "-Day EventID: " + Business.Market.DayEvent[j].TimeEventID + "-Time Execution: " + Business.Market.DayEvent[j].TimeExecution + " " + Business.Market.TimerEventDay.Interval; StringResult.Add(message); } } } } } break; case "WeekEvent": { if (Business.Market.WeekEvent != null) { int countWeekEvent = Business.Market.WeekEvent.Count; for (int j = 0; j < countWeekEvent; j++) { if (Business.Market.WeekEvent[j].TargetFunction != null) { int countTarget = Business.Market.WeekEvent[j].TargetFunction.Count; for (int n = 0; n < countTarget; n++) { string message = subValue[0] + "$Event Type: " + Business.Market.WeekEvent[j].EventType + "-Every: " + Business.Market.WeekEvent[j].Every + "-Enable: " + Business.Market.WeekEvent[j].IsEnable + "-Event Position: " + Business.Market.WeekEvent[j].TargetFunction[n].EventPosition + "-EventID: " + Business.Market.WeekEvent[j].TimeEventID + "-TimeExecution: " + Business.Market.WeekEvent[j].TimeExecution + " " + Business.Market.TimerEventWeek.Interval; StringResult.Add(message); } } } } break; } case "YearEvent": { if (Business.Market.YearEvent != null) { if (Business.Market.YearEvent != null) { int countYearEvent = Business.Market.YearEvent.Count; for (int j = 0; j < countYearEvent; j++) { if (Business.Market.YearEvent[j].TargetFunction != null) { int countTarget = Business.Market.YearEvent[j].TargetFunction.Count; for (int n = 0; n < countTarget; n++) { string message = subValue[0] + "$Event Type: " + Business.Market.YearEvent[j].EventType + "-Every: " + Business.Market.YearEvent[j].Every + "-Enable: " + Business.Market.YearEvent[j].IsEnable + "-EventPosition: " + Business.Market.YearEvent[j].TargetFunction[n].EventPosition + "-EventID: " + Business.Market.YearEvent[j].TimeEventID + "-Time Execution: " + Business.Market.YearEvent[j].TimeExecution + " " + Business.Market.TimerEventYear.Interval; StringResult.Add(message); } } } } } } break; #endregion #region GET TICK ONLINE INIT MARKET case "GetTickOnline": { if (Business.Market.QuoteList != null) { int countQuote = Business.Market.QuoteList.Count; for (int j = 0; j < countQuote; j++) { if (Business.Market.QuoteList[i].RefSymbol != null) { int countRefSymbol = Business.Market.QuoteList[i].RefSymbol.Count; for (int n = 0; n < countRefSymbol; n++) { if (Business.Market.QuoteList[j].RefSymbol[n].TickValue != null && !string.IsNullOrEmpty(Business.Market.QuoteList[j].RefSymbol[n].TickValue.SymbolName)) { string message = Business.Market.QuoteList[j].RefSymbol[n].TickValue.Bid + "?" + //Business.Market.QuoteList[j].RefSymbol[n].TickValue.Ask + "?" + Business.Market.QuoteList[j].RefSymbol[n].TickValue.TickTime + "?" + Business.Market.QuoteList[j].RefSymbol[n].TickValue.SymbolName + "?" + Business.Market.QuoteList[j].RefSymbol[n].TickValue.HighInDay + "?" + Business.Market.QuoteList[j].RefSymbol[n].TickValue.LowInDay + "?" + //Business.Market.QuoteList[j].RefSymbol[n].TickValue.HighAsk + "?" + //Business.Market.QuoteList[j].RefSymbol[n].TickValue.LowAsk + "?" + Business.Market.QuoteList[j].RefSymbol[n].TickValue.Status; StringResult.Add(message); } } } } } } break; case "GetTickOnlineManager": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { if (Business.Market.SymbolList != null) { for (int j = Business.Market.SymbolList.Count - 1; j >= 0; j--) { if (Business.Market.SymbolList[j] != null) { if (Business.Market.SymbolList[j].TickValue != null) { string message = "GetTickOnlineManager$" + Business.Market.SymbolList[j].TickValue.Bid + "}" + Business.Market.SymbolList[j].TickValue.Ask + "}" + Business.Market.SymbolList[j].TickValue.SymbolName + "}" + Business.Market.SymbolList[j].TickValue.TickTime.Ticks + "}" + Business.Market.SymbolList[j].TickValue.Status + "}" + Business.Market.SymbolList[j].TickValue.HighInDay + "}" + Business.Market.SymbolList[j].TickValue.LowInDay; StringResult.Add(message); } } } } } } break; #endregion #region GET CANDLES DAY(GET OPEN OPEN PRICE IN DAY) case "GetCandlesByDate": { string[] subParameter = subValue[1].Split('|'); int port = -1; int investorID = -1; DateTime time; List<string> listSymbol = new List<string>(); if (subParameter.Length == 7) { int month, day, year; int.TryParse(subParameter[1], out month); int.TryParse(subParameter[2], out day); int.TryParse(subParameter[3], out year); time = new DateTime(year, month, day, 00, 00, 00); int.TryParse(subParameter[4], out port); int.TryParse(subParameter[5], out investorID); Business.Investor.investorInstance.UpdateLastConnect(investorID, subParameter[6]); string[] subListSymbol = subParameter[0].Split('{'); int countSymbol = subListSymbol.Length; for (int j = 0; j < countSymbol; j++) { if (!string.IsNullOrEmpty(subListSymbol[j])) { listSymbol.Add(subListSymbol[j]); } } List<string> temp = ProcessQuoteLibrary.Business.QuoteProcess.GetCandlesByDate(listSymbol, time, port); if (temp != null && temp.Count > 0) { int countTemp = temp.Count; for (int j = 0; j < countTemp; j++) { if (!string.IsNullOrEmpty(temp[j])) { string message = subValue[0] + "$" + temp[j]; StringResult.Add(message); } } } else { string message = subValue[0] + "$"; StringResult.Add(message); } } } break; #endregion #region ADMIN OR MANGER REQUEST CLIENT LOG case "RequestClientLog": { if (Business.Market.ListClientLogs != null) { int countClientLog = Business.Market.ListClientLogs.Count; for (int j = 0; j < count; j++) { if (Business.Market.ListClientLogs[j].AdminCode == code) { int countWhile = 0; while (!Business.Market.ListClientLogs[j].IsComplete) { System.Threading.Thread.Sleep(1000); countWhile++; if (countWhile == 5) Business.Market.ListClientLogs[j].IsComplete = true; } if (Business.Market.ListClientLogs[j].ClientLogs.Count > 0) StringResult = Business.Market.ListClientLogs[j].ClientLogs; else StringResult.Add(subValue[0] + "$"); Business.Market.ListClientLogs[j].ClientLogs.Clear(); break; } } } } break; #endregion } } } } return StringResult; }
/// <summary> /// /// </summary> /// <param name="openPosition"></param> /// <returns></returns> internal Business.OpenTrade ExtractCommand(Business.OpenTrade openPosition) { Business.OpenTrade newOpenPosition = new OpenTrade(); if (openPosition != null) { newOpenPosition.AgentCommission = openPosition.AgentCommission; newOpenPosition.ClientCode = openPosition.ClientCode; newOpenPosition.ClosePrice = openPosition.ClosePrice; newOpenPosition.CloseTime = openPosition.CloseTime; newOpenPosition.CommandCode = openPosition.CommandCode; newOpenPosition.Comment = openPosition.Comment; newOpenPosition.Commission = openPosition.Commission; newOpenPosition.ExpTime = openPosition.ExpTime; newOpenPosition.FreezeMargin = openPosition.FreezeMargin; newOpenPosition.ID = openPosition.ID; newOpenPosition.IGroupSecurity = openPosition.IGroupSecurity; newOpenPosition.Investor = openPosition.Investor; newOpenPosition.IsClose = openPosition.IsClose; newOpenPosition.IsHedged = openPosition.IsHedged; newOpenPosition.IsMultiClose = openPosition.IsMultiClose; newOpenPosition.IsMultiUpdate = openPosition.IsMultiUpdate; newOpenPosition.IsProcess = openPosition.IsProcess; newOpenPosition.IsServer = openPosition.IsServer; newOpenPosition.ManagerID = openPosition.ManagerID; newOpenPosition.Margin = openPosition.Margin; newOpenPosition.MaxDev = openPosition.MaxDev; newOpenPosition.NumberUpdate = openPosition.NumberUpdate; newOpenPosition.OpenPrice = openPosition.OpenPrice; newOpenPosition.OpenTime = openPosition.OpenTime; newOpenPosition.Profit = openPosition.Profit; newOpenPosition.Size = openPosition.Size; newOpenPosition.SpreaDifferenceInOpenTrade = openPosition.SpreaDifferenceInOpenTrade; newOpenPosition.StopLoss = openPosition.StopLoss; newOpenPosition.Swap = openPosition.Swap; newOpenPosition.Symbol = openPosition.Symbol; newOpenPosition.TakeProfit = openPosition.TakeProfit; newOpenPosition.Taxes = openPosition.Taxes; newOpenPosition.Type = openPosition.Type; } return newOpenPosition; }
/// <summary> /// /// </summary> /// <param name="Command"></param> /// <returns></returns> public IPresenter.CloseCommandDelegate CloseCommandNotify(OpenTrade Command) { throw new NotImplementedException(); }
/// <summary> /// /// </summary> /// <param name="Command"></param> public void CloseCommand(OpenTrade Command) { throw new NotImplementedException(); }
/// <summary> /// /// </summary> /// <param name="Command"></param> /// <returns></returns> public OpenTrade CalculateCommand(OpenTrade Command) { throw new NotImplementedException(); }
/// <summary> /// NotifyUpdateCommand$CommandID{InvestorCode{OpenPrice{StopLoss{TakeProfit{Swap{Comment /// </summary> /// <param name="value"></param> /// <returns></returns> internal static Business.OpenTrade MapNotifyUpdateCommand(string value) { Business.OpenTrade result = new OpenTrade(); if (value != null) { string[] subValue = value.Split('$'); if (subValue.Count() == 2) { string[] subParameter = subValue[1].Split('{'); if (subParameter.Count() == 13) { result.RefCommandID = int.Parse(subParameter[0]); if (Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if(Business.Market.InvestorList[i].Code.ToUpper().Trim() == subParameter[1].ToUpper().Trim()) { result.Investor = Business.Market.InvestorList[i]; break; } } } result.OpenPrice = double.Parse(subParameter[2]); result.StopLoss = double.Parse(subParameter[3]); result.TakeProfit = double.Parse(subParameter[4]); #region GET COMMAND TYPE switch (int.Parse(subParameter[5])) { case 0: { Business.TradeType typeCommand = Business.Market.marketInstance.GetTradeType(1); result.Type = typeCommand; } break; case 1: { Business.TradeType typeCommand = Business.Market.marketInstance.GetTradeType(2); result.Type = typeCommand; } break; case 2: { Business.TradeType typeCommand = Business.Market.marketInstance.GetTradeType(7); result.Type = typeCommand; } break; case 3: { Business.TradeType typeCommand = Business.Market.marketInstance.GetTradeType(8); result.Type = typeCommand; } break; case 4: { Business.TradeType typeCommand = Business.Market.marketInstance.GetTradeType(9); result.Type = typeCommand; } break; case 5: { Business.TradeType typeCommand = Business.Market.marketInstance.GetTradeType(10); result.Type = typeCommand; } break; } #endregion result.Swap = double.Parse(subParameter[5]); result.Commission = double.Parse(subParameter[6]); result.OpenTime = DateTime.Parse(subParameter[7]); result.ExpTime = DateTime.Parse(subParameter[8]); result.Swap = double.Parse(subParameter[9]); if (Business.Market.Symbols.ContainsKey(subParameter[10])) { result.Symbol = Business.Market.Symbols[subParameter[10]]; } result.Size = double.Parse(subParameter[11]) / 100; result.Comment = subParameter[12]; } } } return result; }
/// <summary> /// /// </summary> /// <param name="value"></param> /// <returns></returns> internal static Business.OpenTrade MapNotifyCloseCommand(string value) { Business.OpenTrade result = new OpenTrade(); //NotifyCloseCommand$CommandID{ClosePrice{Size{Profit{Swap{Commission if (value != null) { string[] subValue = value.Split('$'); if (subValue.Count() == 2) { string[] subParameter = subValue[1].Split('{'); if (subParameter.Count() == 7) { result.RefCommandID = int.Parse(subParameter[0]); result.ClosePrice = double.Parse(subParameter[1]); result.Size = double.Parse(subParameter[2]) / 100; result.Profit = double.Parse(subParameter[3]); result.Swap = double.Parse(subParameter[4]); result.Commission = double.Parse(subParameter[5]); result.CloseTime = DateTime.Parse(subParameter[6]); } } } return result; }
/// <summary> /// /// </summary> /// <param name="Command"></param> public void MultiUpdateCommand(OpenTrade Command) { return; }
public void MultiCloseCommand(OpenTrade Command) { return; }
/// <summary> /// /// </summary> /// <param name="ListSymbol"></param> /// <param name="OpenTradeID"></param> /// <returns></returns> private Business.OpenTrade FindAndRemoveOpenTradeInCommandListReference(List<Business.Symbol> ListSymbol, int OpenTradeID) { Business.OpenTrade Command = new OpenTrade(); if (ListSymbol != null) { bool Flag = false; int count = ListSymbol.Count; for (int i = 0; i < count; i++) { if (Flag == true) break; if (ListSymbol[i].CommandList != null) { int countOpenTrade = ListSymbol[i].CommandList.Count; for (int j = 0; j < ListSymbol[i].CommandList.Count; j++) { if (ListSymbol[i].CommandList[j].ID == OpenTradeID) { Command.ClientCode = ListSymbol[i].CommandList[j].ClientCode; Command.ClosePrice = ListSymbol[i].CommandList[j].ClosePrice; Command.CloseTime = ListSymbol[i].CommandList[j].CloseTime; Command.CommandCode = ListSymbol[i].CommandList[j].CommandCode; Command.Commission = ListSymbol[i].CommandList[j].Commission; Command.ExpTime = ListSymbol[i].CommandList[j].ExpTime; Command.ID = ListSymbol[i].CommandList[j].ID; Command.IsClose = ListSymbol[i].CommandList[j].IsClose; Command.Margin = ListSymbol[i].CommandList[j].Margin; Command.OpenPrice = ListSymbol[i].CommandList[j].OpenPrice; Command.OpenTime = ListSymbol[i].CommandList[j].OpenTime; Command.Profit = ListSymbol[i].CommandList[j].Profit; Command.Size = ListSymbol[i].CommandList[j].Size; Command.StopLoss = ListSymbol[i].CommandList[j].StopLoss; Command.Swap = ListSymbol[i].CommandList[j].Swap; Command.Symbol = ListSymbol[i].CommandList[j].Symbol; Command.TakeProfit = ListSymbol[i].CommandList[j].TakeProfit; Command.Investor = ListSymbol[i].CommandList[j].Investor; Command.Type = ListSymbol[i].CommandList[j].Type; Command.IGroupSecurity = ListSymbol[i].CommandList[j].IGroupSecurity; ListSymbol[i].CommandList.Remove(ListSymbol[i].CommandList[j]); j--; Flag = true; break; } } } if (Flag == false) { if (ListSymbol[i].RefSymbol != null) { Command = this.FindAndRemoveOpenTradeInCommandListReference(ListSymbol[i].RefSymbol, OpenTradeID); } } } } return Command; }
/// <summary> /// /// </summary> /// <param name="ListSymbol"></param> /// <param name="CommandID"></param> /// <returns></returns> private Business.OpenTrade FindOpenTradeReferenceInSymbolList(List<Business.Symbol> ListSymbol, int CommandID) { Business.OpenTrade Result = new OpenTrade(); if (ListSymbol != null) { bool Flag = false; int count = ListSymbol.Count; for (int i = 0; i < count; i++) { if (Flag) break; if (ListSymbol[i].CommandList != null && ListSymbol[i].CommandList.Count > 0) { int countCommand = ListSymbol[i].CommandList.Count; for (int j = 0; j < countCommand; j++) { if (ListSymbol[i].CommandList[j].ID == CommandID) { Result = ListSymbol[i].CommandList[j]; Flag = true; break; } } } if (Flag == false) { if (ListSymbol[i].RefSymbol != null && ListSymbol[i].RefSymbol.Count > 0) { Result = this.FindOpenTradeReferenceInSymbolList(ListSymbol[i].RefSymbol, CommandID); } } } } return Result; }
/// <summary> /// /// </summary> /// <param name="symbolID"></param> /// <param name="investorID"></param> public static Business.OpenTrade FillInstanceOpenTrade(int symbolID, int investorID, int commandTypeID) { Business.OpenTrade result = new Business.OpenTrade(); //result.Symbol #region Find Symbol In Symbol List Command Type,Symbol //Find Symbol In Symbol List Command Type if (Business.Market.SymbolList != null) { int countSymbol = Business.Market.SymbolList.Count; for (int j = 0; j < countSymbol; j++) { if (Business.Market.SymbolList[j].SymbolID == symbolID) { if (Business.Market.SymbolList[j].MarketAreaRef.Type != null) { int countType = Business.Market.SymbolList[j].MarketAreaRef.Type.Count; for (int n = 0; n < countType; n++) { if (Business.Market.SymbolList[j].MarketAreaRef.Type[n].ID == commandTypeID) { result.Type = Business.Market.SymbolList[j].MarketAreaRef.Type[n]; break; } } } result.Symbol = Business.Market.SymbolList[j]; break; } } } #endregion //result.Investor #region Find Investor List //Find Investor List if (Business.Market.InvestorList != null) { int countInvestor = Business.Market.InvestorList.Count; for (int n = 0; n < countInvestor; n++) { if (Business.Market.InvestorList[n].InvestorID == investorID) { result.Investor = Business.Market.InvestorList[n]; break; } } } #endregion #region Fill IGroupSecurity if (result.Investor != null && result.Symbol != null) { if (Business.Market.IGroupSecurityList != null) { int countIGroupSecurity = Business.Market.IGroupSecurityList.Count; for (int i = 0; i < countIGroupSecurity; i++) { if (Business.Market.IGroupSecurityList[i].SecurityID == result.Symbol.SecurityID && Business.Market.IGroupSecurityList[i].InvestorGroupID == result.Investor.InvestorGroupInstance.InvestorGroupID) { result.IGroupSecurity = Business.Market.IGroupSecurityList[i]; break; } } } } #endregion //BECAUSE WITH TYPE IS 13,14 THEN CAN NOT GET TYPE(BECAUSE SYMBOL ID = 0) if (result.Type == null) { result.Type = new Business.TradeType(); result.Type.ID = commandTypeID; result.Type.Name = TradingServer.Facade.FacadeGetTypeNameByTypeID(commandTypeID); } return result; }
/// <summary> /// PROCESS NOTIFY FROM MT4(CASE CONNECT MT4) /// </summary> internal static void ProcessNotifyMessage() { string result = string.Empty; while (Business.Market.IsProcessNotifyMessage) { result = Business.Market.GetNotifyMessage(); while (!string.IsNullOrEmpty(result)) { //Process Notify Message string[] subCommand = result.Split('¬'); if (subCommand.Length > 0) { int count = subCommand.Length; for (int i = 0; i < count; i++) { string[] subValue = subCommand[i].Split('$'); if (subValue.Length == 2) { switch (subValue[0]) { #region NOTIFY MAKE COMMAND case "MakeCommandNotify": { try { string[] subParameter = subValue[1].Split('{'); TradingServer.Facade.FacadeAddNewSystemLog(6, result, "[MakeCommandNotify]", "", subParameter[4]); string commandType = string.Empty; Business.OpenTrade resultOpenTrade = Business.Market.MapNotifyMakeCommand(subCommand[i]); if (resultOpenTrade.Investor == null || resultOpenTrade.Symbol == null || resultOpenTrade.Type == null) continue; #region comment code if (Business.Market.NJ4XTickets != null) { lock (Business.Market.nj4xObject) { bool isExitst = false; int countNJ4XTicket = Business.Market.NJ4XTickets.Count; for (int n = 0; n < countNJ4XTicket; n++) { if (Business.Market.NJ4XTickets[n].Code == resultOpenTrade.Investor.Code) { lock (Business.Market.nj4xObject) Business.Market.NJ4XTickets.RemoveAt(n); #region get mql commands (log ipaddress) if (Business.Market.marketInstance.MQLCommands != null) { int countMQL = Business.Market.marketInstance.MQLCommands.Count; for (int j = 0; j < countMQL; j++) { if (Business.Market.marketInstance.MQLCommands[j] != null) { if (Business.Market.marketInstance.MQLCommands[j].InvestorCode == resultOpenTrade.Investor.Code) { resultOpenTrade.IpAddress = Business.Market.marketInstance.MQLCommands[j].IpAddress; Business.Market.marketInstance.MQLCommands.Remove(Business.Market.marketInstance.MQLCommands[j]); break; } } } } #endregion #region process add new command if (resultOpenTrade.RefCommandID > 0) { bool IsBuy = Model.Helper.Instance.IsBuy(resultOpenTrade.Type.ID); commandType = Model.Helper.Instance.convertCommandTypeIDToString(resultOpenTrade.Type.ID); Business.OpenTrade newOpenTradeExe = new OpenTrade(); Business.OpenTrade newOpenTradeSymbol = new OpenTrade(); Business.OpenTrade newOpenTradeInvestor = new OpenTrade(); #region SET INSTANCE IGROUPSECURITY, SYMBOL, TYPE, INVESTOR //set igroupsecurity newOpenTradeExe.IGroupSecurity = resultOpenTrade.IGroupSecurity; newOpenTradeInvestor.IGroupSecurity = resultOpenTrade.IGroupSecurity; newOpenTradeSymbol.IGroupSecurity = resultOpenTrade.IGroupSecurity; //set symbol newOpenTradeExe.Symbol = resultOpenTrade.Symbol; newOpenTradeInvestor.Symbol = resultOpenTrade.Symbol; newOpenTradeSymbol.Symbol = resultOpenTrade.Symbol; //set type newOpenTradeExe.Type = resultOpenTrade.Type; newOpenTradeInvestor.Type = resultOpenTrade.Type; newOpenTradeSymbol.Type = resultOpenTrade.Type; //set investor newOpenTradeExe.Investor = resultOpenTrade.Investor; newOpenTradeInvestor.Investor = resultOpenTrade.Investor; newOpenTradeSymbol.Investor = resultOpenTrade.Investor; #endregion #region GET SPREAD DIFFIRENCE FOR COMMAND //GET SPREAD DIFFRENCE OF OPEN TRADE double spreadDifference = 0; if (resultOpenTrade.IGroupSecurity != null) { if (resultOpenTrade.IGroupSecurity.IGroupSecurityConfig != null) { int countIGroupSecurity = resultOpenTrade.IGroupSecurity.IGroupSecurityConfig.Count; for (int j = 0; j < countIGroupSecurity; j++) { if (resultOpenTrade.IGroupSecurity.IGroupSecurityConfig[j].Code == "B11") { double.TryParse(resultOpenTrade.IGroupSecurity.IGroupSecurityConfig[j].NumValue, out spreadDifference); break; } } } } newOpenTradeExe.SpreaDifferenceInOpenTrade = spreadDifference; newOpenTradeInvestor.SpreaDifferenceInOpenTrade = spreadDifference; newOpenTradeSymbol.SpreaDifferenceInOpenTrade = spreadDifference; #endregion double tempClosePrice = 0; if (IsBuy) tempClosePrice = resultOpenTrade.Symbol.TickValue.Bid; else tempClosePrice = resultOpenTrade.Symbol.TickValue.Ask; resultOpenTrade.ClosePrice = tempClosePrice; #region NEW INSTANCES FOR COMMAND EXECUTOR newOpenTradeExe.AgentCommission = 0; newOpenTradeExe.ClientCode = resultOpenTrade.ClientCode; newOpenTradeExe.CloseTime = resultOpenTrade.OpenTime; //newOpenTradeExe.CommandCode = resultOpenTrade.CommandCode; newOpenTradeExe.Comment = resultOpenTrade.Comment; newOpenTradeExe.Swap = resultOpenTrade.Swap; newOpenTradeExe.Commission = resultOpenTrade.Commission; newOpenTradeExe.ExpTime = resultOpenTrade.ExpTime; newOpenTradeExe.FreezeMargin = 0; //newOpenTradeExe.ID = listOnlineCommand[i].OnlineCommandID; newOpenTradeExe.IsClose = false; newOpenTradeExe.OpenPrice = resultOpenTrade.OpenPrice; newOpenTradeExe.OpenTime = resultOpenTrade.OpenTime; newOpenTradeExe.Profit = resultOpenTrade.Profit; newOpenTradeExe.Size = resultOpenTrade.Size; newOpenTradeExe.StopLoss = resultOpenTrade.StopLoss; newOpenTradeExe.Swap = resultOpenTrade.Swap; newOpenTradeExe.TakeProfit = resultOpenTrade.TakeProfit; newOpenTradeExe.Taxes = 0; newOpenTradeExe.TotalSwap = 0; newOpenTradeExe.RefCommandID = resultOpenTrade.RefCommandID; newOpenTradeExe.ClosePrice = tempClosePrice; #endregion #region NEW INSTANCE FOR SYMBOL LIST newOpenTradeSymbol.AgentCommission = 0; newOpenTradeSymbol.ClientCode = resultOpenTrade.ClientCode; newOpenTradeSymbol.CloseTime = resultOpenTrade.OpenTime; //newOpenTradeSymbol.CommandCode = listOnlineCommand[i].CommandCode; newOpenTradeSymbol.Comment = resultOpenTrade.Comment; newOpenTradeInvestor.Swap = resultOpenTrade.Swap; newOpenTradeSymbol.Commission = resultOpenTrade.Commission; newOpenTradeSymbol.ExpTime = resultOpenTrade.ExpTime; newOpenTradeSymbol.FreezeMargin = 0; //newOpenTradeSymbol.ID = listOnlineCommand[i].OnlineCommandID; newOpenTradeSymbol.IsClose = true; newOpenTradeSymbol.OpenPrice = resultOpenTrade.OpenPrice; newOpenTradeSymbol.OpenTime = resultOpenTrade.OpenTime; newOpenTradeSymbol.Profit = resultOpenTrade.Profit; newOpenTradeSymbol.Size = resultOpenTrade.Size; newOpenTradeSymbol.StopLoss = resultOpenTrade.StopLoss; newOpenTradeSymbol.Swap = resultOpenTrade.Swap; newOpenTradeSymbol.TakeProfit = resultOpenTrade.TakeProfit; newOpenTradeSymbol.Taxes = 0; newOpenTradeSymbol.TotalSwap = 0; newOpenTradeSymbol.InsExe = newOpenTradeExe; newOpenTradeSymbol.RefCommandID = resultOpenTrade.RefCommandID; newOpenTradeSymbol.ClosePrice = tempClosePrice; #endregion #region NEW INSTANCE FOR INVESTOR LIST newOpenTradeInvestor.AgentCommission = 0; newOpenTradeInvestor.ClientCode = resultOpenTrade.ClientCode; newOpenTradeInvestor.CloseTime = resultOpenTrade.OpenTime; //newOpenTradeInvestor.CommandCode = listOnlineCommand[i].CommandCode; newOpenTradeInvestor.Comment = resultOpenTrade.Comment; newOpenTradeInvestor.Commission = resultOpenTrade.Commission; newOpenTradeInvestor.Swap = resultOpenTrade.Swap; newOpenTradeInvestor.ExpTime = resultOpenTrade.ExpTime; newOpenTradeInvestor.FreezeMargin = 0; //newOpenTradeInvestor.ID = listOnlineCommand[i].OnlineCommandID; newOpenTradeInvestor.IsClose = false; newOpenTradeInvestor.OpenPrice = resultOpenTrade.OpenPrice; newOpenTradeInvestor.OpenTime = resultOpenTrade.OpenTime; newOpenTradeInvestor.Profit = resultOpenTrade.Profit; newOpenTradeInvestor.Size = resultOpenTrade.Size; newOpenTradeInvestor.StopLoss = resultOpenTrade.StopLoss; newOpenTradeInvestor.Swap = resultOpenTrade.Swap; newOpenTradeInvestor.TakeProfit = resultOpenTrade.TakeProfit; newOpenTradeInvestor.Taxes = 0; newOpenTradeInvestor.TotalSwap = 0; newOpenTradeInvestor.InsExe = newOpenTradeExe; newOpenTradeInvestor.RefCommandID = resultOpenTrade.RefCommandID; newOpenTradeInvestor.ClosePrice = tempClosePrice; #endregion #region BUILD CLIENT CODE string clientCode = string.Empty; clientCode = resultOpenTrade.Investor.Code + "_" + DateTime.Now.Ticks; #endregion newOpenTradeExe.ClientCode = clientCode; newOpenTradeInvestor.ClientCode = clientCode; newOpenTradeSymbol.ClientCode = clientCode; newOpenTradeExe.CommandCode = resultOpenTrade.CommandCode; newOpenTradeInvestor.CommandCode = resultOpenTrade.CommandCode; newOpenTradeSymbol.CommandCode = resultOpenTrade.CommandCode; string commandCode = string.Empty; //set id and command code newOpenTradeExe.ID = resultOpenTrade.RefCommandID; newOpenTradeInvestor.ID = resultOpenTrade.RefCommandID; newOpenTradeSymbol.ID = resultOpenTrade.RefCommandID; commandCode = resultOpenTrade.CommandCode; //====================================== #region ADD COMMAND TO COMMAND EXECUTOR if (Business.Market.CommandExecutor == null) Business.Market.CommandExecutor = new List<Business.OpenTrade>(); Business.Market.CommandExecutor.Add(newOpenTradeExe); #endregion #region ADD COMMAND TO SYMBOL LIST resultOpenTrade.Symbol.CommandList.Add(newOpenTradeSymbol); #endregion #region ADD COMMAND TO INVESTOR LIST resultOpenTrade.Investor.CommandList.Add(newOpenTradeInvestor); #endregion string msg = string.Empty; #region Map Command Server To Client if (resultOpenTrade.IsServer) { #region BUILD COMMAND SEND TO CLIENT StringBuilder Message = new StringBuilder(); Message.Append("AddCommandByManager$True,Add New Command Complete,"); Message.Append(resultOpenTrade.RefCommandID); Message.Append(","); Message.Append(resultOpenTrade.Investor.InvestorID); Message.Append(","); Message.Append(resultOpenTrade.Symbol.Name); Message.Append(","); Message.Append(resultOpenTrade.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(resultOpenTrade.OpenTime); Message.Append(","); Message.Append(resultOpenTrade.OpenPrice); Message.Append(","); Message.Append(resultOpenTrade.StopLoss); Message.Append(","); Message.Append(resultOpenTrade.TakeProfit); Message.Append(","); Message.Append(resultOpenTrade.ClosePrice); Message.Append(","); Message.Append(resultOpenTrade.Commission); Message.Append(","); Message.Append(resultOpenTrade.Swap); Message.Append(","); Message.Append(resultOpenTrade.Profit); Message.Append(","); Message.Append(resultOpenTrade.Comment); Message.Append(","); Message.Append(resultOpenTrade.ID); Message.Append(","); Message.Append(commandType); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(resultOpenTrade.ExpTime); Message.Append(","); Message.Append(resultOpenTrade.ClientCode); Message.Append(","); Message.Append(commandCode); Message.Append(","); Message.Append(resultOpenTrade.IsHedged); Message.Append(","); Message.Append(resultOpenTrade.Type.ID); Message.Append(","); Message.Append(resultOpenTrade.Margin); Message.Append(",Open"); if (resultOpenTrade.Investor.ClientCommandQueue == null) resultOpenTrade.Investor.ClientCommandQueue = new List<string>(); resultOpenTrade.Investor.ClientCommandQueue.Add(Message.ToString()); msg = Message.ToString(); #endregion } else { #region BUILD COMMAND SEND TO CLIENT StringBuilder Message = new StringBuilder(); Message.Append("AddCommand$True,Add New Command Complete,"); Message.Append(resultOpenTrade.RefCommandID); Message.Append(","); Message.Append(resultOpenTrade.Investor.InvestorID); Message.Append(","); Message.Append(resultOpenTrade.Symbol.Name); Message.Append(","); Message.Append(resultOpenTrade.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(resultOpenTrade.OpenTime); Message.Append(","); Message.Append(resultOpenTrade.OpenPrice); Message.Append(","); Message.Append(resultOpenTrade.StopLoss); Message.Append(","); Message.Append(resultOpenTrade.TakeProfit); Message.Append(","); Message.Append(resultOpenTrade.ClosePrice); Message.Append(","); Message.Append(resultOpenTrade.Commission); Message.Append(","); Message.Append(resultOpenTrade.Swap); Message.Append(","); Message.Append(resultOpenTrade.Profit); Message.Append(","); Message.Append(resultOpenTrade.Comment); Message.Append(","); Message.Append(resultOpenTrade.ID); Message.Append(","); Message.Append(commandType); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(resultOpenTrade.ExpTime); Message.Append(","); Message.Append(resultOpenTrade.ClientCode); Message.Append(","); Message.Append(commandCode); Message.Append(","); Message.Append(resultOpenTrade.IsHedged); Message.Append(","); Message.Append(resultOpenTrade.Type.ID); Message.Append(","); Message.Append(resultOpenTrade.Margin); Message.Append(",Open"); if (resultOpenTrade.Investor.ClientCommandQueue == null) resultOpenTrade.Investor.ClientCommandQueue = new List<string>(); resultOpenTrade.Investor.ClientCommandQueue.Add(Message.ToString()); msg = Message.ToString(); #endregion } #endregion #region LOG MAKE COMMAND SUCCESS string mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(resultOpenTrade.Type.ID); string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.OpenPrice.ToString(), resultOpenTrade.Symbol.Digit); string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.TakeProfit.ToString(), resultOpenTrade.Symbol.Digit); string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.StopLoss.ToString(), resultOpenTrade.Symbol.Digit); string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.Symbol.TickValue.Bid.ToString(), resultOpenTrade.Symbol.Digit); string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.Symbol.TickValue.Ask.ToString(), resultOpenTrade.Symbol.Digit); string content = "'" + resultOpenTrade.Investor.Code + "': order #" + resultOpenTrade.RefCommandID + " " + mode + " " + size + " " + resultOpenTrade.Symbol.Name + " at " + openPrice + " commission: " + resultOpenTrade.Commission + " [Success]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, mode, resultOpenTrade.IpAddress, resultOpenTrade.Investor.Code); #endregion } else { TradingServer.Facade.FacadeAddNewSystemLog(6, result, "[MakeCommandNotify]", "", ""); } #endregion isExitst = true; break; } } if (!isExitst) { bool isExitsCommand = false; if (resultOpenTrade.Investor.CommandList != null) { int countCommand = resultOpenTrade.Investor.CommandList.Count; for (int n = 0; n < countCommand; n++) { if (resultOpenTrade.Investor.CommandList[n].CommandCode == resultOpenTrade.CommandCode) { isExitsCommand = true; break; } } } #region add command when make command from mt4 if (!isExitsCommand) { #region get mql commands (log ipaddress) if (Business.Market.marketInstance.MQLCommands != null) { int countMQL = Business.Market.marketInstance.MQLCommands.Count; for (int j = 0; j < countMQL; j++) { if (Business.Market.marketInstance.MQLCommands[j] != null) { if (Business.Market.marketInstance.MQLCommands[j].InvestorCode == resultOpenTrade.Investor.Code) { resultOpenTrade.IpAddress = Business.Market.marketInstance.MQLCommands[j].IpAddress; Business.Market.marketInstance.MQLCommands.Remove(Business.Market.marketInstance.MQLCommands[j]); break; } } } } #endregion #region process add new command if (resultOpenTrade.RefCommandID > 0) { bool IsBuy = Model.Helper.Instance.IsBuy(resultOpenTrade.Type.ID); commandType = Model.Helper.Instance.convertCommandTypeIDToString(resultOpenTrade.Type.ID); Business.OpenTrade newOpenTradeExe = new OpenTrade(); Business.OpenTrade newOpenTradeSymbol = new OpenTrade(); Business.OpenTrade newOpenTradeInvestor = new OpenTrade(); #region SET INSTANCE IGROUPSECURITY, SYMBOL, TYPE, INVESTOR //set igroupsecurity newOpenTradeExe.IGroupSecurity = resultOpenTrade.IGroupSecurity; newOpenTradeInvestor.IGroupSecurity = resultOpenTrade.IGroupSecurity; newOpenTradeSymbol.IGroupSecurity = resultOpenTrade.IGroupSecurity; //set symbol newOpenTradeExe.Symbol = resultOpenTrade.Symbol; newOpenTradeInvestor.Symbol = resultOpenTrade.Symbol; newOpenTradeSymbol.Symbol = resultOpenTrade.Symbol; //set type newOpenTradeExe.Type = resultOpenTrade.Type; newOpenTradeInvestor.Type = resultOpenTrade.Type; newOpenTradeSymbol.Type = resultOpenTrade.Type; //set investor newOpenTradeExe.Investor = resultOpenTrade.Investor; newOpenTradeInvestor.Investor = resultOpenTrade.Investor; newOpenTradeSymbol.Investor = resultOpenTrade.Investor; #endregion #region GET SPREAD DIFFIRENCE FOR COMMAND //GET SPREAD DIFFRENCE OF OPEN TRADE double spreadDifference = 0; if (resultOpenTrade.IGroupSecurity != null) { if (resultOpenTrade.IGroupSecurity.IGroupSecurityConfig != null) { int countIGroupSecurity = resultOpenTrade.IGroupSecurity.IGroupSecurityConfig.Count; for (int j = 0; j < countIGroupSecurity; j++) { if (resultOpenTrade.IGroupSecurity.IGroupSecurityConfig[j].Code == "B11") { double.TryParse(resultOpenTrade.IGroupSecurity.IGroupSecurityConfig[j].NumValue, out spreadDifference); break; } } } } newOpenTradeExe.SpreaDifferenceInOpenTrade = spreadDifference; newOpenTradeInvestor.SpreaDifferenceInOpenTrade = spreadDifference; newOpenTradeSymbol.SpreaDifferenceInOpenTrade = spreadDifference; #endregion double tempClosePrice = 0; if (IsBuy) tempClosePrice = resultOpenTrade.Symbol.TickValue.Bid; else tempClosePrice = resultOpenTrade.Symbol.TickValue.Ask; resultOpenTrade.ClosePrice = tempClosePrice; #region NEW INSTANCES FOR COMMAND EXECUTOR newOpenTradeExe.AgentCommission = 0; newOpenTradeExe.ClientCode = resultOpenTrade.ClientCode; newOpenTradeExe.CloseTime = resultOpenTrade.OpenTime; //newOpenTradeExe.CommandCode = resultOpenTrade.CommandCode; newOpenTradeExe.Comment = resultOpenTrade.Comment; newOpenTradeExe.Swap = resultOpenTrade.Swap; newOpenTradeExe.Commission = resultOpenTrade.Commission; newOpenTradeExe.ExpTime = resultOpenTrade.ExpTime; newOpenTradeExe.FreezeMargin = 0; //newOpenTradeExe.ID = listOnlineCommand[i].OnlineCommandID; newOpenTradeExe.IsClose = false; newOpenTradeExe.OpenPrice = resultOpenTrade.OpenPrice; newOpenTradeExe.OpenTime = resultOpenTrade.OpenTime; newOpenTradeExe.Profit = resultOpenTrade.Profit; newOpenTradeExe.Size = resultOpenTrade.Size; newOpenTradeExe.StopLoss = resultOpenTrade.StopLoss; newOpenTradeExe.Swap = resultOpenTrade.Swap; newOpenTradeExe.TakeProfit = resultOpenTrade.TakeProfit; newOpenTradeExe.Taxes = 0; newOpenTradeExe.TotalSwap = 0; newOpenTradeExe.RefCommandID = resultOpenTrade.RefCommandID; newOpenTradeExe.ClosePrice = tempClosePrice; #endregion #region NEW INSTANCE FOR SYMBOL LIST newOpenTradeSymbol.AgentCommission = 0; newOpenTradeSymbol.ClientCode = resultOpenTrade.ClientCode; newOpenTradeSymbol.CloseTime = resultOpenTrade.OpenTime; //newOpenTradeSymbol.CommandCode = listOnlineCommand[i].CommandCode; newOpenTradeSymbol.Comment = resultOpenTrade.Comment; newOpenTradeInvestor.Swap = resultOpenTrade.Swap; newOpenTradeSymbol.Commission = resultOpenTrade.Commission; newOpenTradeSymbol.ExpTime = resultOpenTrade.ExpTime; newOpenTradeSymbol.FreezeMargin = 0; //newOpenTradeSymbol.ID = listOnlineCommand[i].OnlineCommandID; newOpenTradeSymbol.IsClose = true; newOpenTradeSymbol.OpenPrice = resultOpenTrade.OpenPrice; newOpenTradeSymbol.OpenTime = resultOpenTrade.OpenTime; newOpenTradeSymbol.Profit = resultOpenTrade.Profit; newOpenTradeSymbol.Size = resultOpenTrade.Size; newOpenTradeSymbol.StopLoss = resultOpenTrade.StopLoss; newOpenTradeSymbol.Swap = resultOpenTrade.Swap; newOpenTradeSymbol.TakeProfit = resultOpenTrade.TakeProfit; newOpenTradeSymbol.Taxes = 0; newOpenTradeSymbol.TotalSwap = 0; newOpenTradeSymbol.InsExe = newOpenTradeExe; newOpenTradeSymbol.RefCommandID = resultOpenTrade.RefCommandID; newOpenTradeSymbol.ClosePrice = tempClosePrice; #endregion #region NEW INSTANCE FOR INVESTOR LIST newOpenTradeInvestor.AgentCommission = 0; newOpenTradeInvestor.ClientCode = resultOpenTrade.ClientCode; newOpenTradeInvestor.CloseTime = resultOpenTrade.OpenTime; //newOpenTradeInvestor.CommandCode = listOnlineCommand[i].CommandCode; newOpenTradeInvestor.Comment = resultOpenTrade.Comment; newOpenTradeInvestor.Commission = resultOpenTrade.Commission; newOpenTradeInvestor.Swap = resultOpenTrade.Swap; newOpenTradeInvestor.ExpTime = resultOpenTrade.ExpTime; newOpenTradeInvestor.FreezeMargin = 0; //newOpenTradeInvestor.ID = listOnlineCommand[i].OnlineCommandID; newOpenTradeInvestor.IsClose = false; newOpenTradeInvestor.OpenPrice = resultOpenTrade.OpenPrice; newOpenTradeInvestor.OpenTime = resultOpenTrade.OpenTime; newOpenTradeInvestor.Profit = resultOpenTrade.Profit; newOpenTradeInvestor.Size = resultOpenTrade.Size; newOpenTradeInvestor.StopLoss = resultOpenTrade.StopLoss; newOpenTradeInvestor.Swap = resultOpenTrade.Swap; newOpenTradeInvestor.TakeProfit = resultOpenTrade.TakeProfit; newOpenTradeInvestor.Taxes = 0; newOpenTradeInvestor.TotalSwap = 0; newOpenTradeInvestor.InsExe = newOpenTradeExe; newOpenTradeInvestor.RefCommandID = resultOpenTrade.RefCommandID; newOpenTradeInvestor.ClosePrice = tempClosePrice; #endregion #region BUILD CLIENT CODE string clientCode = string.Empty; clientCode = resultOpenTrade.Investor.Code + "_" + DateTime.Now.Ticks; #endregion newOpenTradeExe.ClientCode = clientCode; newOpenTradeInvestor.ClientCode = clientCode; newOpenTradeSymbol.ClientCode = clientCode; newOpenTradeExe.CommandCode = resultOpenTrade.CommandCode; newOpenTradeInvestor.CommandCode = resultOpenTrade.CommandCode; newOpenTradeSymbol.CommandCode = resultOpenTrade.CommandCode; string commandCode = string.Empty; //set id and command code newOpenTradeExe.ID = resultOpenTrade.RefCommandID; newOpenTradeInvestor.ID = resultOpenTrade.RefCommandID; newOpenTradeSymbol.ID = resultOpenTrade.RefCommandID; commandCode = resultOpenTrade.CommandCode; //====================================== #region ADD COMMAND TO COMMAND EXECUTOR if (Business.Market.CommandExecutor == null) Business.Market.CommandExecutor = new List<Business.OpenTrade>(); Business.Market.CommandExecutor.Add(newOpenTradeExe); #endregion #region ADD COMMAND TO SYMBOL LIST resultOpenTrade.Symbol.CommandList.Add(newOpenTradeSymbol); #endregion #region ADD COMMAND TO INVESTOR LIST resultOpenTrade.Investor.CommandList.Add(newOpenTradeInvestor); #endregion string msg = string.Empty; #region Map Command Server To Client if (resultOpenTrade.IsServer) { #region BUILD COMMAND SEND TO CLIENT StringBuilder Message = new StringBuilder(); Message.Append("AddCommandByManager$True,Add New Command Complete,"); Message.Append(resultOpenTrade.RefCommandID); Message.Append(","); Message.Append(resultOpenTrade.Investor.InvestorID); Message.Append(","); Message.Append(resultOpenTrade.Symbol.Name); Message.Append(","); Message.Append(resultOpenTrade.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(resultOpenTrade.OpenTime); Message.Append(","); Message.Append(resultOpenTrade.OpenPrice); Message.Append(","); Message.Append(resultOpenTrade.StopLoss); Message.Append(","); Message.Append(resultOpenTrade.TakeProfit); Message.Append(","); Message.Append(resultOpenTrade.ClosePrice); Message.Append(","); Message.Append(resultOpenTrade.Commission); Message.Append(","); Message.Append(resultOpenTrade.Swap); Message.Append(","); Message.Append(resultOpenTrade.Profit); Message.Append(","); Message.Append(resultOpenTrade.Comment); Message.Append(","); Message.Append(resultOpenTrade.ID); Message.Append(","); Message.Append(commandType); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(resultOpenTrade.ExpTime); Message.Append(","); Message.Append(resultOpenTrade.ClientCode); Message.Append(","); Message.Append(commandCode); Message.Append(","); Message.Append(resultOpenTrade.IsHedged); Message.Append(","); Message.Append(resultOpenTrade.Type.ID); Message.Append(","); Message.Append(resultOpenTrade.Margin); Message.Append(",Open"); if (resultOpenTrade.Investor.ClientCommandQueue == null) resultOpenTrade.Investor.ClientCommandQueue = new List<string>(); resultOpenTrade.Investor.ClientCommandQueue.Add(Message.ToString()); msg = Message.ToString(); #endregion } else { #region BUILD COMMAND SEND TO CLIENT StringBuilder Message = new StringBuilder(); Message.Append("AddCommand$True,Add New Command Complete,"); Message.Append(resultOpenTrade.RefCommandID); Message.Append(","); Message.Append(resultOpenTrade.Investor.InvestorID); Message.Append(","); Message.Append(resultOpenTrade.Symbol.Name); Message.Append(","); Message.Append(resultOpenTrade.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(resultOpenTrade.OpenTime); Message.Append(","); Message.Append(resultOpenTrade.OpenPrice); Message.Append(","); Message.Append(resultOpenTrade.StopLoss); Message.Append(","); Message.Append(resultOpenTrade.TakeProfit); Message.Append(","); Message.Append(resultOpenTrade.ClosePrice); Message.Append(","); Message.Append(resultOpenTrade.Commission); Message.Append(","); Message.Append(resultOpenTrade.Swap); Message.Append(","); Message.Append(resultOpenTrade.Profit); Message.Append(","); Message.Append(resultOpenTrade.Comment); Message.Append(","); Message.Append(resultOpenTrade.ID); Message.Append(","); Message.Append(commandType); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(resultOpenTrade.ExpTime); Message.Append(","); Message.Append(resultOpenTrade.ClientCode); Message.Append(","); Message.Append(commandCode); Message.Append(","); Message.Append(resultOpenTrade.IsHedged); Message.Append(","); Message.Append(resultOpenTrade.Type.ID); Message.Append(","); Message.Append(resultOpenTrade.Margin); Message.Append(",Open"); if (resultOpenTrade.Investor.ClientCommandQueue == null) resultOpenTrade.Investor.ClientCommandQueue = new List<string>(); resultOpenTrade.Investor.ClientCommandQueue.Add(Message.ToString()); msg = Message.ToString(); #endregion } #endregion #region LOG MAKE COMMAND SUCCESS string mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(resultOpenTrade.Type.ID); string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.OpenPrice.ToString(), resultOpenTrade.Symbol.Digit); string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.TakeProfit.ToString(), resultOpenTrade.Symbol.Digit); string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.StopLoss.ToString(), resultOpenTrade.Symbol.Digit); string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.Symbol.TickValue.Bid.ToString(), resultOpenTrade.Symbol.Digit); string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(resultOpenTrade.Symbol.TickValue.Ask.ToString(), resultOpenTrade.Symbol.Digit); string content = "'" + resultOpenTrade.Investor.Code + "': order #" + resultOpenTrade.RefCommandID + " " + mode + " " + size + " " + resultOpenTrade.Symbol.Name + " at " + openPrice + " commission: " + resultOpenTrade.Commission + " [Success]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, mode, resultOpenTrade.IpAddress, resultOpenTrade.Investor.Code); #endregion } else { TradingServer.Facade.FacadeAddNewSystemLog(6, result, "[MakeCommandNotify]", "", ""); } #endregion } #endregion } } } #endregion } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } break; #endregion #region NOTIFY CLOSE COMMAND case "NotifyCloseCommand": { try { string[] subParameter = subValue[1].Split('{'); TradingServer.Facade.FacadeAddNewSystemLog(6, result, "[NotifyCloseCommand]", "", subParameter[4]); Business.OpenTrade resultNotify = Business.Market.MapNotifyCloseCommand(subCommand[i]); Business.OpenTrade Command = TradingServer.Facade.FacadeFindOpenTradeInSymbolListByRefID(resultNotify.RefCommandID); if (Command.Investor == null || Command.Symbol == null || Command.Type == null) { continue; } #region comment code if (Business.Market.NJ4XTickets != null) { lock (Business.Market.nj4xObject) { bool isExits = false; int countNJ4X = Business.Market.NJ4XTickets.Count; for (int m = 0; m < countNJ4X; m++) { if (Business.Market.NJ4XTickets[m].Code == Command.CommandCode) { lock (Business.Market.nj4xObject) Business.Market.NJ4XTickets.RemoveAt(m); if (Command.ID > 0) { Command.ClosePrice = resultNotify.ClosePrice; Command.Size = resultNotify.Size; Command.Profit = resultNotify.Profit; Command.Swap = resultNotify.Swap; Command.Commission = resultNotify.Commission; Command.CloseTime = resultNotify.CloseTime; Command.IsClose = true; //Command.Investor.UpdateCommand(Command); List<Business.OpenTrade> commands = Command.Investor.CommandList; bool IsBuy = Model.Helper.Instance.IsBuy(Command.Type.ID); #region For Command List for (int j = 0; j < commands.Count; j++) { if (commands[j].ID == Command.ID) { int commandId = Command.ID; //NEW SOLUTION ADD COMMAND TO REMOVE LIST Business.OpenRemove newOpenRemove = new OpenRemove(); newOpenRemove.InvestorID = Command.Investor.InvestorID; newOpenRemove.OpenTradeID = commandId; newOpenRemove.SymbolName = commands[j].Symbol.Name; newOpenRemove.IsExecutor = true; newOpenRemove.IsSymbol = true; newOpenRemove.IsInvestor = false; Business.Market.AddCommandToRemoveList(newOpenRemove); //Close Command Complete Add Message To Client if (Command.Investor.ClientCommandQueue == null) Command.Investor.ClientCommandQueue = new List<string>(); #region Map Command Server To Client if (Command.IsServer) { string Message = "CloseCommandByManager$True,Close Command Complete," + Command.ID + "," + Command.Investor.InvestorID + "," + Command.Symbol.Name + "," + Command.Size + "," + IsBuy + "," + Command.OpenTime + "," + Command.OpenPrice + "," + Command.StopLoss + "," + Command.TakeProfit + "," + Command.ClosePrice + "," + Command.Commission + "," + Command.Swap + "," + Command.Profit + "," + "Comment," + Command.ID + "," + Command.Type.Name + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + Command.CommandCode + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Close," + Command.CloseTime; Command.Investor.ClientCommandQueue.Add(Message); TradingServer.Facade.FacadeAddNewSystemLog(5, Message, " ", Command.IpAddress, Command.Investor.Code); } else { string Message = "CloseCommand$True,Close Command Complete," + Command.ID + "," + Command.Investor.InvestorID + "," + Command.Symbol.Name + "," + Command.Size + "," + IsBuy + "," + Command.OpenTime + "," + Command.OpenPrice + "," + Command.StopLoss + "," + Command.TakeProfit + "," + Command.ClosePrice + "," + Command.Commission + "," + Command.Swap + "," + Command.Profit + "," + "Comment," + Command.ID + "," + Command.Type.Name + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + Command.CommandCode + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Close," + Command.CloseTime; commands[j].Investor.ClientCommandQueue.Add(Message); TradingServer.Facade.FacadeAddNewSystemLog(5, Message, " ", Command.IpAddress, Command.Investor.Code); } #endregion if (Business.Market.marketInstance.MQLCommands != null) { int countMQL = Business.Market.marketInstance.MQLCommands.Count; for (int n = 0; n < countMQL; n++) { if (Business.Market.marketInstance.MQLCommands[n].InvestorCode == Command.Investor.Code) { Command.IpAddress = Business.Market.marketInstance.MQLCommands[n].IpAddress; Business.Market.marketInstance.MQLCommands.Remove(Business.Market.marketInstance.MQLCommands[n]); break; } } } #region INSERT SYSTEM LOG EVENT CLOSE SPOT COMMAND ORDER string mode = "sell"; if (commands[j].Type.ID == 1) mode = "buy"; string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.OpenPrice.ToString(), commands[j].Symbol.Digit); string strClosePrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.ClosePrice.ToString(), commands[j].Symbol.Digit); string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.StopLoss.ToString(), commands[j].Symbol.Digit); string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.TakeProfit.ToString(), commands[j].Symbol.Digit); string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Symbol.TickValue.Bid.ToString(), commands[j].Symbol.Digit); string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Symbol.TickValue.Ask.ToString(), commands[j].Symbol.Digit); string contentServer = "'" + commands[j].Investor.Code + "': close order #" + Command.CommandCode + " (" + mode + " " + size + " " + Command.Symbol.Name + " at " + openPrice + ") at " + strClosePrice + " completed"; TradingServer.Facade.FacadeAddNewSystemLog(5, contentServer, " ", Command.IpAddress, Command.Investor.Code); #endregion lock (Business.Market.syncObject) { bool deleteCommandInvestor = commands.Remove(commands[j]); } #region COMMAND CLOSE int commandRefID = commands[i].ID; bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(Command.Type.ID); #endregion break; } } #endregion } else { //insert system log TradingServer.Facade.FacadeAddNewSystemLog(6, result, "[NotifyCloseCommandFalse]", "", ""); } isExits = true; break; } } if (!isExits) { bool isExitsCommand = false; if (Command.Investor.CommandList != null) { int countCommand = Command.Investor.CommandList.Count; for (int n = 0; n < countCommand; n++) { if (Command.Investor.CommandList[n].CommandCode == Command.CommandCode) { isExitsCommand = true; break; } } } #region remove command when close if (isExitsCommand) { if (Command.ID > 0) { Command.ClosePrice = resultNotify.ClosePrice; Command.Size = resultNotify.Size; Command.Profit = resultNotify.Profit; Command.Swap = resultNotify.Swap; Command.Commission = resultNotify.Commission; Command.CloseTime = resultNotify.CloseTime; Command.IsClose = true; //Command.Investor.UpdateCommand(Command); List<Business.OpenTrade> commands = Command.Investor.CommandList; bool IsBuy = Model.Helper.Instance.IsBuy(Command.Type.ID); #region For Command List for (int j = 0; j < commands.Count; j++) { if (commands[j].ID == Command.ID) { int commandId = Command.ID; //NEW SOLUTION ADD COMMAND TO REMOVE LIST Business.OpenRemove newOpenRemove = new OpenRemove(); newOpenRemove.InvestorID = Command.Investor.InvestorID; newOpenRemove.OpenTradeID = commandId; newOpenRemove.SymbolName = commands[j].Symbol.Name; newOpenRemove.IsExecutor = true; newOpenRemove.IsSymbol = true; newOpenRemove.IsInvestor = false; Business.Market.AddCommandToRemoveList(newOpenRemove); //Close Command Complete Add Message To Client if (Command.Investor.ClientCommandQueue == null) Command.Investor.ClientCommandQueue = new List<string>(); #region Map Command Server To Client if (Command.IsServer) { string Message = "CloseCommandByManager$True,Close Command Complete," + Command.ID + "," + Command.Investor.InvestorID + "," + Command.Symbol.Name + "," + Command.Size + "," + IsBuy + "," + Command.OpenTime + "," + Command.OpenPrice + "," + Command.StopLoss + "," + Command.TakeProfit + "," + Command.ClosePrice + "," + Command.Commission + "," + Command.Swap + "," + Command.Profit + "," + "Comment," + Command.ID + "," + Command.Type.Name + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + Command.CommandCode + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Close," + Command.CloseTime; Command.Investor.ClientCommandQueue.Add(Message); TradingServer.Facade.FacadeAddNewSystemLog(5, Message, " ", Command.IpAddress, Command.Investor.Code); } else { string Message = "CloseCommand$True,Close Command Complete," + Command.ID + "," + Command.Investor.InvestorID + "," + Command.Symbol.Name + "," + Command.Size + "," + IsBuy + "," + Command.OpenTime + "," + Command.OpenPrice + "," + Command.StopLoss + "," + Command.TakeProfit + "," + Command.ClosePrice + "," + Command.Commission + "," + Command.Swap + "," + Command.Profit + "," + "Comment," + Command.ID + "," + Command.Type.Name + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + Command.CommandCode + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Close," + Command.CloseTime; commands[j].Investor.ClientCommandQueue.Add(Message); TradingServer.Facade.FacadeAddNewSystemLog(5, Message, " ", Command.IpAddress, Command.Investor.Code); } #endregion if (Business.Market.marketInstance.MQLCommands != null) { int countMQL = Business.Market.marketInstance.MQLCommands.Count; for (int n = 0; n < countMQL; n++) { if (Business.Market.marketInstance.MQLCommands[n].InvestorCode == Command.Investor.Code) { Command.IpAddress = Business.Market.marketInstance.MQLCommands[n].IpAddress; Business.Market.marketInstance.MQLCommands.Remove(Business.Market.marketInstance.MQLCommands[n]); break; } } } #region INSERT SYSTEM LOG EVENT CLOSE SPOT COMMAND ORDER string mode = "sell"; if (commands[j].Type.ID == 1) mode = "buy"; string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.OpenPrice.ToString(), commands[j].Symbol.Digit); string strClosePrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.ClosePrice.ToString(), commands[j].Symbol.Digit); string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.StopLoss.ToString(), commands[j].Symbol.Digit); string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.TakeProfit.ToString(), commands[j].Symbol.Digit); string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Symbol.TickValue.Bid.ToString(), commands[j].Symbol.Digit); string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Symbol.TickValue.Ask.ToString(), commands[j].Symbol.Digit); string contentServer = "'" + commands[j].Investor.Code + "': close order #" + Command.CommandCode + " (" + mode + " " + size + " " + Command.Symbol.Name + " at " + openPrice + ") at " + strClosePrice + " completed"; TradingServer.Facade.FacadeAddNewSystemLog(5, contentServer, " ", Command.IpAddress, Command.Investor.Code); #endregion lock (Business.Market.syncObject) { bool deleteCommandInvestor = commands.Remove(commands[j]); } #region COMMAND CLOSE int commandRefID = commands[i].ID; bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(Command.Type.ID); #endregion break; } } #endregion } else { //insert system log TradingServer.Facade.FacadeAddNewSystemLog(6, result, "[NotifyCloseCommandFalse]", "", ""); } } #endregion } } } #endregion } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } break; #endregion #region NOTIFY UPDATE ACCOUNT case "NotifyUpdateAccount": { try { Model.TradingCalculate.Instance.StreamManagerNotify(result + " (" + DateTime.Now + ")"); Business.Investor resultNotify = Business.Market.MapNotifyUpdateAccount(subCommand[i]); if (resultNotify.InvestorID <= 0) continue; //TradingServer.Model.TradingCalculate.Instance.StreamFile("[Receive Notify] - " + subCommand[i]); string message = "IAC04332451"; resultNotify.ClientCommandQueue.Add(message); } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } break; #endregion #region NOTIFY UPDATE INFO ACCOUNT case "NotifyInfoAccount": { try { Model.TradingCalculate.Instance.StreamManagerNotify(result + " (" + DateTime.Now + ")"); Business.Investor resultNotify = Business.Market.MapNotifyUpdateInfoAccount(subCommand[i]); if (resultNotify.InvestorID <= 0) continue; //TradingServer.Model.TradingCalculate.Instance.StreamFile("[Receive Notify] - " + subCommand[i]); string message = "IAC04332451"; resultNotify.ClientCommandQueue.Add(message); } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } break; #endregion #region NOTIFY DELETE COMMAND case "NotifyDeleteCommand": { try { Model.TradingCalculate.Instance.StreamManagerNotify(result + " (" + DateTime.Now + ")"); int resultNotify = Business.Market.MapNotifyDeleteCommand(subCommand[i]); if (resultNotify > 0) { Business.OpenTrade newOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInSymbolListByRefID(resultNotify); if (newOpenTrade.Investor == null || newOpenTrade.Symbol == null || newOpenTrade.Type == null) continue; //TradingServer.Model.TradingCalculate.Instance.StreamFile("[Receive Notify] - " + subCommand[i]); if (newOpenTrade.RefCommandID > 0) { List<Business.OpenTrade> commands = newOpenTrade.Investor.CommandList; bool IsBuy = Model.Helper.Instance.IsBuy(newOpenTrade.Type.ID); for (int j = 0; j < commands.Count; j++) { if (commands[j].ID == newOpenTrade.ID) { #region CLOSE PENDING ORDER //ADD PENDING ORDER TO DATABASE int addHistory = TradingServer.Facade.FacadeAddNewCommandHistory(newOpenTrade.Investor.InvestorID, newOpenTrade.Type.ID, newOpenTrade.CommandCode, newOpenTrade.OpenTime, newOpenTrade.OpenPrice, newOpenTrade.CloseTime, newOpenTrade.ClosePrice, 0, 0, 0, newOpenTrade.ExpTime, newOpenTrade.Size, newOpenTrade.StopLoss, newOpenTrade.TakeProfit, newOpenTrade.ClientCode, newOpenTrade.Symbol.SymbolID, newOpenTrade.Taxes, newOpenTrade.AgentCommission, newOpenTrade.Comment, "3", newOpenTrade.TotalSwap, newOpenTrade.RefCommandID, newOpenTrade.AgentRefConfig, newOpenTrade.IsActivePending, newOpenTrade.IsStopLossAndTakeProfit); //NEW SOLUTION ADD COMMAND TO REMOVE LIST Business.OpenRemove newOpenRemove = new OpenRemove(); newOpenRemove.InvestorID = commands[j].Investor.InvestorID; newOpenRemove.OpenTradeID = commands[j].ID; newOpenRemove.SymbolName = commands[j].Symbol.Name; newOpenRemove.IsExecutor = true; newOpenRemove.IsSymbol = true; newOpenRemove.IsInvestor = false; Business.Market.AddCommandToRemoveList(newOpenRemove); //Close Command Complete Add Message To Client if (newOpenTrade.Investor.ClientCommandQueue == null) newOpenTrade.Investor.ClientCommandQueue = new List<string>(); #endregion #region MAP STRING SEND TO CLIENT string Message = string.Empty; if (newOpenTrade.IsServer) { Message = "CloseCommandByManager$True,Close Command Complete," + newOpenTrade.ID + "," + newOpenTrade.Investor.InvestorID + "," + newOpenTrade.Symbol.Name + "," + newOpenTrade.Size + "," + IsBuy + "," + newOpenTrade.OpenTime + "," + newOpenTrade.OpenPrice + "," + newOpenTrade.StopLoss + "," + newOpenTrade.TakeProfit + "," + newOpenTrade.ClosePrice + "," + newOpenTrade.Commission + "," + newOpenTrade.Swap + "," + newOpenTrade.Profit + "," + "Comment," + newOpenTrade.ID + "," + newOpenTrade.Type.Name + "," + 1 + "," + newOpenTrade.ExpTime + "," + newOpenTrade.ClientCode + "," + newOpenTrade.CommandCode + "," + newOpenTrade.IsHedged + "," + newOpenTrade.Type.ID + "," + newOpenTrade.Margin + ",Close," + newOpenTrade.CloseTime; } else { Message = "CloseCommand$True,Close Command Complete," + newOpenTrade.ID + "," + newOpenTrade.Investor.InvestorID + "," + newOpenTrade.Symbol.Name + "," + newOpenTrade.Size + "," + IsBuy + "," + newOpenTrade.OpenTime + "," + newOpenTrade.OpenPrice + "," + newOpenTrade.StopLoss + "," + newOpenTrade.TakeProfit + "," + newOpenTrade.ClosePrice + "," + newOpenTrade.Commission + "," + newOpenTrade.Swap + "," + newOpenTrade.Profit + "," + "Comment," + newOpenTrade.ID + "," + newOpenTrade.Type.Name + "," + 1 + "," + newOpenTrade.ExpTime + "," + newOpenTrade.ClientCode + "," + newOpenTrade.CommandCode + "," + newOpenTrade.IsHedged + "," + newOpenTrade.Type.ID + "," + newOpenTrade.Margin + ",Close," + newOpenTrade.CloseTime; } newOpenTrade.Investor.ClientCommandQueue.Add(Message); if (Business.Market.marketInstance.MQLCommands != null) { int countMQL = Business.Market.marketInstance.MQLCommands.Count; for (int n = 0; n < countMQL; n++) { if (Business.Market.marketInstance.MQLCommands[n].InvestorCode == newOpenTrade.Investor.Code) { newOpenTrade.IpAddress = Business.Market.marketInstance.MQLCommands[n].IpAddress; Business.Market.marketInstance.MQLCommands.Remove(Business.Market.marketInstance.MQLCommands[n]); break; } } } #region INSERT SYSTEM LOG EVENT CLOSE SPOT COMMAND ORDER string mode = "sell"; if (commands[i].Type.ID == 1) mode = "buy"; string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.OpenPrice.ToString(), commands[j].Symbol.Digit); string strClosePrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.ClosePrice.ToString(), commands[j].Symbol.Digit); string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.StopLoss.ToString(), commands[j].Symbol.Digit); string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.TakeProfit.ToString(), commands[j].Symbol.Digit); string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Symbol.TickValue.Bid.ToString(), commands[j].Symbol.Digit); string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Symbol.TickValue.Ask.ToString(), commands[j].Symbol.Digit); string contentServer = "'" + commands[j].Investor.Code + "': close order #" + newOpenTrade.CommandCode + " (" + mode + " " + size + " " + newOpenTrade.Symbol.Name + " at " + openPrice + ") at " + strClosePrice + " completed"; TradingServer.Facade.FacadeAddNewSystemLog(5, contentServer, " ", newOpenTrade.IpAddress, newOpenTrade.Investor.Code); #endregion lock (Business.Market.syncObject) { bool deleteCommandInvestor = commands.Remove(commands[j]); } #endregion break; } } //bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(newOpenTrade.Type.ID); //if (isPending) //{ // newOpenTrade.IsClose = true; // newOpenTrade.Investor.UpdateCommand(newOpenTrade); //} //else //{ // TradingServer.Facade.FacadeDeleteOpenTradeByManagerWithRefID(newOpenTrade.RefCommandID); //} } } } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } break; #endregion #region NOTIFY UPDATE COMMAND case "NotifyUpdateCommand": { try { Model.TradingCalculate.Instance.StreamManagerNotify(result + " (" + DateTime.Now + ")"); Business.OpenTrade resultNotify = Business.Market.MapNotifyUpdateCommand(subCommand[i]); resultNotify.ID = resultNotify.RefCommandID; if (resultNotify.Investor == null || resultNotify.Symbol == null || resultNotify.Type == null) continue; double profit = 0; #region UPDATE ONLINE COMMAND IN INVESTOR LIST if (resultNotify.Investor.CommandList != null) { int countCommand = resultNotify.Investor.CommandList.Count; for (int k = 0; k < countCommand; k++) { if (resultNotify.Investor.CommandList[k].ID == resultNotify.RefCommandID) { Business.OpenTrade temp = resultNotify.Investor.CommandList[k]; if (Business.Market.marketInstance.MQLCommands != null) { int countMQL = Business.Market.marketInstance.MQLCommands.Count; for (int j = 0; j < countMQL; j++) { if (Business.Market.marketInstance.MQLCommands[j].InvestorCode == temp.Investor.Code) { temp.IpAddress = Business.Market.marketInstance.MQLCommands[j].IpAddress; Business.Market.marketInstance.MQLCommands.Remove(Business.Market.marketInstance.MQLCommands[j]); break; } } } bool isManager = false; if (temp.OpenPrice != resultNotify.OpenPrice || temp.Size != resultNotify.Size) isManager = true; //SET NEW VALUE FOR ONLINE COMMAND CURRENT temp.Commission = resultNotify.Commission; temp.ExpTime = resultNotify.ExpTime; temp.OpenPrice = resultNotify.OpenPrice; temp.OpenTime = resultNotify.OpenTime; temp.StopLoss = resultNotify.StopLoss; temp.Swap = resultNotify.Swap; temp.TakeProfit = resultNotify.TakeProfit; temp.Comment = resultNotify.Comment; temp.Size = resultNotify.Size; temp.Profit = profit; //Update Command In Command Execute temp.InsExe.Commission = resultNotify.Commission; temp.InsExe.ExpTime = resultNotify.ExpTime; temp.InsExe.OpenPrice = resultNotify.OpenPrice; temp.InsExe.OpenTime = resultNotify.OpenTime; temp.InsExe.StopLoss = resultNotify.StopLoss; temp.InsExe.Swap = resultNotify.Swap; temp.InsExe.TakeProfit = resultNotify.TakeProfit; temp.InsExe.Comment = resultNotify.Comment; temp.InsExe.Size = resultNotify.Size; temp.InsExe.Profit = profit; bool IsBuy = false; if (temp.Type.ID == 1 || temp.Type.ID == 7 || temp.Type.ID == 9 || temp.Type.ID == 11) IsBuy = true; #region MAP COMMAND TO CLIENT #region BUILD COMMAND SEND TO CLIENT StringBuilder Message = new StringBuilder(); Message.Append("UpdateCommand$True,UPDATE COMMAND BY MANAGER COMPLETE,"); Message.Append(temp.ID); Message.Append(","); Message.Append(temp.Investor.InvestorID); Message.Append(","); Message.Append(temp.Symbol.Name); Message.Append(","); Message.Append(temp.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(temp.OpenTime); Message.Append(","); Message.Append(temp.OpenPrice); Message.Append(","); Message.Append(temp.StopLoss); Message.Append(","); Message.Append(temp.TakeProfit); Message.Append(","); Message.Append(temp.ClosePrice); Message.Append(","); Message.Append(temp.Commission); Message.Append(","); Message.Append(temp.Swap); Message.Append(","); Message.Append(temp.Profit); Message.Append(","); Message.Append(temp.Comment); Message.Append(","); Message.Append(temp.ID); Message.Append(","); Message.Append(temp.Type.Name); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(temp.ExpTime); Message.Append(","); Message.Append(temp.ClientCode); Message.Append(","); Message.Append(temp.CommandCode); Message.Append(","); Message.Append(temp.IsHedged); Message.Append(","); Message.Append(temp.Type.ID); Message.Append(","); Message.Append(temp.Margin); Message.Append(",Update"); if (temp.Investor.ClientCommandQueue == null) temp.Investor.ClientCommandQueue = new List<string>(); temp.Investor.ClientCommandQueue.Add(Message.ToString()); #endregion #region insert system log string content = string.Empty; string comment = "[modify order]"; string mode = TradingServer.Facade.FacadeGetTypeNameByTypeID(temp.Type.ID).ToLower(); string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(temp.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(temp.OpenPrice.ToString(), temp.Symbol.Digit); string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(temp.StopLoss.ToString(), temp.Symbol.Digit); string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(temp.TakeProfit.ToString(), temp.Symbol.Digit); string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(temp.Symbol.TickValue.Bid.ToString(), temp.Symbol.Digit); string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(temp.Symbol.TickValue.Ask.ToString(), temp.Symbol.Digit); string Content = string.Empty; Content = "'" + temp.Investor.Code + "': modified #" + temp.CommandCode + " " + mode + " " + size + " " + temp.Symbol.Name + " at " + openPrice + " sl: " + stopLoss + " tp: " + takeProfit + " (" + bid + "/" + ask + ") - [Success]"; TradingServer.Facade.FacadeAddNewSystemLog(5, Content, comment, temp.IpAddress, temp.Investor.Code); #endregion //if (!isManager) //{ //} //else //{ // #region BUILD COMMAND SEND TO CLIENT // StringBuilder Message = new StringBuilder(); // Message.Append("UpdateCommandByManager$True,UPDATE COMMAND BY MANAGER COMPLETE,"); // Message.Append(temp.ID); // Message.Append(","); // Message.Append(temp.Investor.InvestorID); // Message.Append(","); // Message.Append(temp.Symbol.Name); // Message.Append(","); // Message.Append(temp.Size); // Message.Append(","); // Message.Append(IsBuy); // Message.Append(","); // Message.Append(temp.OpenTime); // Message.Append(","); // Message.Append(temp.OpenPrice); // Message.Append(","); // Message.Append(temp.StopLoss); // Message.Append(","); // Message.Append(temp.TakeProfit); // Message.Append(","); // Message.Append(temp.ClosePrice); // Message.Append(","); // Message.Append(temp.Commission); // Message.Append(","); // Message.Append(temp.Swap); // Message.Append(","); // Message.Append(temp.Profit); // Message.Append(","); // Message.Append(temp.Comment); // Message.Append(","); // Message.Append(temp.ID); // Message.Append(","); // Message.Append(temp.Type.Name); // Message.Append(","); // Message.Append(1); // Message.Append(","); // Message.Append(temp.ExpTime); // Message.Append(","); // Message.Append(temp.ClientCode); // Message.Append(","); // Message.Append(temp.CommandCode); // Message.Append(","); // Message.Append(temp.IsHedged); // Message.Append(","); // Message.Append(temp.Type.ID); // Message.Append(","); // Message.Append(temp.Margin); // Message.Append(",Update"); // if (temp.Investor.ClientCommandQueue == null) // temp.Investor.ClientCommandQueue = new List<string>(); // temp.Investor.ClientCommandQueue.Add(Message.ToString()); // #endregion //} #endregion break; } } } #endregion #region UPDATE ONLINE COMMAND IN SYMBOL LIST if (resultNotify.Symbol.CommandList != null) { int countCommand = resultNotify.Symbol.CommandList.Count; for (int k = 0; k < countCommand; k++) { if (resultNotify.Symbol.CommandList[k].ID == resultNotify.RefCommandID) { if (resultNotify.Symbol.CommandList[k].Type.ID == resultNotify.Type.ID) { //SET NEW VALUE FOR ONLINE COMMAND CURRENT resultNotify.Symbol.CommandList[k].Commission = resultNotify.Commission; resultNotify.Symbol.CommandList[k].ExpTime = resultNotify.ExpTime; resultNotify.Symbol.CommandList[k].OpenPrice = resultNotify.OpenPrice; resultNotify.Symbol.CommandList[k].OpenTime = resultNotify.OpenTime; resultNotify.Symbol.CommandList[k].StopLoss = resultNotify.StopLoss; resultNotify.Symbol.CommandList[k].Swap = resultNotify.Swap; resultNotify.Symbol.CommandList[k].TakeProfit = resultNotify.TakeProfit; resultNotify.Symbol.CommandList[k].Comment = resultNotify.Comment; resultNotify.Symbol.CommandList[k].Size = resultNotify.Size; //Business.Market.SymbolList[i].CommandList[j].Profit = profit; } else { resultNotify.Symbol.CommandList[k].Type = resultNotify.Type; resultNotify.Symbol.CommandList[k].IsClose = false; resultNotify.Symbol.CommandList[k].Investor.UpdateCommand(resultNotify); } break; } } } #endregion } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } break; #endregion #region NOTIFY CONNECT MT4 case "NotifyConnectMT4": { try { Business.Market.StatusConnect = true; } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } break; #endregion #region NOTIFY DISCONNECT MT4 case "NotifyDisconnectMT4": { try { Model.TradingCalculate.Instance.StreamManagerNotify(result + " (" + DateTime.Now + ")"); Business.Market.StatusConnect = false; if (Business.Market.InvestorOnline != null) { int countInvestor = Business.Market.InvestorOnline.Count; for (int j = 0; j < countInvestor; j++) { if (Business.Market.InvestorOnline[j].IsOnline) { string message = "OLOFF14790251"; Business.Market.InvestorOnline[j].ClientCommandQueue.Add(message); } Business.Market.InvestorOnline[j].IsFirstLogin = true; } } } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } break; #endregion #region NOTIFY INFO CLIENT SEND REQUEST //NotifyInfoClientSendRequest$status{idSession{timeRequest{managerCode{clientCode{group{priceBid{ //priceAsk{tradeType{commandID{reserved{commandCode{symbol{volume{price{stoploss{takeprofit{ie_deviation{expiration //"NotifyInfoClientSendRequest$1{353{03/08/1996 22:01:00{0{91122838{test-vietnam{1.3669{1.3672{@{1{{0{EURUSD{100{1.3669{0{0{0{01/01/1970 02:00:00¬" case "NotifyInfoClientSendRequest": { string[] subParameter = subValue[1].Split('{'); TradingServer.Facade.FacadeAddNewSystemLog(6, result, "[NotifyInfoClientSendRequest]", subParameter[8], subParameter[4]); if (subParameter[0] == "3") { try { if (subParameter[8] == "@") break; double bid = double.Parse(subParameter[6]); double ask = double.Parse(subParameter[7]); bool isFlag = false; if (bid > 0 && ask > 0) { if (Business.Market.NJ4XTickets != null) { //int countTicket = Business.Market.NJ4XTickets.Count; for (int j = 0; j < Business.Market.NJ4XTickets.Count; j++) { if (Business.Market.NJ4XTickets[j].IsClose) { NJ4XConnectSocket.NJ4XTicket temp; temp = Business.Market.NJ4XTickets[j]; #region NOTIFY CLOSE if (temp.Code.Trim() == subParameter[4].Trim() && temp.IsDisable == false && temp.IsReQuote == false) { if (temp.Execution == EnumMT4.Execution.REQUEST) { bool IsBuy = false; if (temp.Command.Type.ID == 1 || temp.Command.Type.ID == 7 || temp.Command.Type.ID == 9) IsBuy = true; #region CLOSE COMMAND WITH MODE REQUEST temp.Ask = double.Parse(subParameter[7]); temp.Bid = double.Parse(subParameter[6]); temp.IsRequest = true; temp.IsDisable = true; temp.IsReQuote = true; if (temp.Command.Type.ID == 1) temp.Command.ClosePrice = temp.Bid; else temp.Command.ClosePrice = temp.Ask; StringBuilder Message = new StringBuilder(); Message.Append("CloseCommand$False,RD28,"); Message.Append(temp.Command.ID); Message.Append(","); Message.Append(temp.Command.Investor.InvestorID); Message.Append(","); Message.Append(temp.Command.Symbol.Name); Message.Append(","); Message.Append(temp.Command.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(temp.Command.OpenTime); Message.Append(","); Message.Append(temp.Command.OpenPrice); Message.Append(","); Message.Append(temp.Command.StopLoss); Message.Append(","); Message.Append(temp.Command.TakeProfit); Message.Append(","); Message.Append(temp.Command.ClosePrice); Message.Append(","); Message.Append(temp.Command.Commission); Message.Append(","); Message.Append(temp.Command.Swap); Message.Append(","); Message.Append(temp.Command.Profit); Message.Append(","); Message.Append("Comment,"); Message.Append(temp.Command.ID); Message.Append(","); Message.Append(temp.Command.Type.Name); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(temp.Command.ExpTime); Message.Append(","); Message.Append(temp.Command.ClientCode); Message.Append(","); Message.Append(temp.Command.CommandCode); Message.Append(","); Message.Append(temp.Command.IsHedged); Message.Append(","); Message.Append(temp.Command.Type.ID); Message.Append(","); Message.Append(temp.Command.Margin); Message.Append(",Close,"); Message.Append(temp.Command.CloseTime); Message.Append(","); Message.Append(temp.Bid); Message.Append(","); Message.Append(temp.Ask); if (temp.Command.Investor.ClientCommandQueue == null) temp.Command.Investor.ClientCommandQueue = new List<string>(); temp.Command.Investor.ClientCommandQueue.Add(Message.ToString()); //TradingServer.Model.TradingCalculate.Instance.StreamFileNJ4X("[Receive Notify] - " + Message); #endregion } else { if (temp.Ticket == int.Parse(subParameter[11])) { bool IsBuy = false; if (temp.Command.Type.ID == 1 || temp.Command.Type.ID == 7 || temp.Command.Type.ID == 9) IsBuy = true; #region CLOSE COMMAND WITH MODE INSTANCE temp.Ask = double.Parse(subParameter[7]); temp.Bid = double.Parse(subParameter[6]); temp.Ticket = int.Parse(subParameter[9]); temp.IsDisable = true; temp.IsReQuote = true; if (temp.Command.Type.ID == 1) temp.Command.ClosePrice = temp.Bid; else temp.Command.ClosePrice = temp.Ask; StringBuilder Message = new StringBuilder(); Message.Append("CloseCommand$False,RD02,"); Message.Append(temp.Command.ID); Message.Append(","); Message.Append(temp.Command.Investor.InvestorID); Message.Append(","); Message.Append(temp.Command.Symbol.Name); Message.Append(","); Message.Append(temp.Command.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(temp.Command.OpenTime); Message.Append(","); Message.Append(temp.Command.OpenPrice); Message.Append(","); Message.Append(temp.Command.StopLoss); Message.Append(","); Message.Append(temp.Command.TakeProfit); Message.Append(","); Message.Append(temp.Command.ClosePrice); Message.Append(","); Message.Append(temp.Command.Commission); Message.Append(","); Message.Append(temp.Command.Swap); Message.Append(","); Message.Append(temp.Command.Profit); Message.Append(","); Message.Append("Comment,"); Message.Append(temp.Command.ID); Message.Append(","); Message.Append(temp.Command.Type.Name); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(temp.Command.ExpTime); Message.Append(","); Message.Append(temp.Command.ClientCode); Message.Append(","); Message.Append(temp.Command.CommandCode); Message.Append(","); Message.Append(temp.Command.IsHedged); Message.Append(","); Message.Append(temp.Command.Type.ID); Message.Append(","); Message.Append(temp.Command.Margin); Message.Append(",Close,"); Message.Append(temp.Command.CloseTime); Message.Append(","); Message.Append(temp.Bid); Message.Append(","); Message.Append(temp.Ask); if (temp.Command.Investor.ClientCommandQueue == null) temp.Command.Investor.ClientCommandQueue = new List<string>(); temp.Command.Investor.ClientCommandQueue.Add(Message.ToString()); #endregion } isFlag = true; lock (Business.Market.nj4xObject) Business.Market.NJ4XTickets.RemoveAt(j); } } #endregion } else { NJ4XConnectSocket.NJ4XTicket temp; temp = Business.Market.NJ4XTickets[j]; #region NOTIFY OPEN if (temp.Code.Trim() == subParameter[4].Trim() && temp.IsDisable == false && temp.IsReQuote == false) { if (temp.Execution == EnumMT4.Execution.REQUEST) { #region OPEN WITH MODE REQUEST bool IsBuy = false; if (temp.Command.Type.ID == 1 || temp.Command.Type.ID == 7 || temp.Command.Type.ID == 9) IsBuy = true; string CommandType = string.Empty; if (temp.Command.Type.ID == 1 || temp.Command.Type.ID == 2) { CommandType = "Open"; } else { if (temp.Command.Type.ID == 7) { CommandType = "BuyLimit"; } if (temp.Command.Type.ID == 8) { CommandType = "SellLimit"; } if (temp.Command.Type.ID == 9) { CommandType = "BuyStop"; } if (temp.Command.Type.ID == 10) { CommandType = "SellStop"; } } temp.Ask = double.Parse(subParameter[7]); temp.Bid = double.Parse(subParameter[6]); temp.IsDisable = true; temp.IsRequest = true; temp.IsReQuote = true; if (temp.Command.Type.ID == 1) temp.Command.OpenPrice = temp.Ask; else temp.Command.OpenPrice = temp.Bid; StringBuilder Message = new StringBuilder(); Message.Append("AddCommand$False,RD28,"); Message.Append(temp.Command.ID); Message.Append(","); Message.Append(temp.Command.Investor.InvestorID); Message.Append(","); Message.Append(temp.Command.Symbol.Name); Message.Append(","); Message.Append(temp.Command.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(temp.Command.OpenTime); Message.Append(","); Message.Append(temp.Command.OpenPrice); Message.Append(","); Message.Append(temp.Command.StopLoss); Message.Append(","); Message.Append(temp.Command.TakeProfit); Message.Append(","); Message.Append(temp.Command.ClosePrice); Message.Append(","); Message.Append(temp.Command.Commission); Message.Append(","); Message.Append(temp.Command.Swap); Message.Append(","); Message.Append(temp.Command.Profit); Message.Append(","); Message.Append("Comment,"); Message.Append(temp.Command.ID); Message.Append(","); Message.Append(CommandType); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(temp.Command.ExpTime); Message.Append(","); Message.Append(temp.Command.ClientCode); Message.Append(","); Message.Append(temp.Command.CommandCode); Message.Append(","); Message.Append(temp.Command.IsHedged); Message.Append(","); Message.Append(temp.Command.Type.ID); Message.Append(","); Message.Append(temp.Command.Margin); Message.Append(",Open"); Message.Append(","); Message.Append(temp.Command.CloseTime); Message.Append(","); Message.Append(temp.Bid); Message.Append(","); Message.Append(temp.Ask); if (temp.Command.Investor.ClientCommandQueue == null) temp.Command.Investor.ClientCommandQueue = new List<string>(); temp.Command.Investor.ClientCommandQueue.Add(Message.ToString()); //TradingServer.Model.TradingCalculate.Instance.StreamFileNJ4X("[Receive Notify] - " + Message); #endregion } else { #region OPEN WITH MODE INSTANCE if (temp.Symbol.Trim().ToUpper() == subParameter[12].Trim().ToUpper()) { temp.Ask = double.Parse(subParameter[7]); temp.Bid = double.Parse(subParameter[6]); temp.Ticket = int.Parse(subParameter[9]); temp.IsDisable = true; temp.IsReQuote = true; bool IsBuy = false; if (temp.Command.Type.ID == 1 || temp.Command.Type.ID == 7 || temp.Command.Type.ID == 9) IsBuy = true; if (temp.Command.Type.ID == 1) temp.Command.OpenPrice = temp.Ask; else temp.Command.OpenPrice = temp.Bid; StringBuilder Message = new StringBuilder(); Message.Append("AddCommand$False,RD28,"); Message.Append(temp.Command.ID); Message.Append(","); Message.Append(temp.Command.Investor.InvestorID); Message.Append(","); Message.Append(temp.Command.Symbol.Name); Message.Append(","); Message.Append(temp.Command.Size); Message.Append(","); Message.Append(IsBuy); Message.Append(","); Message.Append(temp.Command.OpenTime); Message.Append(","); Message.Append(temp.Command.OpenPrice); Message.Append(","); Message.Append(temp.Command.StopLoss); Message.Append(","); Message.Append(temp.Command.TakeProfit); Message.Append(","); Message.Append(temp.Command.ClosePrice); Message.Append(","); Message.Append(temp.Command.Commission); Message.Append(","); Message.Append(temp.Command.Swap); Message.Append(","); Message.Append(temp.Command.Profit); Message.Append(","); Message.Append("Comment,"); Message.Append(temp.Command.ID); Message.Append(","); Message.Append(temp.Command.Type.Name); Message.Append(","); Message.Append(1); Message.Append(","); Message.Append(temp.Command.ExpTime); Message.Append(","); Message.Append(temp.Command.ClientCode); Message.Append(","); Message.Append(temp.Command.CommandCode); Message.Append(","); Message.Append(temp.Command.IsHedged); Message.Append(","); Message.Append(temp.Command.Type.ID); Message.Append(","); Message.Append(temp.Command.Margin); Message.Append(",Close,"); Message.Append(temp.Command.CloseTime); Message.Append(","); Message.Append(temp.Bid); Message.Append(","); Message.Append(temp.Ask); if (temp.Command.Investor.ClientCommandQueue == null) temp.Command.Investor.ClientCommandQueue = new List<string>(); temp.Command.Investor.ClientCommandQueue.Add(Message.ToString()); //TradingServer.Model.TradingCalculate.Instance.StreamFileNJ4X("[Receive Notify] - " + Message); } #endregion isFlag = true; lock (Business.Market.nj4xObject) Business.Market.NJ4XTickets.RemoveAt(0); } } #endregion } } } } } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } } } break; #endregion #region NOTIFY CHANGE GROUP case "NotifyChangeGroup": { #region COMMENT CODE BECAUSE NEED TEST try { Business.Market.IsOpen = false; if (Business.Market.InvestorList != null) { int countInvestor = Business.Market.InvestorList.Count; for (int j = 0; j < countInvestor; j++) { if (Business.Market.InvestorList[j].IsOnline) { string message = "OLOFF14790251"; //int countInvestorOnline = Business.Market.InvestorList[j].CountInvestorOnline(Business.Market.InvestorList[j].InvestorID); //if (countInvestorOnline > 0) Business.Market.InvestorList[j].ClientCommandQueue.Add(message); } Business.Market.InvestorList[j].IsFirstLogin = true; } } int countSymbol = Business.Market.SymbolList.Count; for (int j = 0; j < countSymbol;j++ ) { Business.Market.SymbolList[j].CommandList.Clear(); } Business.Market.CommandExecutor.Clear(); Business.Market.marketInstance.MapGroup(subValue[1]); Business.Market.IsOpen = true; } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } #endregion } break; #endregion #region NOTIFY CHANGE SYMBOL case "NotifyChangeSymbol": { #region COMMENT CODE BECAUSE NEED TEST try { Business.Market.IsOpen = false; if (Business.Market.InvestorList != null) { int countInvestor = Business.Market.InvestorList.Count; for (int j = 0; j < countInvestor; j++) { if (Business.Market.InvestorList[j].IsOnline) { string message = "OLOFF14790251"; //int countInvestorOnline = Business.Market.InvestorList[j].CountInvestorOnline(Business.Market.InvestorList[j].InvestorID); //if (countInvestorOnline > 0) Business.Market.InvestorList[j].ClientCommandQueue.Add(message); } Business.Market.InvestorList[j].IsFirstLogin = true; } } //List<string> symbols = Element5SocketConnectMT4.MT4Connect.MT4ConnectPort.Instance.InitSymbolMT4(); //Business.Market.marketInstance.ReceiveSymbolNotify(symbols); int countSymbol = Business.Market.SymbolList.Count; for (int j = 0; j < countSymbol; j++) { Business.Market.SymbolList[j].CommandList.Clear(); } Business.Market.CommandExecutor.Clear(); Business.Market.marketInstance.MapSymbol(subValue[1]); Business.Market.IsOpen = true; } catch (Exception ex) { string _temp = ex.Message + " - " + subValue[1]; TradingServer.Facade.FacadeAddNewSystemLog(6, _temp, "[Exception]", "", subValue[0]); } #endregion } break; #endregion } } } } result = Business.Market.GetNotifyMessage(); } System.Threading.Thread.Sleep(1000); } }
/// <summary> /// /// </summary> /// <param name="symbolName"></param> /// <param name="investorID"></param> /// <param name="commandTypeID"></param> /// <returns></returns> public static Business.OpenTrade FillInstanceOpenTrade(string symbolName, int investorID, int commandTypeID) { Business.OpenTrade result = new Business.OpenTrade(); //result.Symbol #region Find Symbol In Symbol List Command Type,Symbol //Find Symbol In Symbol List Command Type if (Business.Market.SymbolList != null) { int countSymbol = Business.Market.SymbolList.Count; for (int j = 0; j < countSymbol; j++) { if (Business.Market.SymbolList[j].Name == symbolName) { if (Business.Market.SymbolList[j].MarketAreaRef.Type != null) { int countType = Business.Market.SymbolList[j].MarketAreaRef.Type.Count; for (int n = 0; n < countType; n++) { if (Business.Market.SymbolList[j].MarketAreaRef.Type[n].ID == commandTypeID) { result.Type = Business.Market.SymbolList[j].MarketAreaRef.Type[n]; break; } } } result.Symbol = Business.Market.SymbolList[j]; break; } } } #endregion //result.Investor #region Find Investor List //Find Investor List if (Business.Market.InvestorList != null) { int countInvestor = Business.Market.InvestorList.Count; for (int n = 0; n < countInvestor; n++) { if (Business.Market.InvestorList[n].InvestorID == investorID) { result.Investor = Business.Market.InvestorList[n]; break; } } } #endregion #region Fill IGroupSecurity if (result.Investor != null) { if (Business.Market.IGroupSecurityList != null) { int countIGroupSecurity = Business.Market.IGroupSecurityList.Count; for (int i = 0; i < countIGroupSecurity; i++) { if (Business.Market.IGroupSecurityList[i].SecurityID == result.Symbol.SecurityID && Business.Market.IGroupSecurityList[i].InvestorGroupID == result.Investor.InvestorGroupInstance.InvestorGroupID) { result.IGroupSecurity = Business.Market.IGroupSecurityList[i]; break; } } } } #endregion return result; }
/// <summary> /// /// </summary> /// <param name="command"></param> private void MultiCloseCommand(Business.OpenTrade command) { List<Business.OpenTrade> rollbackData = new List<OpenTrade>(); if (this.CommandList != null) { for (int i = 0; i < this.CommandList.Count; i++) { if (this.CommandList[i].Symbol.Name.ToUpper().Trim() == command.Symbol.Name.ToUpper().Trim()) { bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(this.CommandList[i].Type.ID); if (!isPending) { #region BACKUP DATA Business.OpenTrade newOpenTrade = new OpenTrade(); newOpenTrade.AgentCommission = this.CommandList[i].AgentCommission; newOpenTrade.ClientCode = this.CommandList[i].ClientCode; newOpenTrade.ClosePrice = this.CommandList[i].ClosePrice; newOpenTrade.CommandCode = this.CommandList[i].CommandCode; newOpenTrade.Comment = this.CommandList[i].Comment; newOpenTrade.Commission = this.CommandList[i].Commission; newOpenTrade.ExpTime = this.CommandList[i].ExpTime; newOpenTrade.FreezeMargin = this.CommandList[i].FreezeMargin; newOpenTrade.ID = this.CommandList[i].ID; newOpenTrade.IGroupSecurity = this.CommandList[i].IGroupSecurity; newOpenTrade.Investor = this.CommandList[i].Investor; newOpenTrade.IsClose = this.CommandList[i].IsClose; newOpenTrade.IsHedged = this.CommandList[i].IsHedged; newOpenTrade.IsMultiClose = this.CommandList[i].IsMultiClose; newOpenTrade.IsMultiUpdate = this.CommandList[i].IsMultiUpdate; newOpenTrade.IsProcess = this.CommandList[i].IsProcess; newOpenTrade.IsServer = this.CommandList[i].IsServer; newOpenTrade.ManagerID = this.CommandList[i].ManagerID; newOpenTrade.Margin = this.CommandList[i].Margin; newOpenTrade.MaxDev = this.CommandList[i].MaxDev; newOpenTrade.NumberUpdate = this.CommandList[i].NumberUpdate; newOpenTrade.OpenPrice = this.CommandList[i].OpenPrice; newOpenTrade.OpenTime = this.CommandList[i].OpenTime; newOpenTrade.Size = this.CommandList[i].Size; newOpenTrade.SpreaDifferenceInOpenTrade = this.CommandList[i].SpreaDifferenceInOpenTrade; newOpenTrade.StopLoss = this.CommandList[i].StopLoss; newOpenTrade.Swap = this.CommandList[i].Swap; newOpenTrade.Symbol = this.CommandList[i].Symbol; newOpenTrade.TakeProfit = this.CommandList[i].TakeProfit; newOpenTrade.Taxes = this.CommandList[i].Taxes; newOpenTrade.Type = this.CommandList[i].Type; newOpenTrade.CloseTime = DateTime.Now; newOpenTrade.Profit = this.CommandList[i].Profit; if (this.CommandList[i].Type.ID == 2 || this.CommandList[i].Type.ID == 12) { //newOpenTrade.ClosePrice = this.CommandList[i].Symbol.CreateAskPrices(command.ClosePrice, this.CommandList[i].Symbol.SpreadByDefault, // this.CommandList[i].Symbol.Digit, int.Parse(this.CommandList[i].SpreaDifferenceInOpenTrade.ToString())); newOpenTrade.ClosePrice = this.CommandList[i].Symbol.CreateAskPrices(this.CommandList[i].Symbol.Digit, int.Parse(this.CommandList[i].SpreaDifferenceInOpenTrade.ToString()), command.ClosePrice); } #region SET NEW DATA newOpenTrade.CalculatorProfitCommand(newOpenTrade); newOpenTrade.Profit = newOpenTrade.Symbol.ConvertCurrencyToUSD(newOpenTrade.Symbol.Currency, newOpenTrade.Profit, false, newOpenTrade.SpreaDifferenceInOpenTrade, newOpenTrade.Symbol.Digit); #endregion rollbackData.Add(newOpenTrade); #endregion } } } } if (rollbackData != null && rollbackData.Count > 0) { TradingServer.DBW.DBWOnlineCommand newDBWOnlineCommand = new DBW.DBWOnlineCommand(); bool resultMultiClose = newDBWOnlineCommand.MultipleCloseOpenTrade(rollbackData); if (!resultMultiClose) { //rollback data this.RollBackData(rollbackData, 1); } } }
/// <summary> /// DEBUG /// </summary> /// <param name="commandID"></param> /// <param name="mode">1: investor, 2: symbol,3: command executor</param> /// <returns></returns> public static Business.OpenTrade FacadeGetCommandByID(int commandID, int mode) { Business.OpenTrade result = new Business.OpenTrade(); switch (mode) { #region SEARCH COMMAND IN INVESTOR LIST case 1: { if (TradingServer.Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; bool flag = false; for (int i = 0; i < count; i++) { if (flag) break; if (Business.Market.InvestorList[i].CommandList != null && Business.Market.InvestorList[i].CommandList.Count > 0) { int countCommand = Business.Market.InvestorList[i].CommandList.Count; for (int j = 0; j < countCommand; j++) { if (Business.Market.InvestorList[i].CommandList[j].ID == commandID) { result = Business.Market.InvestorList[i].CommandList[j]; flag = true; break; } } } } } } break; #endregion #region SEARCH COMMAND IN SYMBOL LIST case 2: { if (Business.Market.SymbolList != null) { int count = Business.Market.SymbolList.Count; bool flag = false; for (int i = 0; i < count; i++) { if (flag) break; if (Business.Market.SymbolList[i].CommandList != null && Business.Market.SymbolList[i].CommandList.Count > 0) { int countCommand = Business.Market.SymbolList[i].CommandList.Count; for (int j = 0; j < countCommand; j++) { if (Business.Market.SymbolList[i].CommandList[j].ID == commandID) { result = Business.Market.SymbolList[i].CommandList[j]; flag = true; break; } } } } } } break; #endregion #region SEARCH COMMAND IN COMMAND EXECUTOR case 3: { if (Business.Market.CommandExecutor != null) { int count = Business.Market.CommandExecutor.Count; for (int i = 0; i < count; i++) { if (Business.Market.CommandExecutor[i].ID == commandID) { result = Business.Market.CommandExecutor[i]; break; } } } } break; #endregion } return result; }
/// <summary> /// EXTRACT COMMAND AND CALL FUNCTION /// </summary> /// <param name="Cmd"></param> /// <returns></returns> public string ExtractCommandServer(string Cmd, string ipAddress, string code) { string StringResult = string.Empty; string Command = string.Empty; string Value = string.Empty; if (!string.IsNullOrEmpty(Cmd)) { string[] subValue = new string[2]; int Position = -1; Position = Cmd.IndexOf('$'); if (Position > 0) { Command = Cmd.Substring(0, Position); Value = Cmd.Substring(Position + 1); subValue[0] = Command; subValue[1] = Value; } else { subValue[0] = Cmd; } if (subValue.Length > 0) { switch (subValue[0]) { //Command Add New // #region Add Investor Group(LOG) case "AddInvestorGroup": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int ResultAddNew = -1; Business.InvestorGroup Result = new InvestorGroup(); Result = this.ExtractInvestorGroup(subValue[1]); //Call Function Add New Investor Group ResultAddNew = TradingServer.Facade.FacadeAddNewInvestorGroup(Result); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': group config added/changed ['test-duc'] string status = "[Failed]"; if (ResultAddNew > 0) { status = "[successs]"; TradingServer.Facade.FacadeCheckUpdateGroupVirtualDealerOnline(); } string content = "'" + code + "': group config added/changed ['" + Result.Name + "'] " + status; string comment = "[add new group]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion if (ResultAddNew > 0) TradingServer.Facade.FacadeSendNoticeManagerChangeGroup(3, ResultAddNew); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Add Investor Group Config case "AddInvestorGroupConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int ResultAddNew = -1; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); //Call Function Add New Investor Group Config ResultAddNew = TradingServer.Facade.FacadeAddNewInvestorGroupConfig(Result); if (ResultAddNew > 0) Facade.FacadeSendNoticeManagerChangeGroup(2, Result[0].SecondParameterID); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); //SEND COMMAND TO AGENT SERVER string strAgent = "AddInvestorGroup$" + Result[0].SecondParameterID; Business.AgentNotify newAgentNotify = new AgentNotify(); newAgentNotify.NotifyMessage = strAgent; TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Add New Security(LOG) case "AddSecurity": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { int ResultAddNew = -1; int MarketAreaID = -1; string[] subParameter = subValue[1].Split(','); int.TryParse(subParameter[2], out MarketAreaID); if (subParameter.Length > 0) { ResultAddNew = TradingServer.Facade.FacadeAddSecurity(subParameter[0], subParameter[1], MarketAreaID); } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': security config added/changed ['test-duc'] string status = "[Failed]"; if (ResultAddNew > 0) status = "[Success]"; string content = "'" + code + "': security config added/changed ['" + subParameter[0] + "'] " + status; string comment = "[add new security]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Add New SecurityConfig case "AddSecurityConfig": { int ResultAddNew = -1; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); ResultAddNew = TradingServer.Facade.FacadeAddSecurityConfig(Result); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } break; #endregion #region Add New Symbol(LOG) case "AddNewSymbol": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { int ResultAddNew = -1; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int SecurityID = 0; int RefSymbolID = 0; int MarketAreaID = 0; int.TryParse(subParameter[0], out SecurityID); int.TryParse(subParameter[1], out RefSymbolID); int.TryParse(subParameter[2], out MarketAreaID); //Call Function Add New Symbol ResultAddNew = TradingServer.Facade.FacadeAddNewSymbol(SecurityID, RefSymbolID, MarketAreaID, subParameter[3]); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': symbol config added/changed ['XAUUSD'] string status = "[Failed]"; if (ResultAddNew > 0) { status = "[Success]"; TradingServer.Facade.FacadeCheckUpdateGroupVirtualDealerOnline(); } string content = "'" + code + "': symbol config added/changed ['" + subParameter[3] + "'] " + status; string comment = "[add new security]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion if (ResultAddNew > 0) Facade.FacadeSendNoticeManagerChangeSymbol(3, ResultAddNew); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Add New TradingConfig(SymbolConfig) case "AddTradingConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int ResultAddNew = -1; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); //Call Function Add New TradingConfig(SymbolConfig) ResultAddNew = TradingServer.Facade.FacadeAddNewTradingConfig(Result); if (ResultAddNew > 0) Facade.FacadeSendNoticeManagerChangeSymbol(2, Result[0].SecondParameterID); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); //SEND COMMAND TO AGENT SERVER string strAgent = "AddNewSymbol$" + Result[0].SecondParameterID; Business.AgentNotify newAgentNotify = new AgentNotify(); newAgentNotify.NotifyMessage = strAgent; TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Add New Investor(LOG) case "AddNewInvestor": { int ResultAddNew = -1; Business.Investor Result = new Investor(); Result = this.ExtractionInvestor(subValue[1]); //Check Email Add Send Mail Confirm Create Account Complete bool checkEmail = Model.TradingCalculate.Instance.IsEmail(Result.Email); if (checkEmail) { bool CheckCode = false; CheckCode = TradingServer.Facade.FacadeGetInvestorByCode(Result.Code); if (CheckCode == true) { double balance = Result.Balance; Result.Balance = 0; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitAccountManagerAndAdmin(code); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, Result.InvestorGroupInstance.InvestorGroupID); if (checkRule && checkGroup) { ResultAddNew = TradingServer.Facade.FacadeAddNewInvestor(Result); //Add Investor To Investor List if (ResultAddNew > 0) { Result.InvestorID = ResultAddNew; int resultProfileID = TradingServer.Facade.FacadeAddInvestorProfile(Result); Result.InvestorProfileID = resultProfileID; if (string.IsNullOrEmpty(Result.AgentID)) Result.AgentID = "0"; Business.Market.InvestorList.Add(Result); //Deposit account Result.Deposit(balance, ResultAddNew, "deposit"); } StringResult = subValue[0] + "$" + ResultAddNew.ToString() + "," + Result.Code; #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': new account '9942881' - ngthanhduc string status = "[Failed]"; if (ResultAddNew > 0) status = "[Success]"; string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " " + status; string comment = "[add new account]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } else { StringResult = subValue[0] + "$MCM006"; string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " failed(not enough rights)"; string comment = "[add new account]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } //SEND NOTIFY TO MANAGER //TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Result); //TradingServer.Facade.FacadeAutoSendMailRegistration(Result); } else { StringResult = subValue[0] + "$MCM005"; string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " failed(invalid ip)"; string comment = "[add new account]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$Account exist"; string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " failed(account exist)"; string comment = "[add new account]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$Invalid email"; string content = "'" + code + "': new account '" + Result.Code + "' - " + Result.NickName + " failed(invalid email)"; string comment = "[add new account]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } break; #endregion #region Add New Agent(LOG) case "AddNewAgent": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string temp = ""; if (!string.IsNullOrEmpty(subValue[1])) { Business.Agent result = new Agent(); #region Create Agent string[] subParameter = subValue[1].Split('}'); if (subParameter.Length > 0) { int agentGroupID = -1; bool isDisable = false; bool isIpFilter = false; int.TryParse(subParameter[0], out agentGroupID); result.Name = subParameter[1]; result.Comment = subParameter[3]; bool.TryParse(subParameter[4], out isDisable); bool.TryParse(subParameter[5], out isIpFilter); result.AgentGroupID = agentGroupID; result.IsDisable = isDisable; result.IsIpFilter = isIpFilter; result.IpForm = subParameter[6]; result.IpTo = subParameter[7]; result.Code = subParameter[8]; result.Pwd = subParameter[9]; result.GroupCondition = subParameter[10]; } #endregion int isSpace = result.Code.IndexOf(' '); if (isSpace > 0) { temp = "invalid code login"; string strContent = "'" + code + "': add new agent [Failed] (invalid code login)"; TradingServer.Facade.FacadeAddNewSystemLog(3, strContent, "[add agent]",ipAddress, code); } else { bool inves = Facade.FacadeGetInvestorByCode(result.Code); if (inves) { int ResultAddNew = TradingServer.Facade.FacadeAddNewAgent(result); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': manager config added/changed ['212121'] string status = "[Failed]"; if (ResultAddNew > 0) status = "[Success]"; string content = "'" + code + "': manager config added/changed ['" + subParameter[8] + "']" + status; string comment = "[add agent]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion temp = ResultAddNew.ToString(); } else temp = "Account is exist"; } } StringResult = subValue[0] + "$" + temp; } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Add News case "AddNews": { int ResultAddNew = -1; if (!string.IsNullOrEmpty(subValue[1])) { string content = subValue[1]; if (subValue.Length > 2) { for (int i = 2; i < subValue.Length; i++) { content += subValue[i]; } } Business.News result = new News(); #region Create News string[] subParameter = content.Split('█'); if (subParameter.Length > 2) { string title = subParameter[0]; string body = subParameter[1]; string category = subParameter[2]; ResultAddNew = Facade.FacadeAddNews(title, body, DateTime.Now, category); } #endregion } StringResult = subValue[0] + "$" + ResultAddNew; } break; #endregion #region Add New Alert case "AddNewAlert": { int ResultAddNew = -1; string timeCreate = ""; if (!string.IsNullOrEmpty(subValue[1])) { Business.PriceAlert result = new PriceAlert(); #region Create Alert string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { result.TickOnline = new Tick(); result.Symbol = subParameter[0]; result.Email = subParameter[1]; result.PhoneNumber = subParameter[2]; result.Value = double.Parse(subParameter[3]); #region ConditionAlert & ActionAlert switch (subParameter[4]) { case "LargerBid": { result.AlertCondition = Business.ConditionAlert.LargerBid; break; } case "LargerAsk": { result.AlertCondition = Business.ConditionAlert.LargerAsk; break; } case "LargerHighBid": { result.AlertCondition = Business.ConditionAlert.LargerHighBid; break; } case "LargerHighAsk": { result.AlertCondition = Business.ConditionAlert.LargerHighAsk; break; } case "SmallerBid": { result.AlertCondition = Business.ConditionAlert.SmallerBid; break; } case "SmallerAsk": { result.AlertCondition = Business.ConditionAlert.SmallerAsk; break; } case "SmallerLowBid": { result.AlertCondition = Business.ConditionAlert.SmallerLowBid; break; } case "SmallerLowAsk": { result.AlertCondition = Business.ConditionAlert.SmallerLowAsk; break; } } switch (subParameter[5]) { case "Email": { result.AlertAction = Business.ActionAlert.Email; break; } case "SMS": { result.AlertAction = Business.ActionAlert.SMS; break; } case "Sound": { result.AlertAction = Business.ActionAlert.Sound; break; } } #endregion result.IsEnable = bool.Parse(subParameter[6]); result.InvestorID = int.Parse(subParameter[7]); result.Notification = subParameter[8]; result.DateCreate = DateTime.Now; timeCreate = result.DateCreate.ToString(); result.DateActive = result.DateCreate; ResultAddNew = TradingServer.Facade.FacadeAddNewAlert(result); } #endregion } StringResult = subValue[0] + "$" + ResultAddNew + "," + timeCreate; } break; case "InsertNewAlert": { int ResultAddNew = -1; string timeCreate = ""; Business.PriceAlert result = new PriceAlert(); if (!string.IsNullOrEmpty(subValue[1])) { #region Create Alert string[] subParameter = subValue[1].Split('{'); if (subParameter.Length > 0) { result.TickOnline = new Tick(); result.Symbol = subParameter[0]; result.Email = subParameter[1]; result.PhoneNumber = subParameter[2]; result.Value = double.Parse(subParameter[3]); #region ConditionAlert & ActionAlert switch (subParameter[4]) { case "LargerBid": { result.AlertCondition = Business.ConditionAlert.LargerBid; break; } case "LargerAsk": { result.AlertCondition = Business.ConditionAlert.LargerAsk; break; } case "LargerHighBid": { result.AlertCondition = Business.ConditionAlert.LargerHighBid; break; } case "LargerHighAsk": { result.AlertCondition = Business.ConditionAlert.LargerHighAsk; break; } case "SmallerBid": { result.AlertCondition = Business.ConditionAlert.SmallerBid; break; } case "SmallerAsk": { result.AlertCondition = Business.ConditionAlert.SmallerAsk; break; } case "SmallerLowBid": { result.AlertCondition = Business.ConditionAlert.SmallerLowBid; break; } case "SmallerLowAsk": { result.AlertCondition = Business.ConditionAlert.SmallerLowAsk; break; } } switch (subParameter[5]) { case "Email": { result.AlertAction = Business.ActionAlert.Email; break; } case "SMS": { result.AlertAction = Business.ActionAlert.SMS; break; } case "Sound": { result.AlertAction = Business.ActionAlert.Sound; break; } } #endregion result.IsEnable = bool.Parse(subParameter[6]); result.InvestorID = int.Parse(subParameter[7]); result.Notification = subParameter[8]; result.DateCreate = DateTime.Now; timeCreate = result.DateCreate.ToString(); result.DateActive = result.DateCreate; ResultAddNew = TradingServer.Facade.FacadeAddNewAlert(result); } #endregion } StringResult = subValue[0] + "$" + ResultAddNew + "{" + result.Symbol + "{" + result.Email + "{" + result.PhoneNumber + "{" + result.Value + "{" + result.AlertCondition + "{" + result.AlertAction + "{" + result.IsEnable + "{" + timeCreate + "{" + result.DateActive + "{" + result.InvestorID + "{" + result.Notification; } break; #endregion #region Add New Permit case "AddPermit": { int ResultAddNew = -1; Business.Permit Result = new Permit(); Result = this.ExtractionPermit(subValue[1]); ResultAddNew = TradingServer.Facade.FacadeAddNewPermit(Result.AgentGroupID, Result.AgentID, Result.Role.RoleID); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } break; #endregion #region Add New IAgentSecurity case "AddNewIAgentSecurity": { if (!string.IsNullOrEmpty(subValue[1])) { int ResultAddNew = -1; int AgentID = -1; int SecurityID = -1; bool IsUse = false; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out AgentID); int.TryParse(subParameter[1], out SecurityID); bool.TryParse(subParameter[2], out IsUse); ResultAddNew = TradingServer.Facade.FacadeAddNewIAgentSecurity(AgentID, SecurityID, IsUse, subParameter[3], subParameter[4]); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } } break; case "AddListIAgentSecurity": { if (!string.IsNullOrEmpty(subValue[1])) { int ResultAddNew = -1; List<Business.IAgentSecurity> Result = new List<IAgentSecurity>(); Result = this.ExtractionIAgentSecurity(subValue[1]); ResultAddNew = TradingServer.Facade.FacadeAddListIAgentSecurity(Result); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } break; #endregion #region Add New IAgentGroup case "AddNewIAgentGroup": { if (!string.IsNullOrEmpty(subValue[1])) { int ResultAddNew = -1; int AgentID = -1; int InvestorGroupID = -1; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out AgentID); int.TryParse(subParameter[1], out InvestorGroupID); ResultAddNew = TradingServer.Facade.FacadeAddNewIAgentGroup(AgentID, InvestorGroupID); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } } break; #endregion #region Add New Investor Profile case "AddNewInvestorProfile": { int ResultAddNew = -1; //Business.InvestorProfile Result = new InvestorProfile(); //Result = this.ExtractInvestorProfile(subValue[1]); //ResultAddNew = TradingServer.Facade.FacadeAddNewInvestorProfile(Result); StringResult = ResultAddNew.ToString(); } break; #endregion #region Add New IGroupSecurityConfig case "AddNewIGroupSecurityConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int ResultAddNew = -1; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); //Call Function Add New TradingConfig(SymbolConfig) ResultAddNew = TradingServer.Facade.FacadeAddIGroupSecurityConfig(Result); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Add New IGroupSymbolConfig case "AddNewIGroupSymbolConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int ResultAddNew = -1; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); //Call Function Add New TradingConfig(SymbolConfig) ResultAddNew = TradingServer.Facade.FacadeAddIGroupSymbolConfig(Result); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Add Deposit, Add Credit, Withrawals case "AddDeposit": { string[] Parameter = subValue[1].Split(','); int InvestorID = 0; double Money = 0; if (Parameter.Length == 3) { bool ResultDeposit = false; int.TryParse(Parameter[0], out InvestorID); Business.Investor tempInvestor = new Investor(); tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID); bool parseMoney = double.TryParse(Parameter[1], out Money); bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); bool checkRule = Facade.FacadeCheckPermitAddMoney(code); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID); if (parseMoney && checkip && checkRule && checkGroup) { ResultDeposit = TradingServer.Facade.FacadeAddDeposit(InvestorID, Money, Parameter[2]); StringResult = subValue[0] + "$" + ResultDeposit + "," + InvestorID + "," + Money; #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': account '9789300' withdrawal: 100000.00 string status = "[Success]"; if (!ResultDeposit) { status = "[Failed]"; } string tempMoney = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Money.ToString(), 2); string content = "'" + code + "': account '" + tempInvestor.Code + "' deposit: " + tempMoney + " " + status; string comment = "[deposit]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } else { StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Money; string comment = "[deposit]"; string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Money.ToString(), 2); if (!checkip) { string content = "'" + code + "': account '" + tempInvestor.Code + "' deposit: " + tempCredit + " failed (invalid ip)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } if (!checkRule || !checkGroup) { string content = "'" + code + "': account '" + tempInvestor.Code + "' deposit: " + tempCredit + " failed (not enough rights)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } if (!parseMoney) { string content = "'" + code + "': account '" + tempInvestor.Code + "' deposit: " + tempCredit + " failed (invalid amount)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } } else { StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Money; } } break; case "AddDepostAndCredit": { string[] Parameter = subValue[1].Split(','); if (Parameter.Length == 3) { bool ResultDeposit = false; int InvestorID = 0; int.TryParse(Parameter[0], out InvestorID); double Deposit = 0; bool parseDeposit = double.TryParse(Parameter[1], out Deposit); double Credit = 0; bool parseCredit = double.TryParse(Parameter[2], out Credit); if (parseDeposit && parseCredit) { ResultDeposit = TradingServer.Facade.FacadeUpdateBalanceAndCredit(InvestorID, Deposit, Credit); StringResult = subValue[0] + "$" + ResultDeposit + "," + InvestorID + "," + Deposit + "," + Credit; } else { StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Deposit + "," + Credit; } } } break; case "AddCredit": { string[] Parameter = subValue[1].Split(','); if (Parameter.Length == 3) { bool ResultCredit = false; int InvestorID = 0; double Credit = 0; int.TryParse(Parameter[0], out InvestorID); bool parseCredit = double.TryParse(Parameter[1], out Credit); Business.Investor tempInvestor = new Investor(); tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID); bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); bool checkRule = Facade.FacadeCheckPermitAddMoney(code); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID); if (parseCredit && checkip && checkRule && checkGroup) { ResultCredit = TradingServer.Facade.FacadeAddCredit(InvestorID, Credit, Parameter[2]); StringResult = subValue[0] + "$" + ResultCredit + "," + InvestorID + "," + Credit; #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': account '9789300' withdrawal: 100000.00 string status = "[Success]"; if (!ResultCredit) status = "[Failed]"; string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2); string content = "'" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " " + status; string comment = "[credit in]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } else { StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Credit; string comment = "[credit in]"; string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2); if (!checkip) { string content = "'" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " failed (invalid ip)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } if (!checkRule || !checkGroup) { string content = "'" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " failed (not enough rights)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } if (!parseCredit) { string content = "'" + code + "': account '" + tempInvestor.Code + "' credit in: " + tempCredit + " failed (invalid amount)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } } } break; case "SubCredit": { string[] Parameter = subValue[1].Split(','); if (Parameter.Length == 3) { bool ResultCredit = false; int InvestorID = 0; double Credit = 0; int.TryParse(Parameter[0], out InvestorID); bool parseCredit = double.TryParse(Parameter[1], out Credit); Business.Investor tempInvestor = new Investor(); tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID); bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); bool checkRule = Facade.FacadeCheckPermitAddMoney(code); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID); if (parseCredit && checkip && checkRule && checkGroup) { ResultCredit = TradingServer.Facade.FacadeSubCredit(InvestorID, Credit, Parameter[2]); StringResult = subValue[0] + "$" + ResultCredit + "," + InvestorID + "," + Credit; #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': account '9789300' withdrawal: 100000.00 string status = "[Success]"; if (!ResultCredit) status = "[Failed]"; string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2); string content = "'" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " " + status; string comment = "[credit out]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } else { StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Credit; string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Credit.ToString(), 2); string comment = "[credit out]"; if (!checkip) { string content = "'" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " failed (invalid ip)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } if (!checkRule || !checkGroup) { string content = "'" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " failed (not enough rights)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } if (!parseCredit) { string content = "'" + code + "': account '" + tempInvestor.Code + "' credit out: " + tempCredit + " failed (invalid amount)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } } } break; case "WithRawals": { string[] Parameter = subValue[1].Split(','); if (Parameter.Length == 3) { bool ResultWithRawals = false; int InvestorID = 0; double Money = 0; int.TryParse(Parameter[0], out InvestorID); bool parseMoney = double.TryParse(Parameter[1], out Money); Business.Investor tempInvestor = new Investor(); tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID); bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); bool checkRule = Facade.FacadeCheckPermitAddMoney(code); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID); if (parseMoney && checkip && checkRule && checkGroup) { ResultWithRawals = TradingServer.Facade.FacadeWithRawals(InvestorID, Money, Parameter[2]); StringResult = subValue[0] + "$" + ResultWithRawals + "," + InvestorID + "," + Money; #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': account '9789300' withdrawal: 100000.00 string status = "[Success]"; if (!ResultWithRawals) status = "[Failed]"; string formatMoney = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Money.ToString(), 2); string content = "'" + code + "': account '" + tempInvestor.Code + "' withdrawal: " + formatMoney + " " + status; string comment = "[withdrawal]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } else { StringResult = subValue[0] + "$" + false + "," + InvestorID + "," + Money; string comment = "[withdrawal]"; string tempCredit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Money.ToString(), 2); if (!checkip) { string content = "'" + code + "': account '" + tempInvestor.Code + "' withdrawal: " + tempCredit + " failed (invalid ip)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } if (!checkRule || !checkGroup) { string content = "'" + code + "': account '" + tempInvestor.Code + "' withdrawal: " + tempCredit + " failed (not enough rights)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } if (!parseMoney) { string content = "'" + code + "': account '" + tempInvestor.Code + "' withdrawal: " + tempCredit + " failed (invalid amount)"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } } } break; #endregion #region MAKE COMMAND BY MANAGER case "AddCommandByManager": { bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code); if (checkRule) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 9) { #region Map Value int InvestorID = 0; double Size = 0; double StopLoss = 0; double TakeProfit = 0; double OpenPrice = 0; int CommandType = 0; string Symbol = string.Empty; DateTime ExpTime = DateTime.Now; int.TryParse(subParameter[0], out InvestorID); double.TryParse(subParameter[1], out Size); Symbol = subParameter[2]; double.TryParse(subParameter[3], out StopLoss); double.TryParse(subParameter[4], out TakeProfit); double.TryParse(subParameter[5], out OpenPrice); int.TryParse(subParameter[6], out CommandType); DateTime.TryParse(subParameter[7], out ExpTime); #endregion if (Size > 0) { Business.OpenTrade newCommand = new OpenTrade(); newCommand = TradingServer.Facade.FacadeFillInstanceOpenTrade(InvestorID, subParameter[2], CommandType); newCommand.Size = Size; newCommand.StopLoss = StopLoss; newCommand.TakeProfit = TakeProfit; newCommand.OpenPrice = OpenPrice; newCommand.ExpTime = ExpTime; newCommand.IsServer = true; newCommand.Comment = subParameter[8]; //CALCULATION MARGIN //newCommand.CalculatorMarginCommand(newCommand); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, newCommand.Investor.InvestorGroupInstance.InvestorGroupID); if (checkGroup) { bool checkAccount = newCommand.CheckValidAccountInvestor(newCommand); if (checkAccount) { bool IsTrade = false; double Minimum = -1; double Maximum = -1; double Step = -1; bool ResultCheckStepLots = false; //CHECK MIN MAX LOTS COMMAND #region Get Config IGroupSecurity if (newCommand.IGroupSecurity.IGroupSecurityConfig != null) { int countIGroupSecurityConfig = newCommand.IGroupSecurity.IGroupSecurityConfig.Count; for (int i = 0; i < countIGroupSecurityConfig; i++) { if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].Code == "B01") { if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].BoolValue == 1) IsTrade = true; } if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].Code == "B11") { double.TryParse(newCommand.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Minimum); } if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].Code == "B12") { double.TryParse(newCommand.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Maximum); } if (newCommand.IGroupSecurity.IGroupSecurityConfig[i].Code == "B13") { double.TryParse(newCommand.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Step); } } } #endregion ResultCheckStepLots = newCommand.IGroupSecurity.CheckStepLots(Minimum, Maximum, Step, newCommand.Size); if (ResultCheckStepLots) { newCommand.DealerCode = code; newCommand.Symbol.MarketAreaRef.AddCommand(newCommand); StringResult = subValue[0] + "$" + true + "," + "MCM001"; } else { StringResult = subValue[0] + "$" + false + "," + "MCM003"; } } else { StringResult = subValue[0] + "$" + false + "," + "MCM002"; } } else { StringResult = subValue[0] + "$" + false + "," + "MCM006"; string content = "'" + code + "': manager open command failed(not enough rights)"; string comment = "[manager open command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + "," + "MCM003"; } } else { StringResult = subValue[0] + "$" + false + "," + "MCM004"; } } else { StringResult = subValue[0] + "$" + false + "," + "MCM006"; string content = "'" + code + "': manager open command failed(not enough rights)"; string comment = "[manager open command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + "," + "MCM005"; string content = "'" + code + "': manager open command failed(invalid ip)"; string comment = "[manager open command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } break; #endregion #region FUNCTION IN CANDLES(LOG) case "AddNewCandles": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool Result = false; string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 8) { DateTime Time; double High = 0; double Low = 0; double Open = 0; double Close = 0; double openAsk = 0; double highAsk = 0; double lowAsk = 0; double closeAsk = 0; int Volume = 0; int TimeFrame = 0; DateTime.TryParse(subParameter[1], out Time); double.TryParse(subParameter[2], out High); double.TryParse(subParameter[3], out Low); double.TryParse(subParameter[4], out Open); double.TryParse(subParameter[5], out Close); int.TryParse(subParameter[6], out Volume); int.TryParse(subParameter[7], out TimeFrame); //double.TryParse(subParameter[8], out openAsk); //double.TryParse(subParameter[9], out highAsk); //double.TryParse(subParameter[10], out lowAsk); //double.TryParse(subParameter[11], out closeAsk); ProcessQuoteLibrary.Business.Candles objCandles = new ProcessQuoteLibrary.Business.Candles(); objCandles.Close = Close; objCandles.CloseAsk = closeAsk; objCandles.High = High; objCandles.HighAsk = highAsk; objCandles.Low = Low; objCandles.LowAsk = lowAsk; objCandles.Name = subParameter[0]; objCandles.Open = Open; objCandles.OpenAsk = openAsk; objCandles.Time = Time; objCandles.TimeFrame = TimeFrame; objCandles.Volume = Volume; int ResultAdd = ProcessQuoteLibrary.Business.QuoteProcess.AddCandles(objCandles); if (ResultAdd > 0) Result = true; #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': XAUUSD 1 bars added string status = "[Failed]"; if (ResultAdd > 0) status = "[Success]"; string content = "'" + code + "': " + subParameter[0] + " 1 bars added"; string comment = "[add new candles]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + Result + "," + ResultAdd; } else { StringResult = subValue[0] + "$" + false + "," + -1; } } else { StringResult = subValue[0] + "$MCM005"; } } break; case "DeleteCandles": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool Result = false; string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 2) { int CandlesID = 0; int TimeFrame = 0; int.TryParse(subParameter[0], out CandlesID); int.TryParse(subParameter[1], out TimeFrame); Result = ProcessQuoteLibrary.Business.QuoteProcess.DeleteCandlesByID(CandlesID, TimeFrame); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': XAUUSD M1 1 bars deleted string status = "[Failed]"; if (Result) status = "[Success]"; string content = "'" + code + "': " + subParameter[0] + " 1 bars deleted"; string comment = "[delete candles]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + Result; } else { StringResult = subValue[0] + "$" + false; } } else { StringResult = subValue[0] + "$MCM005"; } } break; case "UpdateCandles": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool Result = false; string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 8) { int CandlesID = 0; DateTime Time; int Volume = 0; double Open = 0; double Close = 0; double High = 0; double Low = 0; double openAsk = 0; double highAsk = 0; double lowAsk = 0; double closeAsk = 0; int TimeFrame = 0; int.TryParse(subParameter[0], out CandlesID); DateTime.TryParse(subParameter[1], out Time); int.TryParse(subParameter[2], out Volume); double.TryParse(subParameter[3], out Open); double.TryParse(subParameter[4], out Close); double.TryParse(subParameter[5], out High); double.TryParse(subParameter[6], out Low); int.TryParse(subParameter[7], out TimeFrame); //double.TryParse(subParameter[8], out openAsk); //double.TryParse(subParameter[9], out highAsk); //double.TryParse(subParameter[10], out lowAsk); //double.TryParse(subParameter[11], out closeAsk); ProcessQuoteLibrary.Business.Candles objCandles = new ProcessQuoteLibrary.Business.Candles(); objCandles.Open = Open; objCandles.High = High; objCandles.Low = Low; objCandles.Close = Close; //objCandles.OpenAsk = openAsk; //objCandles.HighAsk = highAsk; //objCandles.LowAsk = lowAsk; //objCandles.CloseAsk = closeAsk; objCandles.ID = CandlesID; objCandles.Time = Time; objCandles.TimeFrame = TimeFrame; objCandles.Volume = Volume; Result = ProcessQuoteLibrary.Business.QuoteProcess.UpdateCandleOnline(objCandles); StringResult = subValue[0] + "$" + Result; } else { StringResult = subValue[0] + "$" + false; } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region FUNCTION IN JOURNAL case "AddJournal": { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 4) { int typeID = 0; int.TryParse(subParameter[0], out typeID); bool resultAdd = TradingServer.Facade.FacadeAddNewSystemLog(typeID, subParameter[1], subParameter[2], ipAddress, code); StringResult = subValue[0] + "$" + resultAdd; } else { StringResult = subValue[0] + "$" + false; } } break; #endregion #region REOPEN COMMAND(LOG) case "ReOpenComamnd": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code); if (checkRule) { string[] subParameter = subValue[1].Split(','); bool resultRe = false; if (subParameter.Length == 16) { #region MAP VALUE Business.OpenTrade result = new OpenTrade(); int commandHistoryID; int commandType; double lots; //string symbol; DateTime openTime; double openPrice; double stopLoss; DateTime closeTime; double closePrice; double takeProfit; double commission; double agentCommission; double swap; //string comment; double taxes; DateTime expTime; int.TryParse(subParameter[0], out commandHistoryID); int.TryParse(subParameter[1], out commandType); double.TryParse(subParameter[2], out lots); //Symbol subparameter[3] DateTime.TryParse(subParameter[4], out openTime); double.TryParse(subParameter[5], out openPrice); double.TryParse(subParameter[6], out stopLoss); DateTime.TryParse(subParameter[7], out closeTime); double.TryParse(subParameter[8], out closePrice); double.TryParse(subParameter[9], out takeProfit); double.TryParse(subParameter[10], out commission); double.TryParse(subParameter[11], out agentCommission); double.TryParse(subParameter[12], out swap); //subParameter[13], out comment double.TryParse(subParameter[14], out taxes); DateTime.TryParse(subParameter[15], out expTime); #endregion result = TradingServer.Facade.FacadeGetCommandHistoryByCommandID(commandHistoryID); if (result != null) { Business.OpenTrade tempOpenTrade = new OpenTrade(); tempOpenTrade = TradingServer.ClientFacade.FillInstanceOpenTrade(subParameter[3], result.Investor.InvestorID, commandType); if (tempOpenTrade.Investor != null && tempOpenTrade.Symbol != null && tempOpenTrade.IGroupSecurity != null) { #region VALID INVESTOR, SYMBOL, IGROUPSECURITY INSTANCE //SET NEW DATA tempOpenTrade.Size = lots; tempOpenTrade.OpenTime = result.OpenTime; tempOpenTrade.OpenPrice = openPrice; tempOpenTrade.StopLoss = stopLoss; tempOpenTrade.CloseTime = closeTime; tempOpenTrade.ClosePrice = closePrice; tempOpenTrade.TakeProfit = takeProfit; tempOpenTrade.Commission = commission; tempOpenTrade.AgentCommission = agentCommission; tempOpenTrade.Swap = swap; //tempOpenTrade.Swap = 0; tempOpenTrade.Taxes = taxes; tempOpenTrade.ExpTime = expTime; tempOpenTrade.Comment = subParameter[13]; tempOpenTrade.CommandCode = result.CommandCode; tempOpenTrade.IsServer = true; tempOpenTrade.IsReOpen = true; tempOpenTrade.DealerCode = code; tempOpenTrade.IsActivePending = result.IsActivePending; tempOpenTrade.IsStopLossAndTakeProfit = result.IsStopLossAndTakeProfit; //CHECK IF PENDING ORDER THEN SET PROFIT = 0(BECAUSE, IF PENDING ORDER WITH PROFIT != 0 THEN WHEN STOP OUT //SYSTEM WILL PLUS PROFIT TO BALANCE bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(tempOpenTrade.Type.ID); if (isPending) tempOpenTrade.Profit = 0; tempOpenTrade.Symbol.MarketAreaRef.AddCommand(tempOpenTrade); //DELETE COMMAND HISTORY resultRe = TradingServer.Facade.FacadeDeleteCommandHistory(commandHistoryID); if (resultRe) { if (Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; for (int j = 0; j < count; j++) { if (Business.Market.InvestorList[j].InvestorID == tempOpenTrade.Investor.InvestorID) { #region UPDATE BALANCE ACCOUNT OF INVESTOR AFTER REOPEN COMMAND double totalProfit = result.Profit + result.Commission + result.Swap; //CHANGE FORMAT REOPEN COMMAND(DONT RETURN SWAP TO BALANCE) //double totalProfit = result.Profit + result.Commission; double totalBalance = Business.Market.InvestorList[j].Balance - totalProfit; #endregion //UPDATE BALANCE IN DATABASE bool updateBalance = TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[j].InvestorID, totalBalance); if (updateBalance) { Business.Market.InvestorList[j].Balance -= totalProfit; //RECALCULATION ACCOUNT OF INVESTOR Business.Market.InvestorList[j].ReCalculationAccountInit(); if (Business.Market.InvestorList[j].ClientCommandQueue == null) Business.Market.InvestorList[j].ClientCommandQueue = new List<string>(); string message = "ROC53709"; Business.Market.InvestorList[j].ClientCommandQueue.Add(message); } else { resultRe = false; } break; } } } } #endregion #region INSERT SYSTEM LOG //'2222': restore order #11235348 //'9720467': restore order #11235348, sell 5.00 XAUUSD //'2222': open order #11235248 for '9720467' modified - sell 5.00 XAUUSD at 1.44730 -> sell 5.00 XAUUSD at 1.44730 //INSERT SYSTEM LOG 1 string content = "'" + code + "': restore order #" + tempOpenTrade.CommandCode; string comment = "[restore order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); //INSERT SYSTEM LOG 2 string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2); string sizeBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(result.Size.ToString(), 2); string strOpenPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), tempOpenTrade.Symbol.Digit); string strOpenPriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(result.OpenPrice.ToString(), result.Symbol.Digit); string mode = string.Empty; string content1 = string.Empty; string type = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(tempOpenTrade.Type.ID); string typeBefore = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(result.Type.ID); string strCommission = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(commission.ToString(), 2); string strAgentCommission = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(agentCommission.ToString(), 2); string strStopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(stopLoss.ToString(), tempOpenTrade.Symbol.Digit); string strTakeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(takeProfit.ToString(), tempOpenTrade.Symbol.Digit); string strSwap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(swap.ToString(), 2); content = "'" + tempOpenTrade.Investor.Code + "': restore order #" + tempOpenTrade.CommandCode + ", [" + typeBefore + "] " + sizeBefore + " " + tempOpenTrade.Symbol.Name; content1 = "'" + code + "': open order #" + tempOpenTrade.CommandCode + " for '" + tempOpenTrade.Investor.Code + "' modified - [" + typeBefore + "] " + sizeBefore + " " + result.Symbol.Name + " at " + strOpenPriceBefore + " sl: " + strStopLoss + " tp: " + strTakeProfit + " cm: " + strCommission + " agent commission: " + strAgentCommission + " swap: " + strSwap; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); TradingServer.Facade.FacadeAddNewSystemLog(5, content1, comment, ipAddress, code); #endregion } else { if (tempOpenTrade.Investor == null) { StringResult = subValue[0] + "$MCM007"; string content = "'" + code + "': restore order #" + tempOpenTrade.CommandCode + " failed(investor account not found)"; string comment = "[restore order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } if (tempOpenTrade.Symbol == null) { StringResult = subValue[0] + "$MCM008"; string content = "'" + code + "': restore order #" + tempOpenTrade.CommandCode + " failed(symbol not found)"; string comment = "[restore order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } if (tempOpenTrade.IGroupSecurity == null) { StringResult = subValue[0] + "$MCM009"; string content = "'" + code + "': restore order #" + tempOpenTrade.CommandCode + " failed(symbol account not found)"; string comment = "[restore order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } } } StringResult = subValue[0] + "$" + resultRe; } else { StringResult = subValue[0] + "$MCM006"; string content = "'" + code + "': restore order failed(not enough rights)"; string comment = "[restore order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$MCM005"; string content = "'" + code + "': restore order failed(invalid ip)"; string comment = "[restore order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } break; #endregion #region ADD MARKET CONFIG(LOG) case "AddMarketConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int ResultAddNew = -1; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); if (Result != null) { int countConfig = Result.Count; for (int m = 0; m < countConfig; m++) { ResultAddNew = TradingServer.Facade.FacadeAddNewMarketConfig(-1, Result[m].Name, Result[m].Code, Result[m].BoolValue, Result[m].StringValue, Result[m].NumValue, Result[m].DateValue); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': symbol config added/changed ['XAUUSD'] string status = "[Failed]"; if (ResultAddNew > 0) status = "[Success]"; string content = "'" + code + "': market config added/changed ['" + Result[m].Name + "'] " + status; string comment = "[add market]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } if (ResultAddNew > 0) { Facade.FacadeSendNoticeManagerChangeSymbol(2, Result[0].SecondParameterID); } StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region ADD TICK FROM MANAGER case "AddTickByManager": { string[] subParameter = subValue[1].Split(','); bool result = false; if (subParameter.Length == 3) { double bid, ask; double.TryParse(subParameter[1], out bid); double.TryParse(subParameter[2], out ask); string symbol = subParameter[0]; Symbol symbolInstance = null; for (int i = Market.SymbolList.Count - 1; i >= 0; i--) { if (symbol == Market.SymbolList[i].Name) { symbolInstance = Market.SymbolList[i]; break; } } if (symbolInstance != null) { bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitTickManager(code); checkRule = true; if (checkRule) { Business.Tick newTick = new Tick(); newTick.Ask = ask; newTick.Bid = bid; newTick.SymbolName = symbol; newTick.IsManager = true; newTick.TickTime = DateTime.Now; this.UpdateTick(newTick); result = true; string content = "'" + code + "': add tick " + symbol + " " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(bid.ToString(),symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(ask.ToString(),symbolInstance.Digit) + " (" + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Bid.ToString() ,symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Ask.ToString(),symbolInstance.Digit) + ")"; string comment = "[add tick]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } else { string content = "'" + code + "': add tick failed (not enough rights) " + symbol + " " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(bid.ToString(), symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(ask.ToString(), symbolInstance.Digit) + " (" + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Bid.ToString(), symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Ask.ToString(), symbolInstance.Digit) + ")"; string comment = "[add tick]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } else { string content = "'" + code + "': add tick failed (invalid ip) " + symbol + " " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(bid.ToString(), symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(ask.ToString(), symbolInstance.Digit) + " (" + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Bid.ToString(), symbolInstance.Digit) + " / " + TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(symbolInstance.TickValue.Ask.ToString(), symbolInstance.Digit) + ")"; string comment = "[add tick]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } } StringResult = subValue[0] + "$" + result; } break; #endregion #region SEND INTERNAL MAIL SERVER TO CLIENT case "SendInternalMailToClient": { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { string subject = TradingServer.Model.TradingCalculate.Instance.ConvertHexToString(subParameter[0]); string from = TradingServer.Model.TradingCalculate.Instance.ConvertHexToString(subParameter[1]); string fromName = TradingServer.Model.TradingCalculate.Instance.ConvertHexToString(subParameter[2]); string content = TradingServer.Model.TradingCalculate.Instance.ConvertHexToString(subParameter[3]); List<string> listInvestorCode = new List<string>(); for (int j = 4; j < subParameter.Length; j++) { string login = subParameter[j]; listInvestorCode.Add(login); } bool flag = false; if (listInvestorCode != null && listInvestorCode.Count > 0) { int count = listInvestorCode.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorList != null) { int countInvestor = Business.Market.InvestorList.Count; for (int j = 0; j < countInvestor; j++) { if (Business.Market.InvestorList[j].Code.Trim() == listInvestorCode[i].Trim()) { bool permit = Facade.FacadeCheckPermitAgentSendMail(from, Business.Market.InvestorList[j].InvestorGroupInstance.InvestorGroupID); if (!permit) { flag = true; break; } #region SEARCH INVESTOR IN INVESTOR LIST if (Business.Market.InvestorList[j].IsOnline) { if (Business.Market.InvestorList[j].ClientCommandQueue == null) Business.Market.InvestorList[j].ClientCommandQueue = new List<string>(); Business.InternalMail newInternalMailMessage = new InternalMail(); newInternalMailMessage.Content = content; newInternalMailMessage.From = from; newInternalMailMessage.FromName = fromName; newInternalMailMessage.Subject = subject; newInternalMailMessage.Time = DateTime.Now; newInternalMailMessage.To = listInvestorCode[i]; newInternalMailMessage.ToName = Business.Market.InvestorList[j].NickName; newInternalMailMessage.IsNew = true; //ADD NEW MESSAGE TO DATABASE int id = TradingServer.Facade.FacadeAddNewInternalMail(newInternalMailMessage); string message = "ITM21358$" + id + "█" + subject + "█" + from + "█" + fromName + "█" + newInternalMailMessage.Time.ToString() + "█" + newInternalMailMessage.IsNew.ToString() + "█" + content; //TradingServer.Facade.FacadeAddNewInternalMail( int countInvestorOnline = Business.Market.InvestorList[j].CountInvestorOnline(Business.Market.InvestorList[j].InvestorID); if (countInvestorOnline > 0) Business.Market.InvestorList[j].ClientCommandQueue.Add(message); } else { Business.InternalMail newInternalMailMessage = new InternalMail(); newInternalMailMessage.Content = content; newInternalMailMessage.From = from; newInternalMailMessage.FromName = fromName; newInternalMailMessage.Subject = subject; newInternalMailMessage.Time = DateTime.Now; newInternalMailMessage.To = listInvestorCode[i]; newInternalMailMessage.ToName = Business.Market.InvestorList[j].NickName; newInternalMailMessage.IsNew = true; //ADD NEW MESSAGE TO DATABASE TradingServer.Facade.FacadeAddNewInternalMail(newInternalMailMessage); } #endregion flag = true; } } if (!flag) { Business.InternalMail newInternalMailMessage = new InternalMail(); newInternalMailMessage.Content = content; newInternalMailMessage.From = from; newInternalMailMessage.FromName = fromName; newInternalMailMessage.Subject = subject; newInternalMailMessage.Time = DateTime.Now; newInternalMailMessage.To = listInvestorCode[i]; newInternalMailMessage.IsNew = true; int InvestorID = TradingServer.Facade.FacadeGetInvestorIDByCode(listInvestorCode[i]); if (InvestorID != -1) { Business.Agent agent = new Business.Agent(); agent = TradingServer.Facade.FacadeGetAgentByInvestorID(InvestorID); if (agent != null) { if (agent.Name == "") { newInternalMailMessage.ToName = newInternalMailMessage.To; } else { newInternalMailMessage.ToName = agent.Name; } } else { newInternalMailMessage.ToName = newInternalMailMessage.To; } } else { newInternalMailMessage.ToName = newInternalMailMessage.To; } int id = TradingServer.Facade.FacadeAddNewInternalMail(newInternalMailMessage); #region SEARCH AGENT IN AGENT LIST for (int j = 0; j < Business.Market.AgentList.Count; j++) { if (Business.Market.AgentList[j].Code == listInvestorCode[i]) { //add here Business.Market.AgentList[j].AgentMail.Add(newInternalMailMessage); Facade.FacadeSendNoticeManagerChangeMail(1, id, Business.Market.AgentList[j].AgentID); break; } } #endregion } } } } StringResult = subValue[0] + "$" + flag.ToString(); } } break; #endregion #region SEND INTERMAIL CLIENT TO SERVER case "ClientSendInternalMailToServer": { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 4) { string subject = subParameter[0]; string from = subParameter[1]; string content = subParameter[2]; string to = subParameter[3]; if (Business.Market.AgentList != null) { bool flag = false; int count = Business.Market.AgentList.Count; for (int j = 0; j < count; j++) { if (Business.Market.AgentList[j].Code == to) { if (Business.Market.AgentList[j].IsOnline) { } else { } flag = true; break; } } } } } break; #endregion #region SEND COMMAND LOGOUT CLIENT case "LogOffClient": { bool result = false; int investorID = 0; if (int.TryParse(subValue[1], out investorID)) { Business.Investor tempInvestor = new Investor(); tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(investorID); if (tempInvestor != null) { bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID); if (checkGroup) { result = Business.Market.SendNotifyToClient("LOFF14790251", 3, investorID); if (result) { string content = "'" + code + "': logoff '" + tempInvestor.Code + "' [Success]"; string comment = "[logoff client]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); } else { string content = "'" + code + "': logoff '" + tempInvestor.Code + "' [Failed]"; string comment = "[logoff client]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); } } else { string content = "'" + code + "': logoff '" + tempInvestor.Code + "' failed(not enough rights)"; string comment = "[logoff client]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); } } else { string content = "'" + code + "': logoff '" + tempInvestor.Code + "' failed(invalid ip)"; string comment = "[logoff client]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); } } } StringResult = subValue[0] + "$" + result; } break; #endregion //Command Delete // #region Delete Investor Group(LOG) case "DeleteInvestorGroup": { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 1) { int InvestorGroupID = 0; int.TryParse(subParameter[0], out InvestorGroupID); StringResult = subValue[0] + "$" + this.DeleteGroup(InvestorGroupID); } } } break; case "DeleteInvestorGroupByName": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); string resultDelete = string.Empty; if (subParameter.Length == 1) { resultDelete = this.DeleteGroup(subParameter[0]); StringResult = subValue[0] + "$" + resultDelete; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG string status = "[Failed]"; if (resultDelete == "DSyE010") status = "[Success]"; string content = "'" + code + "': " + subParameter[0] + " has been delete " + status; string comment = "[delete group]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Delete Investor Group Config case "DeleteInvestorGroupConfig": { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int InvestorGroupConfigID = 0; int.TryParse(subParameter[0], out InvestorGroupConfigID); bool Result = false; Result = TradingServer.Facade.FacadeDeleteInvestorGroupConfig(InvestorGroupConfigID); StringResult = subValue[0] + "$" + Result.ToString(); } } } break; #endregion #region Delete IGroupSymbol case "DeleteIGroupSymbol": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int IGroupSymbolID = 0; int.TryParse(subParameter[0], out IGroupSymbolID); bool Result = false; Result = TradingServer.Facade.FacadeDeleteIGroupSymbol(IGroupSymbolID); StringResult = subValue[0] + "$" + Result.ToString(); } } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Delete IGroupSecurityConfig case "DeleteIGroupSymbolConfigByIGroupSymbolID": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int IGroupSymbolID = -1; int.TryParse(subValue[1], out IGroupSymbolID); StringResult = subValue[0] + "$" + TradingServer.Facade.FacadeDeleteIGroupSymbolConfigByIGroupSymbolID(IGroupSymbolID); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Delete IGroupSecurity case "DeleteIGroupSecurity": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int IGroupSecurityID = 0; int.TryParse(subParameter[0], out IGroupSecurityID); bool Result = false; Result = TradingServer.Facade.FacadeDeleteIGroupSecurityByIGroupSecurityID(IGroupSecurityID); StringResult = subValue[0] + "$" + Result.ToString(); } } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Delete IGroupSecurityConfig case "DeleteIGroupSecurityConfigByIGroupSecurityID": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int IGroupSecurityID = -1; int.TryParse(subValue[1], out IGroupSecurityID); StringResult = subValue[0] + "$" + TradingServer.Facade.FacadeDeleteIGroupSecurityConfigByIGroupSecurity(IGroupSecurityID); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Delete Security(LOG) case "DeleteSecurityByName": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); string resultDelete = string.Empty; if (subParameter.Length == 1) { resultDelete = this.DeleteSecurity(subParameter[0]); StringResult = subValue[0] + "$" + resultDelete; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG string status = "[Failed]"; if (resultDelete == "DSyE006") status = "[Success]"; string content = "'" + code + "': " + subParameter[0] + " has been delete " + status; string comment = "[delete security]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } else { StringResult = subValue[0] + "$MCM005"; } } break; case "DeleteSecurityByID": { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 1) { int SecurityID = 0; int.TryParse(subParameter[0], out SecurityID); StringResult = subValue[0] + "$" + this.DeleteSecurity(SecurityID); } } } break; #endregion #region Delete Symbol(LOG) case "DeleteSymbol": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 1) { string result = this.DeleteSymbol(subParameter[0]); StringResult = subValue[0] + "$" + result; #region INSERT SYSTEM LOG //INSERT SYSTEM LOG string status = "[Failed]"; if (result == "DSyE000") status = "[Success]"; string content = "'" + code + "': " + subParameter[0] + " has been delete " + status; string comment = "[delete symbol]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Delete TradingConfig(SymbolConfig) case "DeleteTradingConfig": { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int TradingConfigID = 0; int.TryParse(subParameter[0], out TradingConfigID); bool Result = false; Result = TradingServer.Facade.FacadeDeleteTradingConfig(TradingConfigID); StringResult = subValue[0] + "$" + Result.ToString(); } } } break; #endregion #region Delete SecurityConfig case "DeleteSecurityConfig": { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int SecurityConfigID = 0; int.TryParse(subParameter[0], out SecurityConfigID); bool Result = false; Result = TradingServer.Facade.FacadeDeleteSecurityConfigBySecurityConfigID(SecurityConfigID); StringResult = subValue[0] + "$" + Result.ToString(); } } } break; #endregion #region Delete Investor case "DeleteInvestor": { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int Result = -1; int InvestorID = 0; int.TryParse(subParameter[0], out InvestorID); Result = TradingServer.Facade.FacadeDeleteInvestor(InvestorID); StringResult = subValue[0] + "$" + Result.ToString(); } } } break; #endregion #region Delete Agent case "DeleteAgentByID": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { if (subValue[1].Length > 0) { int Result = -1; int AgentID = 0; int.TryParse(subValue[1], out AgentID); TradingServer.Facade.FacadeManagerLogout(AgentID); TradingServer.Facade.FacadeAdminLogout(AgentID); Business.Agent agent = new Business.Agent(); agent = TradingServer.Facade.FacadeGetAgentByAgentID(AgentID); Result = TradingServer.Facade.FacadeDeleteIAgentSecurityByAgentID(AgentID); if (Result != -1) { Result = TradingServer.Facade.FacadeDeleteIAgentGroupByAgentID(AgentID); } if (Result != -1) { Result = TradingServer.Facade.FacadeDeletePermitByAgentID(AgentID); } if (Result != -1) { Result = TradingServer.Facade.FacadeDeleteAgent(AgentID); } if (Result != -1) { Result = TradingServer.Facade.FacadeDeleteInvestor(agent.InvestorID); } StringResult = subValue[0] + "$" + Result.ToString(); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG string status = "[Failed]"; if (Result > 0) status = "[Success]"; string content = "'" + code + "': " + agent.Name + " has been delete " + status; string comment = "[delete agent]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Delete Alert case "DeleteAlertByID": { if (!string.IsNullOrEmpty(subValue[1])) { if (subValue[1].Length > 0) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int Result = -1; int alertID = int.Parse(subParameter[0]); string symbol = subParameter[1]; int investorID = int.Parse(subParameter[2]); Result = TradingServer.Facade.FacadeDeleteAlertByID(alertID, symbol, investorID); if (Result != -1) { StringResult = subValue[0] + "$" + alertID; } else { StringResult = subValue[0] + "$" + Result.ToString(); } } } } } break; case "DeleteAlert": { if (!string.IsNullOrEmpty(subValue[1])) { if (subValue[1].Length > 0) { string[] subParameter = subValue[1].Split('{'); if (subParameter.Length > 0) { int Result = -1; int alertID = int.Parse(subParameter[0]); string symbol = subParameter[1]; int investorID = int.Parse(subParameter[2]); Result = TradingServer.Facade.FacadeDeleteAlertByID(alertID, symbol, investorID); if (Result != -1) { StringResult = subValue[0] + "$" + alertID; } else { StringResult = subValue[0] + "$" + Result.ToString(); } } } } } break; #endregion #region Delete Mail case "DeleteMailByID": { if (!string.IsNullOrEmpty(subValue[1])) { bool Result = false; if (subValue[1].Length > 0) { int mailID = int.Parse(subValue[1]); Result = TradingServer.Facade.DeleteInternalMail(mailID); } StringResult = subValue[0] + "$" + Result.ToString(); } } break; #endregion #region Delete Permit case "DeletePermitByID": { if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { bool Result = false; int PermitID = 0; int.TryParse(subParameter[0], out PermitID); Result = TradingServer.Facade.FacadeDeletePermitByID(PermitID); StringResult = subValue[0] + "$" + Result.ToString(); } } } break; #endregion #region Delete IAgentSecurity case "DeleteIAgentSecurityByID": { if (!string.IsNullOrEmpty(subValue[1])) { bool ResultAddNew = false; int IAgentSecurityID = 0; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out IAgentSecurityID); ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentSecurityByID(IAgentSecurityID); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } } break; case "DeleteIAgentSecurityByAgentID": { if (!string.IsNullOrEmpty(subValue[1])) { int ResultAddNew = -1; int AgentID = 0; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out AgentID); ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentSecurityByAgentID(AgentID); StringResult = subValue[0] + "$" + ResultAddNew; } } } break; case "DeleteIAgentSecurityBySecurityID": { if (!string.IsNullOrEmpty(subValue[1])) { bool ResultAddNew = false; int SecurityID = 0; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out SecurityID); ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentSecurityBySecurityID(SecurityID); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } } break; #endregion #region Delete IAgentGroup case "DeleteIAgentGroupByID": { if (!string.IsNullOrEmpty(subValue[1])) { bool ResultAddNew = false; int IAgentGroupID = 0; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out IAgentGroupID); ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentGroupByID(IAgentGroupID); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } } break; case "DeleteIAgentGroupByAgentID": { if (!string.IsNullOrEmpty(subValue[1])) { int ResultAddNew = -1; int AgentID = 0; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out AgentID); ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentGroupByAgentID(AgentID); StringResult = subValue[0] + "$" + ResultAddNew; } } } break; case "DeleteIAgentGroupByInvestorGroupID": { if (!string.IsNullOrEmpty(subValue[1])) { bool ResultAddNew = false; int InvestorGroupID = 0; string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int.TryParse(subParameter[0], out InvestorGroupID); ResultAddNew = TradingServer.Facade.FacadeDeleteIAgentGroupByInvestorGroupID(InvestorGroupID); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } } } break; #endregion #region Delete Investor Profile case "DeleteInvestorProfile": { //if (!string.IsNullOrEmpty(subValue[1])) //{ // string[] subParameter = subValue[1].Split(','); // if (subParameter.Length > 0) // { // bool Result = false; // int InvestorID = 0; // int.TryParse(subParameter[0], out InvestorID); // Result = TradingServer.Facade.FacadeDeleteInvestorProfileByInvestorID(InvestorID); // StringResult = Result.ToString(); // } //} } break; #endregion #region Close Command By Manager(LOG) case "CloseCommandByManager": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code); if (checkRule) { bool Result = false; int CommandID = -1; double Size = 0; double ClosePrices = 0; string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 3) { int.TryParse(subParameter[0], out CommandID); double.TryParse(subParameter[1], out Size); double.TryParse(subParameter[2], out ClosePrices); Business.OpenTrade tempOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(CommandID); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempOpenTrade.Investor.InvestorGroupInstance.InvestorGroupID); if (checkGroup) { Result = TradingServer.ClientFacade.FacadeCloseSpotCommandByManager(CommandID, Size, ClosePrices); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': account '9789300', close order #11349528 buy 2.00 EURUSD at 1.4624 string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2); string mode = TradingServer.Facade.FacadeGetTypeNameByTypeID(tempOpenTrade.Type.ID); string closePrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(subParameter[2], tempOpenTrade.Symbol.Digit); string content = "'" + code + "': account '" + tempOpenTrade.Investor.Code + "' close order #" + tempOpenTrade.CommandCode + " " + mode + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + closePrice; string comment = "[manager close command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); #endregion if (Result) StringResult = subValue[0] + "$" + Result + ",MCM001"; else StringResult = subValue[0] + "$" + Result + ",MCM004"; } else { StringResult = subValue[0] + "$" + false + ",MCM006"; string content = "'" + code + "': manager close command failed(not enough rights)"; string comment = "[manager close command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + ",MCM004"; string content = "'" + code + "': manager close command failed(invalid parameter)"; string comment = "[manager close command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + ",MCM006"; string content = "'" + code + "': manager close command failed(not enough rights)"; string comment = "[manager close command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + ",MCM005"; string content = "'" + code + "': manager close command failed(invalid ip)"; string comment = "[manager close command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } break; #endregion #region Close List Command By Manager case "CloseListCommandByManager": { bool Result = false; string[] subParamter = subValue[1].Split(','); if (subParamter.Length > 0) { int countCommand = subParamter.Length; for (int j = 0; j < countCommand; j++) { int CommandID = -1; double Size = 0; double ClosePrices = 0; int.TryParse(subParamter[j], out CommandID); j++; double.TryParse(subParamter[j], out Size); j++; double.TryParse(subParamter[j], out ClosePrices); Result = TradingServer.ClientFacade.FacadeCloseSpotCommandByManager(CommandID, Size, ClosePrices); } } StringResult = subValue[0] + "$" + Result; } break; #endregion #region Delete Command By Manager(Complete)(LOG) case "DeleteCommandByManager": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code); if (checkRule) { bool Result = false; int CommandID = -1; int.TryParse(subValue[1], out CommandID); Business.OpenTrade tempOpenTrade = new OpenTrade(); tempOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(CommandID); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempOpenTrade.Investor.InvestorGroupInstance.InvestorGroupID); if (checkGroup) { if (tempOpenTrade.Symbol == null || tempOpenTrade.Investor == null || tempOpenTrade.IGroupSecurity == null || tempOpenTrade.Type == null) return StringResult = subValue[0] + "$" + false; #region INSERT SYSTEM LOG //'2222': account '9720467', delete order #11232898 buy 1.00 EURUSD at 1.4474 string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), tempOpenTrade.Symbol.Digit); string comment = "[manager delete command]"; string type = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(tempOpenTrade.Type.ID); string content = "'" + code + "': account '" + tempOpenTrade.Investor.Code + "' delete order #" + tempOpenTrade.CommandCode + " " + type + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + openPrice; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); #endregion Result = TradingServer.Facade.FacadeDeleteOpenTradeByManager(CommandID); if (Result) StringResult = subValue[0] + "$" + Result + ",MCM001"; else StringResult = subValue[0] + "$" + Result + ",MCM004"; } else { StringResult = subValue[0] + "$" + false + ",MCM006"; string content = "'" + code + "': manager delete command failed(not enough rights)"; string comment = "[manager delete command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + ",MCM006"; string content = "'" + code + "': manager delete command failed(not enough rights)"; string comment = "[manager delete command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + ",MCM005"; string content = "'" + code + "': manager delete command failed(invalid ip)"; string comment = "[manager delete command]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } break; #endregion #region DELETE ORDER IN DATABASE case "DeleteOrder": { string[] subParameter = subValue[1].Split(','); bool Result = false; if (subParameter.Length == 2) { int DealID = int.Parse(subParameter[0]); int InvestorID = int.Parse(subParameter[1]); switch (subParameter[1]) { case "OPT001": Result = TradingServer.Facade.FacadeDeleteOpenTradeByID(DealID); if (Result) { TradingServer.Facade.FacadeRemoveOpenTradeInInvestorList(DealID, InvestorID); } break; case "CMH01": Result = TradingServer.Facade.FacadeDeleteCommandHistory(DealID); break; case "IAL01": Result = TradingServer.Facade.FacadeDeleteInvestorAccountLog(DealID); break; } } StringResult = subValue[0] + "$" + Result; } break; #endregion #region DELETE MARKET CONFIG(DELETE HOLIDAY) case "DeleteMarketConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool result = false; int marketConfigID = -1; int.TryParse(subValue[1], out marketConfigID); result = TradingServer.Facade.FacadeDeleteMarketConfig(marketConfigID); StringResult = subValue[0] + "$" + result; } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion //Command Update // #region Update Investor Group(LOG) case "UpdateInvestorGroup": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool resultUpdate = false; Business.InvestorGroup Result = new InvestorGroup(); Result = this.ExtractInvestorGroup(subValue[1]); resultUpdate = Facade.FacadeUpdateInvestorGroup(Result); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': group config added/changed ['test-duc'] //string status = "[Failed]"; if (resultUpdate) { TradingServer.Facade.FacadeCheckUpdateGroupVirtualDealerOnline(); //status = "[Success]"; } //string content = "'" + code + "': group config added/changed ['" + Result.Name + "'] " + status; //string comment = "[update group]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion if (resultUpdate) { //SEND NOTIFY TO MANAGER Facade.FacadeSendNoticeManagerChangeGroup(1, Result.InvestorGroupID); //SEND NOTIFY TO AGENT SERVER Business.AgentNotify newAgentNotify = new AgentNotify(); newAgentNotify.NotifyMessage = "UpdateGroup$" + Result.InvestorGroupID; TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Result); } StringResult = subValue[0] + "$" + resultUpdate.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update Investor Group Config case "UpdateInvestorGroupConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool ResultUpdate = false; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); ResultUpdate = Facade.FacadeUpdateInvestorGroupConfig(Result, ipAddress, code); if (ResultUpdate) { //SEND NOTIFY TO MANAGER Facade.FacadeSendNoticeManagerChangeGroup(2, Result[0].SecondParameterID); //SEND NOTIFY TO AGENT SERVER if (Business.Market.InvestorGroupList != null) { int count = Business.Market.InvestorGroupList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorGroupList[i].InvestorGroupID == Result[0].SecondParameterID) { Business.AgentNotify newAgentNotify = new AgentNotify(); newAgentNotify.NotifyMessage = "UpdateGroup$" + Business.Market.InvestorGroupList[i].InvestorGroupID; TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Business.Market.InvestorGroupList[i]); } } } //SEND NOTIFY TO CLIENT TradingServer.Business.Market.SendNotifyToClient("UIG69345", 1, Result[0].SecondParameterID); } StringResult = subValue[0] + "$" + ResultUpdate.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update IGroupSymbol case "UpdateIGroupSymbol": { bool resultUpdate = false; List<Business.IGroupSymbol> Result = new List<IGroupSymbol>(); Result = this.ExtractIGroupSymbol(subValue[1]); if (Result != null) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { resultUpdate = Facade.FacadeUpdateIGroupSymbol(Result[j].IGroupSymbolID, Result[j].SymbolID, Result[j].InvestorGroupID); } StringResult = subValue[0] + "$" + resultUpdate.ToString(); } } break; #endregion #region Update IGroupSecurity case "UpdateIGroupSecurity": { bool resultUpdate = false; List<Business.IGroupSecurity> Result = new List<IGroupSecurity>(); Result = this.ExtractIGroupSecurity(subValue[1]); if (Result != null) { int countResult = Result.Count; for (int j = 0; j < countResult; j++) { resultUpdate = Facade.FacadeUpdateIGroupSecurity(Result[j].IGroupSecurityID, Result[j].SecurityID, Result[j].InvestorGroupID); } StringResult = subValue[0] + "$" + resultUpdate.ToString(); } } break; #endregion #region Update Security(LOG) case "UpdateSecurity": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool ResultUpdate = false; if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); int MarketAreaID = -1; int.TryParse(subParameter[3], out MarketAreaID); if (subParameter.Length > 0) { int SecurityID = 0; int.TryParse(subParameter[0], out SecurityID); ResultUpdate = TradingServer.Facade.FacadeUpdateSecurity(SecurityID, subParameter[1], subParameter[2], MarketAreaID); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': group config added/changed ['test-duc'] string status = "[Failed]"; if (ResultUpdate) status = "[Success]"; string content = "'" + code + "': security config added/changed ['" + subParameter[1] + "'] " + status; string comment = "[update security]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } StringResult = subValue[0] + "$" + ResultUpdate.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update Symbol(LOG) case "UpdateSymbol": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool resultUpdate = false; if (!string.IsNullOrEmpty(subValue[1])) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int SymbolID = 0; int SecurityID = 0; int RefSymbolID = 0; int MarketAreaID = 0; int.TryParse(subParameter[0], out SymbolID); int.TryParse(subParameter[1], out SecurityID); int.TryParse(subParameter[2], out RefSymbolID); int.TryParse(subParameter[3], out MarketAreaID); //Call Function Update New Symbol resultUpdate = TradingServer.Facade.FacadeUpdateSymbol(SymbolID, SecurityID, RefSymbolID, MarketAreaID, subParameter[4]); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': group config added/changed ['test-duc'] string status = "[Failed]"; if (resultUpdate) { status = "[Success]"; TradingServer.Facade.FacadeCheckUpdateGroupVirtualDealerOnline(); } string content = "'" + code + "': symbol config added/changed ['" + subParameter[4] + "'] " + status; string comment = "[update symbol]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion if (resultUpdate) { Facade.FacadeSendNoticeManagerChangeSymbol(1, SymbolID); //SEND COMMAND TO AGENT SERVER Business.AgentNotify newAgentNotify = new AgentNotify(); newAgentNotify.NotifyMessage = "UpdateSymbol$" + SymbolID; TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify); } StringResult = subValue[0] + "$" + resultUpdate.ToString(); } } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update TradingConfig(SymbolConfig) case "UpdateTradingConfig": { bool resultUpdate = false; List<Business.ParameterItem> Result = new List<ParameterItem>(); //CALL FUNCTION EXTRACT PARAMETER ITEM ONE Result = this.ExtractParameterItem(subValue[1]); int countResult = Result.Count; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { if (countResult > 0) { //for (int j = 0; j < countResult; j++) //{ // resultUpdate = Facade.FacadeUpdateTradingConfig(Result[j]); //} resultUpdate = Facade.FacadeUpdateTradingConfig(Result, code, ipAddress); //string status = "[Failed]"; if (resultUpdate) { //status = "[Success]"; //SEND NOTITY TO MANAGER Facade.FacadeSendNoticeManagerChangeSymbol(2, Result[0].SecondParameterID); //SEND NOTIFY TO CLIENT TradingServer.Business.Market.SendNotifyToClient("UTC534345", 2, Result[0].SecondParameterID); } #region LOG(Duc Comment because in file ParameterItem.TradingConfg have log details) //string symbol = "", spreadDefault = "", spreadBalanace = "", stops = "", execution = ""; //for (int i = Market.SymbolList.Count - 1; i >= 0; i--) //{ // if (Result[0].SecondParameterID == Market.SymbolList[i].SymbolID) // { // symbol = Market.SymbolList[i].Name; // break; // } //} //for (int i = 0; i < Result.Count; i++) //{ // if (Result[i].Code == "S006") // { // execution = Result[i].StringValue; // } // if (Result[i].Code == "S015") // { // stops = Result[i].NumValue; // } // if (Result[i].Code == "S013") // { // spreadDefault = Result[i].NumValue; // } // if (Result[i].Code == "S016") // { // spreadDefault = Result[i].StringValue; // } //} ////'2222': EURUSD5 - spread: 1 / 2, stops: 15, execution: Market //string content = "'" + code + "': " + symbol + " spread default: " + spreadDefault + ", spread balance: " + spreadBalanace // + ", stops: " + stops + ", execution: " + execution + status; //string comment = "[update symbol]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } StringResult = subValue[0] + "$" + resultUpdate.ToString(); } else { StringResult = subValue[0] + "$MCM005"; if (countResult > 0) { #region LOG(Duc Comment because in file parameteritem.tradingconfig have log details) //string symbol = "", spreadDefault = "", spreadBalanace = "", stops = "", execution = ""; //for (int i = Market.SymbolList.Count - 1; i >= 0; i--) //{ // if (Result[0].SecondParameterID == Market.SymbolList[i].SymbolID) // { // symbol = Market.SymbolList[i].Name; // break; // } //} //for (int i = 0; i < Result.Count; i++) //{ // if (Result[i].Code == "S006") // { // execution = Result[i].StringValue; // } // if (Result[i].Code == "S015") // { // stops = Result[i].NumValue; // } // if (Result[i].Code == "S013") // { // spreadDefault = Result[i].NumValue; // } // if (Result[i].Code == "S016") // { // spreadDefault = Result[i].StringValue; // } //} ////'2222': EURUSD5 - spread: 1 / 2, stops: 15, execution: Market //string content = "'" + code + "': " + symbol + " spread default: " + spreadDefault + ", spread balance: " + spreadBalanace // + ", stops: " + stops + ", execution: " + execution + " failed(invalid ip)"; //string comment = "[update symbol]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } } break; #endregion #region UPDATE MARKET CONFIG case "UpdateMarketConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool resultUpdate = false; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); resultUpdate = TradingServer.Facade.FacadeUpdateMarketConfig(Result, ipAddress, code); //int countResult = Result.Count; //for (int j = 0; j < countResult; j++) //{ // resultUpdate = TradingServer.Facade.FacadeUpdateMarketConfig(Result[j]); // #region INSERT SYSTEM LOG // //INSERT SYSTEM LOG // //'2222': symbol config added/changed ['XAUUSD'] // string content = "'" + code + "': market config added/changed ['" + Result[j].Name + "'] "; // string comment = "[update market]"; // TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); // #endregion //} StringResult = subValue[0] + "$" + resultUpdate; } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update SecurityConfig case "UpdateSecurityConfig": { bool ResultUpdate = false; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); int countResult = Result.Count; for (int j = 0; j < countResult; j++) { ResultUpdate = Facade.FacadeUpdateSecurityConfig(Result[j]); } StringResult = subValue[0] + "$" + ResultUpdate.ToString(); } break; #endregion #region Update Investor(LOG) case "UpdateInvestor": { bool resultUpdate = false; bool resultUpdateProfile = false; Business.Investor Result = new Investor(); Result = this.ExtractionInvestor(subValue[1]); bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitAccountManagerAndAdmin(code); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, Result.InvestorGroupInstance.InvestorGroupID); if (checkRule && checkGroup) { //resultUpdate = TradingServer.Facade.FacadeUpdateInvestor(Result); resultUpdate = TradingServer.Facade.FacadeUpdateInvestor(Result, ipAddress, code); //resultUpdateProfile = TradingServer.Facade.FacadeUpdateInvestorProfile(Result); if (resultUpdate) { resultUpdateProfile = TradingServer.Facade.FacadeUpdateInvestorProfile(Result, ipAddress, code); if (Result.PrimaryPwd != "") resultUpdate = TradingServer.Facade.FacadeUpdatePasswordByCode(Result.Code, Result.PrimaryPwd); if (Result.ReadOnlyPwd != "") resultUpdate = TradingServer.Facade.FacadeUpdateReadPwdByCode(Result.Code, Result.ReadOnlyPwd); if (Result.PhonePwd != "") resultUpdate = TradingServer.Facade.FacadeUpdatePhonePwdByCode(Result.Code, Result.PhonePwd); //SEND COMMAND TO AGENT SERVER Business.AgentNotify newAgentNotify = new AgentNotify(); newAgentNotify.NotifyMessage = "UpdateInvestorNotify$" + Result.InvestorID; TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Result.InvestorGroupInstance); } StringResult = subValue[0] + "$" + resultUpdate.ToString(); #region INSERT SYSTEM LOG ////INSERT SYSTEM LOG /////'2222': account '9720467' has been updated //string status = "[Failed]"; //if (resultUpdate) // status = "[Success]"; //string content = "'" + code + "': account '" + Result.Code + "' has been updated " + status; //string comment = "[update account]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } else { StringResult = subValue[0] + "$MCM006"; string content = "'" + code + "': account '" + Result.Code + "' has been updated failed(not enough rights)"; string comment = "[update account]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + "MCM005"; string content = "'" + code + "': account '" + Result.Code + "' has been updated failed(invalid ip)"; string comment = "[update account]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } break; #endregion #region UPDATE PASSWORD BY CODE(LOG) case "UpdatePasswordByCode": { string[] subParameter = subValue[1].Split(','); bool resultUpdate = TradingServer.Facade.FacadeUpdatePasswordByCode(subParameter[0], subParameter[1]); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG ///'2222': account '9720467' change password failed string status = "[Failed]"; if (resultUpdate) status = "[Success]"; string content = "'" + code + "': account '" + subParameter[0] + "' change master password " + status; string comment = "[change password]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + resultUpdate; } break; #endregion #region UPDATE READ PASSWORD BY CODE(LOG) case "UpdateReadPwdByCode": { string[] subParameter = subValue[1].Split(','); bool resultUpdate = TradingServer.Facade.FacadeUpdateReadPwdByCode(subParameter[0], subParameter[1]); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG ///'2222': account '9720467' change password failed string status = "[Failed]"; if (resultUpdate) status = "[Success]"; string content = "'" + code + "': account '" + subParameter[0] + "' change read password " + status; string comment = "[change password]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + resultUpdate; } break; #endregion #region UPDATE PHONE PASSWORD(LOG) case "UpdatePhonePwdByCode": { string[] subParameter = subValue[1].Split(','); bool resultUpdate = TradingServer.Facade.FacadeUpdatePhonePwdByCode(subParameter[0], subParameter[1]); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG ///'2222': account '9720467' change password failed string status = "[Failed]"; if (resultUpdate) status = "[Success]"; string content = "'" + code + "': account '" + subParameter[0] + "' change phone password " + status; string comment = "[change password]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + resultUpdate; } break; #endregion #region Update Agent(LOG) case "UpdateAgent": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool resultUpdate = false; Business.Agent Result = new Agent(); Result = this.ExtractionAgent(subValue[1]); resultUpdate = TradingServer.Facade.FacadeUpdateAgent(Result); if (Result.Pwd != "") resultUpdate = TradingServer.Facade.FacadeUpdatePasswordByCode(Result.Code, Result.Pwd); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': manager configuration has been changed string status = "[Failed]"; if (resultUpdate) status = "[Success]"; string content = "'" + code + "': manager configuration has been changed " + status; string comment = "[update agent]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + resultUpdate.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } break; } case "UpdatePasswordAgent": { bool resultUpdate = false; bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { if (subValue[1] != "") { string[] tempArr = subValue[1].Split('{'); if (tempArr.Length == 3) { int investorID = 0; int.TryParse(tempArr[0], out investorID); if (investorID > 0) { resultUpdate = TradingServer.Facade.FacadeManagerChangePass(investorID,code, tempArr[1], tempArr[2]); } } } StringResult = subValue[0] + "$" + resultUpdate; } else { StringResult = subValue[0] + "$MCM005"; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG string content = ""; if (resultUpdate) { content = "': manager update password [Success]"; } else { if (checkip) { content = "': manager update password [Failed]"; } else { content = "': manager update password (invalid ip)[Failed]"; } } string comment = "[update password agent]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion break; } #endregion #region Update Alert case "UpdateAlert": { bool resultUpdate = false; Business.PriceAlert result = new PriceAlert(); #region Update Alert string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { result.TickOnline = new Tick(); result.Symbol = subParameter[0]; result.Email = subParameter[1]; result.PhoneNumber = subParameter[2]; result.Value = double.Parse(subParameter[3]); #region ConditionAlert & ActionAlert switch (subParameter[4]) { case "LargerBid": { result.AlertCondition = Business.ConditionAlert.LargerBid; break; } case "LargerAsk": { result.AlertCondition = Business.ConditionAlert.LargerAsk; break; } case "LargerHighBid": { result.AlertCondition = Business.ConditionAlert.LargerHighBid; break; } case "LargerHighAsk": { result.AlertCondition = Business.ConditionAlert.LargerHighAsk; break; } case "SmallerBid": { result.AlertCondition = Business.ConditionAlert.SmallerBid; break; } case "SmallerAsk": { result.AlertCondition = Business.ConditionAlert.SmallerAsk; break; } case "SmallerLowBid": { result.AlertCondition = Business.ConditionAlert.SmallerLowBid; break; } case "SmallerLowAsk": { result.AlertCondition = Business.ConditionAlert.SmallerLowAsk; break; } } switch (subParameter[5]) { case "Email": { result.AlertAction = Business.ActionAlert.Email; break; } case "SMS": { result.AlertAction = Business.ActionAlert.SMS; break; } case "Sound": { result.AlertAction = Business.ActionAlert.Sound; break; } } #endregion result.IsEnable = bool.Parse(subParameter[6]); result.InvestorID = int.Parse(subParameter[7]); result.DateCreate = DateTime.Parse(subParameter[8]); result.DateActive = result.DateCreate; result.Notification = subParameter[9]; result.ID = int.Parse(subParameter[10]); } #endregion resultUpdate = TradingServer.Facade.FacadeUpdateAlert(result); StringResult = subValue[0] + "$" + resultUpdate.ToString(); } break; case "ConfigAlert": { bool resultUpdate = false; Business.PriceAlert result = new PriceAlert(); #region Update Alert string[] subParameter = subValue[1].Split('{'); if (subParameter.Length > 0) { result.TickOnline = new Tick(); result.Symbol = subParameter[0]; result.Email = subParameter[1]; result.PhoneNumber = subParameter[2]; result.Value = double.Parse(subParameter[3]); #region ConditionAlert & ActionAlert switch (subParameter[4]) { case "LargerBid": { result.AlertCondition = Business.ConditionAlert.LargerBid; break; } case "LargerAsk": { result.AlertCondition = Business.ConditionAlert.LargerAsk; break; } case "LargerHighBid": { result.AlertCondition = Business.ConditionAlert.LargerHighBid; break; } case "LargerHighAsk": { result.AlertCondition = Business.ConditionAlert.LargerHighAsk; break; } case "SmallerBid": { result.AlertCondition = Business.ConditionAlert.SmallerBid; break; } case "SmallerAsk": { result.AlertCondition = Business.ConditionAlert.SmallerAsk; break; } case "SmallerLowBid": { result.AlertCondition = Business.ConditionAlert.SmallerLowBid; break; } case "SmallerLowAsk": { result.AlertCondition = Business.ConditionAlert.SmallerLowAsk; break; } } switch (subParameter[5]) { case "Email": { result.AlertAction = Business.ActionAlert.Email; break; } case "SMS": { result.AlertAction = Business.ActionAlert.SMS; break; } case "Sound": { result.AlertAction = Business.ActionAlert.Sound; break; } } #endregion result.IsEnable = bool.Parse(subParameter[6]); result.InvestorID = int.Parse(subParameter[7]); result.DateCreate = DateTime.Parse(subParameter[8]); result.DateActive = result.DateCreate; result.Notification = subParameter[9]; result.ID = int.Parse(subParameter[10]); } #endregion resultUpdate = TradingServer.Facade.FacadeUpdateAlert(result); if (resultUpdate) { StringResult = subValue[0] + "$" + result.ID + "{" + result.Symbol + "{" + result.Email + "{" + result.PhoneNumber + "{" + result.Value + "{" + result.AlertCondition + "{" + result.AlertAction + "{" + result.IsEnable + "{" + result.DateCreate + "{" + result.DateActive + "{" + result.InvestorID + "{" + result.Notification; } else { StringResult = subValue[0] + "$"; } } break; #endregion #region Update Mail case "UpdateMailStatus": { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { bool isNew = bool.Parse(subParameter[0]); int mailID = int.Parse(subParameter[1]); TradingServer.Facade.UpdateInternalMailStatus(isNew, mailID); } StringResult = subValue[0] + "$"; } break; #endregion #region UPDATE(RESET) USERCONFIG IPHONE, IPAD, SIVERLIGHT case "AdminResetUserConfig": { int investorID = int.Parse(subValue[1]); bool isUpdate = Investor.DBWInvestorInstance.UpdateAllUserConfig("", "", "", investorID); if (isUpdate) { if (Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorList[i].InvestorID == investorID) { Business.Market.InvestorList[i].UserConfig = ""; Business.Market.InvestorList[i].UserConfigIpad = ""; Business.Market.InvestorList[i].UserConfigIphone = ""; break; } } } } } break; #endregion #region Update Permit(LOG) case "UpdatePermit": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool resultUpdate = false; int AgentID = -1; int RoleID = -1; List<int> ListRoleID = new List<int>(); string[] subParameter = subValue[1].Split(','); int count = subParameter.Length; if (count > 0) { int.TryParse(subParameter[0], out AgentID); for (int i = 1; i < count; i++) { int.TryParse(subParameter[i], out RoleID); ListRoleID.Add(RoleID); } } resultUpdate = TradingServer.Facade.FacadeUpdatePermit(AgentID, ListRoleID); #region INSERT SYSTEM LOG ////INSERT SYSTEM LOG ////'2222': manager configuration has been changed //string status = "[uncomplete]"; //if (resultUpdate) // status = "[complete]"; //string content = "'" + code + "': manager configuration has been changed " + status; //string comment = "[update agent]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion Facade.FacadeSendNoticeManagerChangeAgent(3, AgentID); StringResult = subValue[0] + "$" + resultUpdate.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update IAgentSecurity case "UpdateIAgentSecurity": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { if (!string.IsNullOrEmpty(subValue[1])) { bool resultUpdate = false; List<Business.IAgentSecurity> newListIAgentSecurity = new List<IAgentSecurity>(); newListIAgentSecurity = this.ExtractionIAgentSecurity(subValue[1]); resultUpdate = TradingServer.Facade.FacadeUpdateIAgentSecurity(newListIAgentSecurity); StringResult = subValue[0] + "$" + resultUpdate.ToString(); } } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update IAgentGroup case "UpdateIAgentGroup": { if (!string.IsNullOrEmpty(subValue[1])) { bool resultUpdate = false; int AgentID = -1; int InvestorGroupID = -1; string[] subParameter = subValue[1].Split(','); int count = subParameter.Length; List<int> ListInvestorID = new List<int>(); if (count > 0) { int.TryParse(subParameter[0], out AgentID); for (int i = 1; i < count; i++) { int.TryParse(subParameter[i], out InvestorGroupID); ListInvestorID.Add(InvestorGroupID); } } resultUpdate = TradingServer.Facade.FacadeUpdateIAgentGroup(AgentID, ListInvestorID); Facade.FacadeSendNoticeManagerChangeAgent(2, AgentID); StringResult = subValue[0] + "$" + resultUpdate.ToString(); } } break; #endregion #region Update Investor Profile case "UpdateInvestorProfile": { //Business.InvestorProfile Result = new InvestorProfile(); //Result = this.ExtractInvestorProfile(subValue[1]); //TradingServer.Facade.FacadeUpdateInvestorProfile(Result); StringResult = ""; } break; #endregion #region Update IGroupSecurityConfig case "UpdateIGroupSecurityConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool resultUpdate = false; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); int countResult = Result.Count; for (int j = 0; j < countResult; j++) { resultUpdate = Facade.FacadeUpdateIGroupSecurityConfig(Result[j]); } Business.Market.SendNotifyToClient("USTC0532434", 2, -1); StringResult = subValue[0] + "$" + resultUpdate.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update IGroupSymbolConfig case "UpdateIGroupSymbolConfig": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool resultUpdate = false; List<Business.ParameterItem> Result = new List<ParameterItem>(); Result = this.ExtractParameterItem(subValue[1]); int countResult = Result.Count; for (int j = 0; j < countResult; j++) { resultUpdate = Facade.FacadeUpdateIGroupSymbolConfig(Result[j]); } StringResult = subValue[0] + "$" + resultUpdate.ToString(); } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region Update Online Command(Open Trade)(LOG) case "UpdateOnlineCommandByManager": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code); if (checkRule) { string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 13) { #region MapValue int InvestorID = -1; int CommandID = -1; double Commission = -1; DateTime ExpTime; double OpenPrice = -1; DateTime OpenTime; double StopLoss = -1; double Swap = -1; double TakeProfit = -1; double taxes = 0; double agentCommission = 0; int.TryParse(subParameter[0], out InvestorID); int.TryParse(subParameter[1], out CommandID); double.TryParse(subParameter[2], out Commission); DateTime.TryParse(subParameter[3], out ExpTime); double.TryParse(subParameter[4], out OpenPrice); DateTime.TryParse(subParameter[5], out OpenTime); double.TryParse(subParameter[6], out StopLoss); double.TryParse(subParameter[7], out Swap); double.TryParse(subParameter[8], out TakeProfit); double.TryParse(subParameter[10], out taxes); //comment //double.TryParse(subParameter[12], out agentCommission); Business.OpenTrade tempOpenTrade = new OpenTrade(); tempOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(CommandID); string strOpenPriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), tempOpenTrade.Symbol.Digit); string strTakeProfitBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.TakeProfit.ToString(), 2); string strStopLossBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.StopLoss.ToString(), 2); string strCommissionBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Commission.ToString(), 2); string strAgentCommissionBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.AgentCommission.ToString(), 2); string strSwapBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Swap.ToString(), 2); #endregion bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempOpenTrade.Investor.InvestorGroupInstance.InvestorGroupID); if (checkGroup) { bool ResultUpdate = false; ResultUpdate = TradingServer.Facade.FacadeUpdateOnlineCommand(InvestorID, CommandID, Commission, ExpTime, OpenPrice, OpenTime, StopLoss, Swap, TakeProfit, subParameter[9], taxes, subParameter[11], agentCommission, tempOpenTrade.Size); if (ResultUpdate) StringResult = subValue[0] + "$" + ResultUpdate + "," + "MCM001"; else StringResult = subValue[0] + "$" + ResultUpdate + "," + "MCM004"; Business.Investor tempInvestor = new Investor(); tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(InvestorID); #region INSERT SYSTEM LOG //'2222': account '9789300', modify order #11346382 sell 1.00 XAUUSD at 1504.85 sl: 1506.55 tp: 1503.85 //INSERT SYSTEM LOG if (ResultUpdate) { string comment = "[update order]"; string mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(tempOpenTrade.Type.ID); string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(OpenPrice.ToString(), tempOpenTrade.Symbol.Digit); string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(StopLoss.ToString(), tempOpenTrade.Symbol.Digit); string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(TakeProfit.ToString(), tempOpenTrade.Symbol.Digit); string strCommissionAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Commission.ToString(), 2); string strAgentCommissionAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(agentCommission.ToString(), 2); string strSwapAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Swap.ToString(), 2); //string content = "'" + code + "': account '" + tempInvestor.Code + "' modify order #" + tempOpenTrade.CommandCode + // " " + mode + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + openPrice + " sl: " + stopLoss + " tp: " + takeProfit; string content = "'" + code + "': open order #" + tempOpenTrade.CommandCode + " for '" + tempInvestor.Code + "' modified - " + mode + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + strOpenPriceBefore + " - tp: " + strTakeProfitBefore + " - sl: " + strStopLossBefore + " - cm: " + strCommissionBefore + " - sw: " + strSwapBefore + " -> " + mode + " " + size + " " + tempOpenTrade.Symbol.Name + " at " + openPrice + " - tp: " + takeProfit + " - sl: " + stopLoss + " - cm: " + strCommissionAfter + " - sw: " + strSwapAfter; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } #endregion } else { StringResult = subValue[0] + "$" + false + "," + "MCM006"; string content = "'" + code + "': update order failed(not enough rights)"; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + "," + "MCM004"; } } else { StringResult = subValue[0] + "$" + false + "," + "MCM006"; string content = "'" + code + "': update order failed(not enough rights)"; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + "," + "MCM005"; string content = "'" + code + "': update order failed(invalid ip)"; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } break; #endregion #region Update Candle Online case "UpdateCandleOnline": { string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int ID = -1; DateTime Time; int Volume = -1; double Open = -1; double Close = -1; double High = -1; double Low = -1; double openAsk = -1; double highAsk = -1; double lowAsk = -1; double closeAsk = -1; int TimeFrame = -1; int.TryParse(subParameter[0], out ID); DateTime.TryParse(subParameter[1], out Time); int.TryParse(subParameter[2], out Volume); double.TryParse(subParameter[3], out Open); double.TryParse(subParameter[4], out Close); double.TryParse(subParameter[5], out High); double.TryParse(subParameter[6], out Low); int.TryParse(subParameter[7], out TimeFrame); double.TryParse(subParameter[8], out openAsk); double.TryParse(subParameter[9], out highAsk); double.TryParse(subParameter[10], out lowAsk); double.TryParse(subParameter[11], out closeAsk); ProcessQuoteLibrary.Business.Candles objCandles = new ProcessQuoteLibrary.Business.Candles(); objCandles.Close = Close; objCandles.CloseAsk = closeAsk; objCandles.High = High; objCandles.HighAsk = highAsk; objCandles.ID = ID; objCandles.Low = Low; objCandles.LowAsk = lowAsk; objCandles.Open = Open; objCandles.OpenAsk = openAsk; objCandles.Time = Time; objCandles.TimeFrame = TimeFrame; objCandles.Volume = Volume; bool ResultUpdate = false; ResultUpdate = ProcessQuoteLibrary.Business.QuoteProcess.UpdateCandleOnline(objCandles); //#region INSERT SYSTEM LOG ////INSERT SYSTEM LOG ////'2222': XAUUSD M1 1 bars updated //string status = "[uncomplete]"; //if (ResultUpdate) // status = "[complete]"; //string content = "'" + code + "': " + + status; //string comment = "[update agent]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); //#endregion StringResult = subValue[0] + "$" + ResultUpdate; } } break; #endregion #region UPDATE ORDER IN DATABASE(COMMENT) case "UpdateOrderData": { string[] subParameter = subValue[1].Split(','); bool Result = false; Business.OpenTrade newOpenTrade = new OpenTrade(); if (subParameter.Length > 0) { switch (subParameter[subParameter.Length - 1]) { case "OPT001": { double closePrice = 0; double.TryParse(subParameter[0], out closePrice); bool resultUpdate = false; if (closePrice > 0) { newOpenTrade = this.ConvertStringToOpenTrade(subParameter); //resultUpdate = TradingServer.Facade.FacadeUpdateOnlineCommand(newOpenTrade.Investor.InvestorID, newOpenTrade.ID, newOpenTrade.Commission, // newOpenTrade.ExpTime, newOpenTrade.OpenPrice, newOpenTrade.OpenTime, newOpenTrade.StopLoss, newOpenTrade.Swap, // newOpenTrade.TakeProfit, newOpenTrade.Symbol.Name); } else { newOpenTrade = this.ConvertStringToOpenTrade(subParameter); if (newOpenTrade.Type.ID == 1 || newOpenTrade.Type.ID == 5 || newOpenTrade.Type.ID == 7 || newOpenTrade.Type.ID == 9 || newOpenTrade.Type.ID == 11) { newOpenTrade.ClosePrice = newOpenTrade.Symbol.TickValue.Bid; } else { newOpenTrade.ClosePrice = (Business.Symbol.ConvertNumberPip(newOpenTrade.Symbol.Digit, newOpenTrade.SpreaDifferenceInOpenTrade) + newOpenTrade.Symbol.TickValue.Ask); } //resultUpdate = TradingServer.Facade.FacadeUpdateOnlineCommand(newOpenTrade.Investor.InvestorID, newOpenTrade.ID, newOpenTrade.Commission, // newOpenTrade.ExpTime, newOpenTrade.OpenPrice, newOpenTrade.OpenTime, newOpenTrade.StopLoss, newOpenTrade.Swap, // newOpenTrade.TakeProfit, newOpenTrade.Symbol.Name); } if (resultUpdate) { //MAP COMMAND UPDATE TO CLIENT string Message = "UpdateCommand$True,UPDATE COMMAND COMPLETE," + newOpenTrade.ID + "," + newOpenTrade.Investor.InvestorID + "," + newOpenTrade.Symbol.Name + "," + newOpenTrade.Size + "," + false + "," + newOpenTrade.OpenTime + "," + newOpenTrade.OpenPrice + "," + newOpenTrade.StopLoss + "," + newOpenTrade.TakeProfit + "," + newOpenTrade.ClosePrice + "," + newOpenTrade.Commission + "," + newOpenTrade.Swap + "," + newOpenTrade.Profit + "," + "Comment," + newOpenTrade.ID + "," + newOpenTrade.Type.Name + "," + 1 + "," + newOpenTrade.ExpTime + "," + newOpenTrade.ClientCode + "," + newOpenTrade.CommandCode + "," + newOpenTrade.IsHedged + "," + newOpenTrade.Type.ID + "," + newOpenTrade.Margin + ",Update"; } StringResult = subValue[0] + "$" + resultUpdate; } break; case "CMH01": { newOpenTrade = ConvertStringToOpenTrade(subParameter); bool resultUpdate = TradingServer.Facade.FacadeUpdateCommandHistory(newOpenTrade); StringResult = subValue[0] + "$" + resultUpdate; } break; case "IAL01": { Business.InvestorAccountLog newInvestorAccountLog = new InvestorAccountLog(); int ID = 0; //deal ID int InvestorID = 0; //name DateTime Date; //comment double Amount = 0; //code int.TryParse(subParameter[0], out ID); int.TryParse(subParameter[2], out InvestorID); DateTime.TryParse(subParameter[4], out Date); double.TryParse(subParameter[6], out Amount); newInvestorAccountLog.ID = ID; newInvestorAccountLog.DealID = subParameter[1]; newInvestorAccountLog.InvestorID = InvestorID; newInvestorAccountLog.Name = subParameter[3]; newInvestorAccountLog.Date = Date; newInvestorAccountLog.Comment = subParameter[5]; newInvestorAccountLog.Amount = Amount; newInvestorAccountLog.Code = subParameter[6]; bool resultUpdate = TradingServer.Facade.FacadeUpdateInvestorAccountLog(newInvestorAccountLog); StringResult = subValue[0] + "$" + resultUpdate; } break; } } } break; #endregion #region UPDATE COMMAND HISTORY(UPDATE COMMAND HISTORY, UPDATE DEPOSIT....) case "UpdateCommandHistory": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code); if (checkRule) { bool resultUpdate = false; string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 18) { #region MAP STRING TO OBJECT Business.OpenTrade newOpenTrade = new OpenTrade(); int commandTypeID, commandHistoryID; DateTime openTime, closeTime, expTime; double openPrice, closePrice, profit, swap, commission, size, stopLoss, takeProfit, taxes, agentCommission; int.TryParse(subParameter[0], out commandTypeID); DateTime.TryParse(subParameter[1], out openTime); double.TryParse(subParameter[2], out openPrice); DateTime.TryParse(subParameter[3], out closeTime); double.TryParse(subParameter[4], out closePrice); double.TryParse(subParameter[5], out profit); double.TryParse(subParameter[6], out swap); double.TryParse(subParameter[7], out commission); DateTime.TryParse(subParameter[8], out expTime); double.TryParse(subParameter[9], out size); double.TryParse(subParameter[10], out stopLoss); double.TryParse(subParameter[11], out takeProfit); //int.TryParse(subParameter[12], out symbolID); double.TryParse(subParameter[13], out taxes); //string comment = subparmeter[14] double.TryParse(subParameter[15], out agentCommission); int.TryParse(subParameter[16], out commandHistoryID); //string InvestorCode == ..... newOpenTrade.AgentCommission = agentCommission; newOpenTrade.ClosePrice = closePrice; newOpenTrade.CloseTime = closeTime; newOpenTrade.Comment = subParameter[14]; newOpenTrade.Commission = commission; newOpenTrade.ExpTime = expTime; newOpenTrade.ID = commandHistoryID; newOpenTrade.OpenPrice = openPrice; newOpenTrade.OpenTime = openTime; newOpenTrade.Type = new TradeType(); newOpenTrade.Type.ID = commandTypeID; newOpenTrade.Profit = profit; newOpenTrade.Size = size; newOpenTrade.StopLoss = stopLoss; newOpenTrade.Swap = swap; newOpenTrade.TakeProfit = takeProfit; newOpenTrade.Taxes = taxes; newOpenTrade.Investor = TradingServer.Facade.FacadeFindInvestor(subParameter[17]); #endregion if (commandTypeID == 1 || commandTypeID == 2 || commandTypeID == 11 || commandTypeID == 12) { #region FILL INSTANT SYMBOL if (Business.Market.SymbolList != null) { int countSymbol = Business.Market.SymbolList.Count; for (int j = 0; j < countSymbol; j++) { if (Business.Market.SymbolList[j].Name.Trim() == subParameter[12].Trim()) { newOpenTrade.Symbol = Business.Market.SymbolList[j]; break; } } } #endregion newOpenTrade.CalculatorProfitCommand(newOpenTrade); newOpenTrade.Profit = newOpenTrade.Symbol.ConvertCurrencyToUSD(newOpenTrade.Symbol.Currency, newOpenTrade.Profit, false, newOpenTrade.SpreaDifferenceInOpenTrade, newOpenTrade.Symbol.Digit); newOpenTrade.Profit = Math.Round(newOpenTrade.Profit, 2); } //resultUpdate = TradingServer.Facade.FacadeUpdateOnlineCommand(0, commandHistoryID, commission, expTime, openPrice, openTime, stopLoss, // swap, takeProfit, subParameter[12], taxes, subParameter[14], agentCommission, size); Business.OpenTrade tempOpenTrade = TradingServer.Facade.FacadeGetCommandHistoryByCommandID(commandHistoryID); #region BUIL STRING CHANGER OF ORDER string change = string.Empty; string mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(tempOpenTrade.Type.ID); string strOpenPriceBefore = string.Empty; string strOpenPriceAfter = string.Empty; string strClosePriceBefore = string.Empty; string strClosePriceAfter = string.Empty; if (tempOpenTrade.Symbol != null) { strOpenPriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), tempOpenTrade.Symbol.Digit); strOpenPriceAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(openPrice.ToString(), tempOpenTrade.Symbol.Digit); strClosePriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.ClosePrice.ToString(), tempOpenTrade.Symbol.Digit); strClosePriceAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(closePrice.ToString(), tempOpenTrade.Symbol.Digit); } else { strOpenPriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.OpenPrice.ToString(), 5); strOpenPriceAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(openPrice.ToString(), 5); strClosePriceBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.ClosePrice.ToString(), 5); strClosePriceAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(closePrice.ToString(), 5); } string strStopLossBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.StopLoss.ToString(), 2); string strStopLossAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(stopLoss.ToString(), 2); string strTakeProfitBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.TakeProfit.ToString(), 2); string strTakeProfitAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(takeProfit.ToString(), 2); string strSwapBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Swap.ToString(), 2); string strSwapAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(swap.ToString(), 2); string strLotsBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Size.ToString(), 2); string strLotsAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(size.ToString(), 2); string strCommissionBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Commission.ToString(), 2); string strCommissionAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(commission.ToString(), 2); string strProfitBefore = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(tempOpenTrade.Profit.ToString(), 2); string strProfitAfter = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Profit.ToString(), 2); string strSize = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(size.ToString(), 2); #endregion #region UPDATE COMMAND IN DATABASE AND FIX BALANCE if (Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID) { double totalProfit = newOpenTrade.Profit + newOpenTrade.Commission + newOpenTrade.Swap; double profitHistory = tempOpenTrade.Profit + tempOpenTrade.Commission + tempOpenTrade.Swap; double deltaProfit = profitHistory - totalProfit; bool isValid = false; if (deltaProfit != 0) { #region SWITCH COMMAND TYPE switch (tempOpenTrade.Type.ID) { case 13: { double tempBalance = Business.Market.InvestorList[i].Balance - deltaProfit; if (tempBalance > 0 && newOpenTrade.Profit > 0) { Business.Market.InvestorList[i].Balance -= deltaProfit; TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance); isValid = true; } } break; case 14: { double tempBalance = Business.Market.InvestorList[i].Balance + deltaProfit; if (tempBalance > 0 && newOpenTrade.Profit > 0) { Business.Market.InvestorList[i].Balance += deltaProfit; TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance); isValid = true; } } break; case 15: { double tempBalance = Business.Market.InvestorList[i].Credit - deltaProfit; if (tempBalance > 0 && newOpenTrade.Profit > 0) { Business.Market.InvestorList[i].Credit -= deltaProfit; TradingServer.Facade.FacadeUpdateCredit(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Credit); isValid = true; } } break; case 16: { double tempBalance = Business.Market.InvestorList[i].Credit + deltaProfit; if (tempBalance > 0 && newOpenTrade.Profit > 0) { Business.Market.InvestorList[i].Credit += deltaProfit; TradingServer.Facade.FacadeUpdateCredit(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Credit); isValid = true; } } break; default: { Business.Market.InvestorList[i].Balance -= deltaProfit; TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance); isValid = true; } break; } #endregion //SEND NOTIFY TO MANAGER with type =3 then balance and credit TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[i]); } if (isValid) { #region CALCUALTION AGENT COMMISSION double deltaAgentCommission = agentCommission - tempOpenTrade.AgentCommission; if (deltaAgentCommission != 0) { if (Business.Market.InvestorList != null) { int countInvestor = Business.Market.InvestorList.Count; for (int j = 0; j < countInvestor; j++) { if (Business.Market.InvestorList[j].Code == tempOpenTrade.Investor.AgentID) { Business.Market.InvestorList[j].Balance += deltaAgentCommission; TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[j].InvestorID, Business.Market.InvestorList[j].Balance); //SEND NOTIFY TO MANAGER with type =3 then balance and credit TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[j]); if (Business.Market.InvestorList[j].IsOnline) { string Message = "GetNewBalance"; int countInvestorOnline = Business.Market.InvestorList[j].CountInvestorOnline(Business.Market.InvestorList[j].InvestorID); if (countInvestorOnline > 0) Business.Market.InvestorList[j].ClientCommandQueue.Add(Message); } break; } } } } #endregion if (Business.Market.InvestorList[i].ClientCommandQueue == null) Business.Market.InvestorList[i].ClientCommandQueue = new List<string>(); int countOnline = Business.Market.InvestorList[i].CountInvestorOnline(Business.Market.InvestorList[i].InvestorID); if (countOnline > 0) Business.Market.InvestorList[i].ClientCommandQueue.Add("UCH1478963"); } //UPDATE COMMAND HISTORY IN DATABASE resultUpdate = TradingServer.Facade.FacadeUpdateCommandHistory(newOpenTrade); break; } } } #endregion StringResult = subValue[0] + "$" + resultUpdate; #region LOG //'2222': the existent order has been overwritten string status = "[Failed]"; if (resultUpdate) status = "[Success]"; if (tempOpenTrade.Type.ID == 1 || tempOpenTrade.Type.ID == 2 || tempOpenTrade.Type.ID == 11 || tempOpenTrade.Type.ID == 12) { string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code + " modified: " + mode + " " + strSize + " " + tempOpenTrade.Symbol.Name + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore + " - tp: " + strTakeProfitBefore + " - sl: " + strStopLossBefore + " - cm: " + strCommissionBefore + " - sw: " + strSwapBefore + " - profit: " + strProfitBefore + " -> " + mode + " " + strSize + " " + tempOpenTrade.Symbol.Name + " at " + strOpenPriceAfter + " - cp: " + strClosePriceAfter + " - tp: " + strTakeProfitAfter + " - sl: " + strStopLossAfter + " - cm: " + strCommissionAfter + " - sw: " + strSwapAfter + " - profit: " + strProfitAfter + status; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } else { switch (tempOpenTrade.Type.ID) { case 13: { string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code + " modified - deposit " + strSize + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore + " - profit: " + strProfitBefore + " -> deposit " + strSize + " at " + strOpenPriceAfter + " - profit: " + strProfitAfter + status; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } break; case 14: { string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code + " modified - withdrawal " + strSize + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore + " - profit: " + strProfitBefore + " -> withdrawal " + strSize + " at " + strOpenPriceAfter + " - profit: " + strProfitAfter + status; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } break; case 15: { string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code + " modified - credit in " + strSize + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore + " - profit: " + strProfitBefore + " -> credit in " + strSize + " at " + strOpenPriceAfter + " - profit: " + strProfitAfter + status; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } break; case 16: { string content = "'" + code + "': close order #" + tempOpenTrade.CommandCode + " for " + tempOpenTrade.Investor.Code + " modified - credit out " + strSize + " at " + strOpenPriceBefore + " - cp: " + strClosePriceBefore + " - profit: " + strProfitBefore + " -> credit out " + strSize + " at " + strOpenPriceAfter + " - profit: " + strProfitAfter + status; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } break; } } #endregion } } else { StringResult = subValue[0] + "$MCM006"; string content = "'" + code + "': update order failed(not enough rights)"; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$MCM005"; string content = "'" + code + "': update order failed(invalid ip)"; string comment = "[update order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } break; #endregion #region DELETE COMMAND IN HISTORY(DELETE COMMAND, DELETE DEPOSIT) case "DeleteCommandHistory": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { bool resultDelete = false; int commandHistoryID = 0; string[] subParameter = subValue[1].Split(','); int.TryParse(subValue[1], out commandHistoryID); Business.OpenTrade newOpenTrade = TradingServer.Facade.FacadeGetCommandHistoryByCommandID(commandHistoryID); //if (newOpenTrade == null) // return StringResult = subValue[0] + "$" + false; bool isDelete = false; if (newOpenTrade != null) { if (newOpenTrade.ID > 0) { #region DELETE COMMAND HISTORY #region FIX BALANCE ACCOUNT if (newOpenTrade.Type != null) { double swap = newOpenTrade.Swap; switch (newOpenTrade.Type.ID) { #region SPOT COMMAND case 1: this.FixBalanceAccount(newOpenTrade.Profit, swap, newOpenTrade.Commission, newOpenTrade.Investor.InvestorID, newOpenTrade.AgentCommission); break; case 2: this.FixBalanceAccount(newOpenTrade.Profit, swap, newOpenTrade.Commission, newOpenTrade.Investor.InvestorID, newOpenTrade.AgentCommission); break; #endregion #region FUTURE COMMAND case 11: this.FixBalanceAccount(newOpenTrade.Profit, swap, newOpenTrade.Commission, newOpenTrade.Investor.InvestorID, newOpenTrade.AgentCommission); break; case 12: this.FixBalanceAccount(newOpenTrade.Profit, swap, newOpenTrade.Commission, newOpenTrade.Investor.InvestorID, newOpenTrade.AgentCommission); break; #endregion #region DEPOSIT case 13: { if (Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID) { Business.Market.InvestorList[i].Balance -= newOpenTrade.Profit; TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance); break; } } } } break; #endregion #region WITHDRAWL case 14: { if (Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID) { Business.Market.InvestorList[i].Balance += newOpenTrade.Profit; TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance); break; } } } } break; #endregion #region CREDIT IN case 15: { if (Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID) { Business.Market.InvestorList[i].Credit -= newOpenTrade.Profit; TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance); break; } } } } break; #endregion #region CREDIT OUT case 16: { if (Business.Market.InvestorList != null) { int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID) { Business.Market.InvestorList[i].Credit += newOpenTrade.Profit; TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[i].InvestorID, Business.Market.InvestorList[i].Balance); break; } } } } break; #endregion } } #endregion //UPDATE ISDELETE IN DATABASE isDelete = TradingServer.Facade.FacadeUpdateIsDeleteHistory(true, commandHistoryID); #endregion } } else { //Delete Open Position newOpenTrade = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(commandHistoryID); if (newOpenTrade.Symbol == null || newOpenTrade.Investor == null || newOpenTrade.IGroupSecurity == null || newOpenTrade.Type == null) return StringResult = subValue[0] + "$" + false; isDelete = TradingServer.Facade.FacadeDeleteOpenTradeByAdmin(commandHistoryID); } #region BUILD STRING INSERT LOG string message = string.Empty; if (newOpenTrade.Type.ID == 1 || newOpenTrade.Type.ID == 2 || newOpenTrade.Type.ID == 11 || newOpenTrade.Type.ID == 12) { #region BUILD STRING INSERT LOG //'2222': order #2495264 for '2365714' delete - buy 2.00 GBPUSD at 1.48840, profit: 20.00 string mode = string.Empty; string size = string.Empty; string openPrice = string.Empty; string profit = string.Empty; string swap = string.Empty; string commission = string.Empty; size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Size.ToString(), 2); mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(newOpenTrade.Type.ID); openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.OpenPrice.ToString(), newOpenTrade.Symbol.Digit); profit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Profit.ToString(), 2); swap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Swap.ToString(), 2); commission = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Commission.ToString(), 2); message = "'" + code + "': order #" + newOpenTrade.CommandCode + " for '" + newOpenTrade.Investor.Code + "' delete - " + mode + " " + size + " " + newOpenTrade.Symbol.Name + " at " + openPrice + ", profit: " + profit + " - swap: " + swap + "- commission: " + commission; #endregion } else { #region BUILD STRING INSERT LOG //'2222': changed balance #14051372 - 100000.00 for ' 90244233' - ' Deposit' string mode = string.Empty; string profit = string.Empty; switch (newOpenTrade.Type.ID) { case 13: mode = "Deposit"; break; case 14: mode = "Withdrawal"; break; case 15: mode = "Credit In"; break; case 16: mode = "Credit Out"; break; } profit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(newOpenTrade.Profit.ToString(), 2); message = "'" + code + "': changed balance #" + newOpenTrade.CommandCode + " - " + profit + " for '" + newOpenTrade.Investor.Code + "'" + " - '" + mode + "'"; #endregion } TradingServer.Facade.FacadeAddNewSystemLog(5, message, "[delete admin order]", ipAddress, code); #endregion #region SEND COMMAND PREFESH DATA CLIENT AND MANAGER TradingServer.Facade.FacadeSendNotifyManagerRequest(3, newOpenTrade.Investor); TradingServer.Business.Market.SendNotifyToClient("IAC04332451", 3, newOpenTrade.Investor.InvestorID); #endregion #region COMMENT CODE(2-2-2012) //Business.Investor tempInvestor = new Investor(); //if (Business.Market.InvestorList != null) //{ // int count = Business.Market.InvestorList.Count; // for (int i = 0; i < count; i++) // { // if (Business.Market.InvestorList[i].InvestorID == newOpenTrade.Investor.InvestorID) // { // tempInvestor = Business.Market.InvestorList[i]; // break; // } // } //} //resultDelete = TradingServer.Facade.FacadeDeleteCommandHistory(commandHistoryID); //if (!resultDelete) //{ // if (Business.Market.CommandExecutor != null) // { // int countCommand = Business.Market.CommandExecutor.Count; // for (int j = 0; j < countCommand; j++) // { // if (Business.Market.CommandExecutor[j].ID == commandHistoryID) // { // resultDelete = TradingServer.Facade.FacadeDeleteOpenTradeByManager(commandHistoryID); // if (Business.Market.CommandExecutor[j].Investor.ClientCommandQueue == null) // Business.Market.CommandExecutor[j].Investor.ClientCommandQueue = new List<string>(); // Business.Market.CommandExecutor[j].Investor.ClientCommandQueue.Add("COD24680"); // break; // } // } // } //} //else //{ // if (tempInvestor != null && tempInvestor.InvestorID > 0) // { // if (tempInvestor.ClientCommandQueue == null) // tempInvestor.ClientCommandQueue = new List<string>(); // tempInvestor.ClientCommandQueue.Add("COD24680"); // } //} #endregion //StringResult = subValue[0] + "$" + resultDelete; StringResult = subValue[0] + "$" + isDelete; } else { StringResult = subValue[0] + "$MCM005"; } } break; #endregion #region ACTIVE PENDING ORDER case "ActivePendingOrder": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { #region Map Value bool resultActive = false; int commandID = 0; int.TryParse(subValue[1], out commandID); Business.OpenTrade result = new OpenTrade(); result = TradingServer.Facade.FacadeFindOpenTradeInCommandEx(commandID); Business.OpenTrade newOpenTrade = new OpenTrade(); newOpenTrade.ClientCode = result.ClientCode; newOpenTrade.CloseTime = result.CloseTime; newOpenTrade.ExpTime = result.ExpTime; newOpenTrade.ID = result.ID; newOpenTrade.Investor = result.Investor; newOpenTrade.IsClose = result.IsClose; newOpenTrade.OpenPrice = result.OpenPrice; newOpenTrade.OpenTime = result.OpenTime; newOpenTrade.Size = result.Size; newOpenTrade.StopLoss = result.StopLoss; newOpenTrade.Swap = result.Swap; newOpenTrade.Symbol = result.Symbol; newOpenTrade.TakeProfit = result.TakeProfit; newOpenTrade.Type = result.Type; newOpenTrade.ClosePrice = result.ClosePrice; newOpenTrade.Margin = result.Margin; newOpenTrade.CommandCode = result.CommandCode; newOpenTrade.Commission = result.Commission; newOpenTrade.IGroupSecurity = result.IGroupSecurity; #endregion bool checkRule = Facade.FacadeCheckPermitCommandManagerAndAdmin(code); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, result.Investor.InvestorGroupInstance.InvestorGroupID); if (checkRule && checkGroup) { if (newOpenTrade != null && newOpenTrade.ID > 0) { //result.Symbol.MarketAreaRef.UpdateCommand(result); if (newOpenTrade.Type.ID == 7 || newOpenTrade.Type.ID == 9) { #region CASE BUY LIMIT AND BUY STOP if (newOpenTrade.Symbol.MarketAreaRef != null) { if (newOpenTrade.Symbol.MarketAreaRef.Type != null) { int countType = newOpenTrade.Symbol.MarketAreaRef.Type.Count; for (int m = 0; m < countType; m++) { if (newOpenTrade.Symbol.MarketAreaRef.Type[m].ID == 1) { newOpenTrade.Type = new TradeType(); newOpenTrade.Type.ID = newOpenTrade.Symbol.MarketAreaRef.Type[m].ID; newOpenTrade.Type.Name = newOpenTrade.Symbol.MarketAreaRef.Type[m].Name; break; } } } } #endregion } else if (newOpenTrade.Type.ID == 8 || newOpenTrade.Type.ID == 10) { #region CASE SELL LIMIT AND SELL STOP if (newOpenTrade.Symbol.MarketAreaRef != null) { if (newOpenTrade.Symbol.MarketAreaRef.Type != null) { int countType = newOpenTrade.Symbol.MarketAreaRef.Type.Count; for (int m = 0; m < countType; m++) { if (newOpenTrade.Symbol.MarketAreaRef.Type[m].ID == 2) { newOpenTrade.Type = new TradeType(); newOpenTrade.Type.ID = newOpenTrade.Symbol.MarketAreaRef.Type[m].ID; newOpenTrade.Type.Name = newOpenTrade.Symbol.MarketAreaRef.Type[m].Name; break; } } } } #endregion } if (newOpenTrade.Type.ID == 17 || newOpenTrade.Type.ID == 19) { if (newOpenTrade.Symbol.MarketAreaRef.Type != null) { int countType = newOpenTrade.Symbol.MarketAreaRef.Type.Count; for (int m = 0; m < countType; m++) { if (newOpenTrade.Symbol.MarketAreaRef.Type[m].ID == 11) { newOpenTrade.Type = new TradeType(); newOpenTrade.Type.ID = newOpenTrade.Symbol.MarketAreaRef.Type[m].ID; newOpenTrade.Type.Name = newOpenTrade.Symbol.MarketAreaRef.Type[m].Name; break; } } } } else if (newOpenTrade.Type.ID == 18 || newOpenTrade.Type.ID == 20) { if (newOpenTrade.Symbol.MarketAreaRef.Type != null) { int countType = newOpenTrade.Symbol.MarketAreaRef.Type.Count; for (int m = 0; m < countType; m++) { if (newOpenTrade.Symbol.MarketAreaRef.Type[m].ID == 12) { newOpenTrade.Type = new TradeType(); newOpenTrade.Type.ID = newOpenTrade.Symbol.MarketAreaRef.Type[m].ID; newOpenTrade.Type.Name = newOpenTrade.Symbol.MarketAreaRef.Type[m].Name; break; } } } } newOpenTrade.IsProcess = true; newOpenTrade.Investor.UpdateCommand(newOpenTrade); resultActive = true; #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': account '9789300', activate order #11349528 buy stop 2.00 EURUSD at 1.5625 string comment = "[active pending order]"; string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(result.Size.ToString(), 2); string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(result.OpenPrice.ToString(), result.Symbol.Digit); string mode = TradingServer.Model.TradingCalculate.Instance.ConvertTypeIDToString(result.Type.ID); string content = "'" + code + "': account '" + result.Investor.Code + "' activate order #" + result.CommandCode + " " + mode + " " + size + " " + result.Symbol.Name + " at " + openPrice; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); #endregion } if(resultActive) StringResult = subValue[0] + "$" + resultActive + ",MCM001"; else StringResult = subValue[0] + "$" + resultActive + ",MCM004"; } else { StringResult = subValue[0] + "$" + false + ",MCM006"; string content = "'" + code + "': manager active pending order failed(not enough rights)"; string comment = "[active pending order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + false + ",MCM005"; string content = "'" + code + "': manager active pending order failed(invalid ip)"; string comment = "[active pending order]"; TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, ipAddress, code); } } break; #endregion //Command Select // #region Select Investor Group case "SelectInvestorGroup": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { List<Business.InvestorGroup> Result = new List<InvestorGroup>(); //Result = TradingServer.Facade.FacadeGetAllInvestorGroup(); Result = TradingServer.Business.Market.InvestorGroupList; if (Result != null) { int countInvestorGroup = Result.Count; for (int n = 0; n < countInvestorGroup; n++) { temp += Result[n].InvestorGroupID.ToString() + "," + Result[n].Name + "," + Result[n].Owner + "," + Result[n].DefautDeposite.ToString() + "|"; } } } StringResult = subValue[0] + "$" + temp; } break; case "SelectInvestorGroupByID": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { int InvestorGroupID = -1; int.TryParse(subValue[1], out InvestorGroupID); Business.InvestorGroup Result = new InvestorGroup(); if (Business.Market.InvestorGroupList != null) { int countInvestor = Business.Market.InvestorGroupList.Count; for (int j = 0; j < countInvestor; j++) { if (Business.Market.InvestorGroupList[j].InvestorGroupID == InvestorGroupID) { Result = Business.Market.InvestorGroupList[j]; break; } } } //Result = TradingServer.Facade.FacadeGetInvestorGroupByInvestorGroupID(InvestorGroupID); if (Result != null) { temp += Result.InvestorGroupID.ToString() + "," + Result.Name + "," + Result.Owner + "," + Result.DefautDeposite.ToString(); } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Investor Group Config case "SelectInvestorGroupConfigByInvestorGroupID": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { int InvestorGroupID = -1; int.TryParse(subValue[1], out InvestorGroupID); if (Market.InvestorGroupList != null) { int countInvestorGroup = Market.InvestorGroupList.Count; for (int n = 0; n < countInvestorGroup; n++) { if (Market.InvestorGroupList[n].InvestorGroupID == InvestorGroupID) { if (Market.InvestorGroupList[n].ParameterItems != null) { int countParameterItem = Market.InvestorGroupList[n].ParameterItems.Count; for (int m = 0; m < countParameterItem; m++) { temp += Market.InvestorGroupList[n].ParameterItems[m].ParameterItemID.ToString() + "," + Market.InvestorGroupList[n].ParameterItems[m].SecondParameterID.ToString() + "," + "-1" + "," + Market.InvestorGroupList[n].ParameterItems[m].Name + "," + Market.InvestorGroupList[n].ParameterItems[m].Code + "," + Market.InvestorGroupList[n].ParameterItems[m].BoolValue.ToString() + "," + Market.InvestorGroupList[n].ParameterItems[m].StringValue + "," + Market.InvestorGroupList[n].ParameterItems[m].NumValue + "," + Market.InvestorGroupList[n].ParameterItems[m].DateValue.ToString() + "|"; } } break; } } } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select IGroup Symbol case "SelectIGroupSymbol": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string temp = string.Empty; List<Business.IGroupSymbol> Result = new List<IGroupSymbol>(); Result = Business.Market.IGroupSymbolList; if (Result != null) { int countIGroupSymbol = Result.Count; for (int n = 0; n < countIGroupSymbol; n++) { temp += Result[n].IGroupSymbolID.ToString() + "," + Result[n].SymbolID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } } break; case "SelectIGroupSymbolByID": { string temp = string.Empty; int IGroupSymbolID = -1; int.TryParse(subValue[1], out IGroupSymbolID); Business.IGroupSymbol Result = new IGroupSymbol(); if (Business.Market.IGroupSymbolList != null) { int countIGroupSymbol = Business.Market.IGroupSymbolList.Count; for (int j = 0; j < countIGroupSymbol; j++) { if (Business.Market.IGroupSymbolList[j].IGroupSymbolID == IGroupSymbolID) { Result = Business.Market.IGroupSymbolList[j]; break; } } } //Result = TradingServer.Facade.FacadeGetIGroupSymbolByIGroupSymbolID(IGroupSymbolID); if (Result != null) { temp = Result.IGroupSymbolID.ToString() + "," + Result.SymbolID.ToString() + "," + Result.InvestorGroupID.ToString(); } StringResult = subValue[0] + "$" + temp; } break; case "SelectIGroupSymbolBySymbolID": { string temp = string.Empty; int SymbolID = -1; int.TryParse(subValue[1], out SymbolID); List<Business.IGroupSymbol> Result = new List<IGroupSymbol>(); if (Business.Market.IGroupSymbolList != null) { int countIGroupSymbol = Business.Market.IGroupSymbolList.Count; for (int j = 0; j < countIGroupSymbol; j++) { if (Business.Market.IGroupSymbolList[j].SymbolID == SymbolID) { Result.Add(Business.Market.IGroupSymbolList[j]); } } } //Result = TradingServer.Facade.FacadeGetIGroupSymbolBySymbolID(SymbolID); if (Result != null) { int countIGroupSymbol = Result.Count; for (int n = 0; n < countIGroupSymbol; n++) { temp += Result[n].IGroupSymbolID.ToString() + "," + Result[n].SymbolID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select IGroupSymbolConfig case "SelectIGroupSymbolConfigByIGroupSymbolID": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string temp = string.Empty; int IGroupSymbolID = -1; int.TryParse(subValue[1], out IGroupSymbolID); temp = this.GetIGroupSymbolConfigByIGroupSymbolIDInIGroupSymbolList(IGroupSymbolID); StringResult = subValue[0] + "$" + temp; } } break; #endregion #region Select IGroup Security case "SelectIGroupSecurity": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { List<Business.IGroupSecurity> Result = new List<IGroupSecurity>(); Result = Business.Market.IGroupSecurityList; if (Result != null) { int countIGroupSecurity = Result.Count; for (int n = 0; n < countIGroupSecurity; n++) { temp += Result[n].IGroupSecurityID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "," + Result[n].SecurityID.ToString() + "|"; } } } StringResult = subValue[0] + "$" + temp; } break; case "SelectIGroupSecurityByID": { string temp = string.Empty; int IGroupSecurityID = -1; int.TryParse(subValue[1], out IGroupSecurityID); Business.IGroupSecurity Result = new IGroupSecurity(); if (Business.Market.IGroupSecurityList != null) { int countIGroupSecurity = Business.Market.IGroupSecurityList.Count; for (int j = 0; j < countIGroupSecurity; j++) { if (Business.Market.IGroupSecurityList[j].IGroupSecurityID == IGroupSecurityID) { Result = Business.Market.IGroupSecurityList[j]; break; } } } if (Result != null) { temp += Result.IGroupSecurityID.ToString() + "," + Result.InvestorGroupID.ToString() + "," + Result.SecurityID.ToString(); } StringResult = subValue[0] + "$" + temp; } break; case "SelectIGroupSecurityBySecurityID": { string temp = string.Empty; int SecurityID = -1; int.TryParse(subValue[1], out SecurityID); List<Business.IGroupSecurity> Result = new List<IGroupSecurity>(); if (Business.Market.IGroupSecurityList != null) { int countIGroupSecurity = Business.Market.IGroupSecurityList.Count; for (int j = 0; j < countIGroupSecurity; j++) { if (Business.Market.IGroupSecurityList[j].SecurityID == SecurityID) { Result.Add(Business.Market.IGroupSecurityList[j]); } } } //Result = TradingServer.Facade.FacadeGetIGroupSecurityBySecurityID(SecurityID); if (Result != null) { int countIGroupSecurity = Result.Count; for (int n = 0; n < countIGroupSecurity; n++) { temp += Result[n].IGroupSecurityID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "," + Result[n].SecurityID.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } break; case "SelectIGroupSecurityByInvestorGroupID": { string temp = string.Empty; int InvestorGroupID = -1; int.TryParse(subValue[1], out InvestorGroupID); List<Business.IGroupSecurity> Result = new List<IGroupSecurity>(); if (Business.Market.IGroupSecurityList != null) { int countIGroupSecurity = Business.Market.IGroupSecurityList.Count; for (int j = 0; j < countIGroupSecurity; j++) { if (Business.Market.IGroupSecurityList[j].InvestorGroupID == InvestorGroupID) { Result.Add(Business.Market.IGroupSecurityList[j]); } } } //Result = TradingServer.Facade.FacadeGetIGroupSecurityByInvestorGroupID(InvestorGroupID); if (Result != null) { int countIGroupSecurity = Result.Count; for (int n = 0; n < countIGroupSecurity; n++) { temp += Result[n].IGroupSecurityID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "," + Result[n].SecurityID.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select IGroupSecurityConfig case "SelectIGroupSecurityConfigByIGroupSecurityID": { string temp = string.Empty; int IGroupSecurityID = -1; int.TryParse(subValue[1], out IGroupSecurityID); temp = this.GetIGroupSecurityConfigByIGroupSecurityIDInIGroupSecurityList(IGroupSecurityID); StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Security case "SelectSecurity": { string temp = string.Empty; temp = this.SelectSecurityInSecurityList(); StringResult = subValue[0] + "$" + temp; } break; case "SelectSecurityByID": { string temp = string.Empty; int SecurityID = -1; int.TryParse(subValue[1], out SecurityID); temp = this.SelectSecurityByIDInSecurityList(SecurityID); StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Symbol case "SelectSymbol": { //string commandName = "GetAllSymbol$"; //string temp = string.Empty; //temp = this.ExtractSelectSymbol(); //StringResult = commandName + temp; } break; case "SelectSymbolByID": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { int SymbolID = -1; int.TryParse(subValue[1], out SymbolID); temp = this.SelectSymbolByIDInSymbolList(SymbolID); } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select TradingConfig(SymbolConfig) case "SelectTradingConfigBySymbolID": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { int SymbolID = -1; int.TryParse(subValue[1], out SymbolID); temp = this.SelectTradingConfigBySymbolIDInSymbolList(SymbolID); } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Security Config case "SelectSecurityConfigBySecurityID": { string temp = string.Empty; int SecurityID = -1; int.TryParse(subValue[1], out SecurityID); temp = this.SelectSecurityConfigBySecurityIDInSecurityList(SecurityID); StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Investor(LOG COMMENT) case "SelectInvestor": { string temp = string.Empty; List<Business.Investor> Result = new List<Investor>(); Result = TradingServer.Facade.FacadeGetAllInvestor(); Result = Business.Market.InvestorList; if (Result != null) { int countInvestor = Result.Count; for (int n = 0; n < countInvestor; n++) { temp += Result[n].InvestorID.ToString() + "," + Result[n].InvestorStatusID.ToString() + "," + Result[n].InvestorGroupInstance.InvestorGroupID + "," + Result[n].AgentID.ToString() + "," + Result[n].Balance.ToString() + "," + Result[n].Credit.ToString() + "," + Result[n].Code + "," + Result[n].IsDisable.ToString() + "," + Result[n].TaxRate.ToString() + "," + Result[n].Leverage.ToString() + "," + Result[n].ToString() + "," + Result[n].Address + "," + Result[n].Phone + "," + Result[n].City + "," + Result[n].Country + "," + Result[n].Email + "," + Result[n].ZipCode + "," + Result[n].RegisterDay.ToString() + "," + Result[n].InvestorComment + "," + Result[n].State + "," + Result[n].NickName + "|"; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': 22450 accounts have been requested //string content = "'" + code + "': " + countInvestor + " accounts have been requested"; //string comment = "[account request]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } StringResult = subValue[0] + "$" + temp; } break; case "LoginServer": { string status = "[Failed]"; string temp = string.Empty; string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 4) { Business.Investor Result = new Investor(); int InvestorIndex = -1; int.TryParse(subParameter[2], out InvestorIndex); Result = TradingServer.Facade.FacadeLoginServer(subParameter[0], subParameter[1], InvestorIndex, subParameter[3]); if (Result != null) { temp += Result.InvestorID.ToString() + "," + Result.InvestorStatusID.ToString() + "," + Result.InvestorGroupInstance.InvestorGroupID + "," + Result.AgentID.ToString() + "," + Result.Balance.ToString() + "," + Result.Credit.ToString() + "," + Result.Code + "," + Result.IsDisable.ToString() + "," + Result.TaxRate.ToString() + "," + Result.Leverage.ToString() + "," + Result.InvestorProfileID.ToString() + "," + Result.Address + "," + Result.Phone + "," + Result.City + "," + Result.Country + "," + Result.Email + "," + Result.ZipCode + "," + Result.RegisterDay.ToString() + "," + Result.InvestorComment + "," + Result.State + "," + Result.NickName; status = "[Success]"; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': login admin [success] string content = "'" + code + "': login admin " + status; string comment = "[login admin]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + temp; } } break; case "SelectInvestorByID": { string temp = string.Empty; int InvestorID = -1; int.TryParse(subValue[1], out InvestorID); Business.Investor Result = new Investor(); if (Business.Market.InvestorList != null) { int countInvestor = Business.Market.InvestorList.Count; for (int j = 0; j < countInvestor; j++) { if (Business.Market.InvestorList[j].InvestorID == InvestorID) { Result = Business.Market.InvestorList[j]; break; } } } if (Result != null) { temp = Result.InvestorID + "," + Result.InvestorStatusID + "," + Result.InvestorGroupInstance.InvestorGroupID + "," + Result.AgentID + "," + Math.Round(Result.Balance, 2) + "," + Result.Credit + "," + Result.Code + "," + Result.IsDisable + "," + Result.TaxRate + "," + Result.Leverage + "," + Result.InvestorProfileID + "," + Result.Address + "," + Result.Phone + "," + Result.City + "," + Result.Country + "," + Result.Email + "," + Result.ZipCode + "," + Result.RegisterDay + "," + Result.Comment + "," + Result.State + "," + Result.NickName + "," + Result.AllowChangePwd + "," + Result.ReadOnly + "," + Result.SendReport + "," + Result.IsOnline; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': 22450 accounts have been requested int num = 0; if (!string.IsNullOrEmpty(temp)) num = 1; string content = "'" + code + "': " + num + " accounts have been requested"; string comment = "[account request]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion if (!string.IsNullOrEmpty(temp)) { StringResult = subValue[0] + "$" + temp; } else { StringResult = subValue[0] + "$"; } } break; case "FindInvestor": //COMMENT LOG BECAUSE MANAGER AUTO REQUEST ACCOUNT THEN ACCOUNT CHANGE(22/07/2011) { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { Business.Investor Result = new Investor(); Result = TradingServer.Facade.FacadeFindInvestor(subValue[1]); if (Result != null) { temp = Result.InvestorID + "," + Result.InvestorStatusID + "," + Result.InvestorGroupInstance.InvestorGroupID + "," + Result.AgentID + "," + Result.Balance + "," + Result.Credit + "," + Result.Code + "," + Result.IsDisable + "," + Result.TaxRate + "," + Result.Leverage + "," + Result.InvestorProfileID + "," + Result.Address + "," + Result.Phone + "," + Result.City + "," + Result.Country + "," + Result.Email + "," + Result.ZipCode + "," + Result.RegisterDay + "," + Result.InvestorComment + "," + Result.State + "," + Result.NickName + "," + Result.AllowChangePwd + "," + Result.ReadOnly + "," + Result.SendReport + "," + Result.IsOnline + "," + Result.Margin + "," + Result.FreezeMargin + "," + Result.PhonePwd + "," + Result.IDPassport + "," + Result.TotalDeposit; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': 22450 accounts have been requested //int num = 0; //if (!string.IsNullOrEmpty(temp)) // num = 1; //string content = "'" + code + "': " + num + " accounts have been requested"; //string comment = "[account request]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } StringResult = subValue[0] + "$" + temp; } break; case "FindInvestorWithOnlineCommand": { string temp = string.Empty; Business.Investor Result = new Investor(); Result = TradingServer.Facade.FacadeFindInvestorWithOnlineCommand(subValue[1]); if (Result != null) { temp = Result.InvestorID + "," + Result.NickName + "," + Result.Code; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': 22450 accounts have been requested int num = 0; if (!string.IsNullOrEmpty(temp)) num = 1; string content = "'" + code + "': " + num + " accounts have been requested"; string comment = "[account request]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + Result; } break; case "SelectInvestorByInvestorGroupID": { int InvestorGroupID = -1; int.TryParse(subValue[1], out InvestorGroupID); } break; #endregion #region Select Agent case "SelectAgent": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string temp = string.Empty; List<Business.Agent> Result = new List<Agent>(); Result = TradingServer.Facade.FacadeGetAllAgent(); if (Result != null) { int countAgent = Result.Count; for (int n = 0; n < countAgent; n++) { temp += Result[n].AgentID.ToString() + "}" + Result[n].AgentGroupID.ToString() + "}" + Result[n].Name + "}" + Result[n].InvestorID.ToString() + "}" + Result[n].Comment + "}" + Result[n].IsDisable.ToString() + "}" + Result[n].IsIpFilter.ToString() + "}" + Result[n].IpForm + "}" + Result[n].IpTo + "}" + Result[n].Code + "}" + Result[n].GroupCondition + "|"; } } StringResult = subValue[0] + "$" + temp; } } break; case "SelectAgentOnline": { bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { string temp = string.Empty; List<Business.Agent> Result = new List<Agent>(); for (int i = Market.AgentList.Count - 1; i >= 0; i--) { if (Market.AgentList[i].IsVirtualDealer == false && Market.AgentList[i].IsOnline == true) { Result.Add(Market.AgentList[i]); } } if (Result != null) { int countAgent = Result.Count; for (int n = 0; n < countAgent; n++) { temp += Result[n].AgentID + "}" + Result[n].Code + "}" + Result[n].IsOnline + "}" + Result[n].IsBusy + "|"; } } StringResult = subValue[0] + "$" + temp; } } break; case "SelectAgentByID": { string temp = string.Empty; int AgentID = -1; int.TryParse(subValue[1], out AgentID); Business.Agent Result = new Agent(); Result = TradingServer.Facade.FacadeGetAgentByAgentID(AgentID); if (Result != null) { temp += Result.AgentID.ToString() + "," + Result.AgentGroupID.ToString() + "," + Result.Name + "," + Result.InvestorID.ToString() + "," + Result.Comment + "," + Result.IsDisable.ToString(); } StringResult = subValue[0] + "$" + temp; } break; case "LoginAdmin": { string status = "[Failed]"; string temp = string.Empty; string[] subParameter = subValue[1].Split(','); int count = subParameter.Length; Business.Agent Result = new Agent(); if (count == 2) { Result = TradingServer.Facade.FacadeAdminLogin(subParameter[0], subParameter[1], ipAddress); if (Result == null) temp = "-1"; else { status = "[Success]"; temp += Result.AgentID.ToString() + "," + Result.AgentGroupID.ToString() + "," + Result.Name + "," + Result.InvestorID.ToString() + "," + Result.Comment + "," + Result.IsDisable.ToString() + "," + ipAddress; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': login admin [success] string content = "'" + code + "': login admin " + status; string comment = "[login admin]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + temp; } } break; case "AdminLogout": { bool Result = false; bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { int AgentID = -1; int.TryParse(subValue[1], out AgentID); Result = TradingServer.Facade.FacadeAdminLogout(AgentID); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': login admin [success] string status = "[Failed]"; if (Result) status = "[Success]"; string content = "'" + code + "': logout admin " + status; string comment = "[logout admin]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); #endregion } StringResult = subValue[0] + "$" + Result.ToString(); } break; case "LoginManager": { string temp = string.Empty; string status = "[Failed]"; string[] subParameter = subValue[1].Split(','); int count = subParameter.Length; Business.Agent Result = new Agent(); if (count == 3) { Result = TradingServer.Facade.FacadeManagerLogin(subParameter[0], subParameter[1], subParameter[2], ipAddress); if (Result == null) temp = "-1"; else { status = "[Success]"; temp += Result.AgentID.ToString() + "," + Result.AgentGroupID.ToString() + "," + Result.Name + "," + Result.InvestorID.ToString() + "," + Result.Comment + "," + Result.IsDisable.ToString() + "," + ipAddress; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': login admin [success] string content = "'" + code + "': login manager " + status; string comment = "[login manager]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + temp; } } break; case "ManagerLogout": { bool Result = false; bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { int AgentID = -1; int.TryParse(subValue[1], out AgentID); Result = TradingServer.Facade.FacadeManagerLogout(AgentID); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': login admin [success] string status = "[Failed]"; if (Result) status = "[Success]"; string content = "'" + code + "': logout manager " + status; string comment = "[logout manager]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); #endregion } StringResult = subValue[0] + "$" + Result.ToString(); } break; case "LoginDealer"://COMMENT LOG BECAUSE MANAGER 1 MINUTE LOGIN DEALER THEN MANY LOG INSERT TO DATABASE(21/07/2011) { bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { string[] subParameter = subValue[1].Split(','); int count = subParameter.Length; int AgentID = -1; int.TryParse(subParameter[0], out AgentID); bool Result = false; if (count > 0) { Result = TradingServer.Facade.FacadeDealerLogin(AgentID, ipAddress); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': dealer dispatched connected string content = "'" + code + "': dealer dispatched connected "; string comment = "[login dealer]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + Result.ToString(); } } } break; case "UpdateTimeSyncDealer": { int AgentID = -1; string[] splits = subValue[1].Split(','); if (splits.Length == 2) { int.TryParse(splits[0], out AgentID); string KeyActive = splits[1]; if (AgentID > 0) { for (int i = Business.Market.AgentList.Count - 1; i >= 0; i--) { if (Business.Market.AgentList[i].AgentID == AgentID) { Business.Market.AgentList[i].TimeSync = DateTime.Now; break; } } } } StringResult = subValue[0] + "$"; break; } case "DealerLogout": //COMMENT LOG BECAUSE MANAGER 1 MINUTE LOGIN DEALER THEN MANY LOG INSERT TO DATABASE(21/07/2011) { bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { int AgentID = -1; int.TryParse(subValue[1], out AgentID); bool Result = false; Result = TradingServer.Facade.FacadeDealerLogout(AgentID); #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': dealer dispatched disconnected string content = "'" + code + "': dealer dispatched disconnected "; string comment = "[logout dealer]"; TradingServer.Facade.FacadeAddNewSystemLog(4, content, comment, ipAddress, code); #endregion StringResult = subValue[0] + "$" + Result.ToString(); } } break; case "GetRequestToDealer": { string temp = string.Empty; int AgentID = -1; int.TryParse(subValue[1], out AgentID); if (AgentID > 0) { List<Business.RequestDealer> Result = new List<RequestDealer>(); Result = TradingServer.Facade.FacadeGetRequestToDealer(AgentID); if (Result == null) temp = "-1"; else { int count = Result.Count; for (int i = 0; i < count; i++) { temp += Result[i].AgentID + "," + Result[i].FlagConfirm + "," + Result[i].MaxDev + "," + Result[i].Name + "," + Result[i].Notice + "," + Result[i].TimeAgentReceive + "," + Result[i].TimeClientRequest + "," + Result[i].Request.Investor.InvestorID + "," + Result[i].Request.Symbol.Name + "," + Result[i].Request.Size + "," + Result[i].Request.OpenTime + "," + Result[i].Request.OpenPrice + "," + Result[i].Request.StopLoss + "," + Result[i].Request.TakeProfit + "," + Result[i].Request.ClosePrice + "," + Result[i].Request.Commission + "," + Result[i].Request.Swap + "," + Result[i].Request.Profit + "," + Result[i].Request.ID + "," + Result[i].Request.ExpTime + "," + Result[i].Request.ClientCode + "," + Result[i].Request.IsHedged + "," + Result[i].Request.Type.ID + "," + Result[i].Request.Margin + "," + Result[i].Request.Investor.InvestorGroupInstance.Name + "," + Result[i].Request.Symbol.Digit + "," + Result[i].Request.Symbol.SpreadByDefault.ToString() + "," + /*Result[i].Request.Symbol.SpreadDifference*/ Result[i].Request.SpreaDifferenceInOpenTrade + "," + Result[i].Request.CommandCode + "," + Result[i].Request.IsMultiClose + "," + Result[i].Request.RefCommandID + "|"; } } StringResult = subValue[0] + "$" + temp; } } break; case "GetAllRequestDealer": { string temp = string.Empty; List<Business.RequestDealer> Result = new List<RequestDealer>(); Result = TradingServer.Facade.FacadeGetAllRequestDealer(); if (Result == null) temp = "-1"; else { int count = Result.Count; for (int i = 0; i < count; i++) { temp += Result[i].AgentID + "," + Result[i].FlagConfirm + "," + Result[i].MaxDev + "," + Result[i].Name + "," + Result[i].Notice + "," + Result[i].TimeAgentReceive + "," + Result[i].TimeClientRequest + "," + Result[i].Request.Investor.InvestorID + "," + Result[i].Request.Symbol.Name + "," + Result[i].Request.Size + "," + Result[i].Request.OpenTime + "," + Result[i].Request.OpenPrice + "," + Result[i].Request.StopLoss + "," + Result[i].Request.TakeProfit + "," + Result[i].Request.ClosePrice + "," + Result[i].Request.Commission + "," + Result[i].Request.Swap + "," + Result[i].Request.Profit + "," + Result[i].Request.ID + "," + Result[i].Request.ExpTime + "," + Result[i].Request.ClientCode + "," + Result[i].Request.IsHedged + "," + Result[i].Request.Type.ID + "," + Result[i].Request.Margin + "," + Result[i].Request.Investor.InvestorGroupInstance.Name + "," + Result[i].Request.Symbol.Digit + "," + Result[i].Request.Symbol.SpreadByDefault.ToString() + "," + /*Result[i].Request.Symbol.SpreadDifference*/ Result[i].Request.SpreaDifferenceInOpenTrade + "," + Result[i].Request.CommandCode + "|"; } } StringResult = subValue[0] + "$" + temp; } break; case "GetAllRequestCompare": { string temp = string.Empty; List<Business.RequestDealer> Result = new List<RequestDealer>(); Result = TradingServer.Facade.FacadeGetAllRequestCompareDealer(); if (Result == null) temp = "-1"; else { int count = Result.Count; for (int i = 0; i < count; i++) { temp += Result[i].AgentID + "," + Result[i].FlagConfirm + "," + Result[i].MaxDev + "," + Result[i].Name + "," + Result[i].Notice + "," + Result[i].TimeAgentReceive + "," + Result[i].TimeClientRequest + "," + Result[i].Request.Investor.InvestorID + "," + Result[i].Request.Symbol.Name + "," + Result[i].Request.Size + "," + Result[i].Request.OpenTime + "," + Result[i].Request.OpenPrice + "," + Result[i].Request.StopLoss + "," + Result[i].Request.TakeProfit + "," + Result[i].Request.ClosePrice + "," + Result[i].Request.Commission + "," + Result[i].Request.Swap + "," + Result[i].Request.Profit + "," + Result[i].Request.ID + "," + Result[i].Request.ExpTime + "," + Result[i].Request.ClientCode + "," + Result[i].Request.IsHedged + "," + Result[i].Request.Type.ID + "," + Result[i].Request.Margin + "," + Result[i].Request.Investor.InvestorGroupInstance.Name + "," + Result[i].Request.Symbol.Digit + "," + Result[i].Request.Symbol.SpreadByDefault.ToString() + "," + /*Result[i].Request.Symbol.SpreadDifference*/ Result[i].Request.SpreaDifferenceInOpenTrade + "," + Result[i].Request.CommandCode + "|"; } } StringResult = subValue[0] + "$" + temp; } break; case "GetNoticeDealer": { bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { int AgentID = -1; string[] splits = subValue[1].Split(','); if (splits.Length == 2) { int.TryParse(splits[0], out AgentID); string KeyActive = splits[1]; if (AgentID > 0) { string Result = ""; Result = TradingServer.Facade.FacadeGetNoticeDealer(AgentID, KeyActive); if (!string.IsNullOrEmpty(Result)) { StringResult = subValue[0] + "$" + Result + ",NA28:" + DateTime.Now.Ticks; } else { StringResult = subValue[0] + "$" + ",NA28:" + DateTime.Now.Ticks; } } } } else { StringResult = "InvalidIP$NA27"; } } break; case "GetAllDealerOnline": { string temp = Facade.FacadeGetAllDealerOnline(); StringResult = subValue[0] + "$" + temp; } break; case "GetAllArchiveCandlesOffline": { string temp = Facade.FacadeGetAllArchiveCandlesOffline(); StringResult = subValue[0] + "$" + temp; } break; case "DealerCommandConfirm": { bool ResultAddNew = false; bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); Business.RequestDealer Result = new RequestDealer(); Result = this.ExtractionRequestDealer(subValue[1]); Facade.FillInstanceOpenTrade(Result, Result.Request); if (checkip) { ResultAddNew = TradingServer.Facade.FacadeDealerCommandConfirm(Result); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } else { StringResult = "InvalidIP"; TradingServer.Facade.FacadeAddNewSystemLog(3, "'" + code + "': dealer confirm action not taken (invalid ip)'" + Result.Request.Investor.Code + "' " + Result.Name.ToLower() + " " + Facade.FacadeGetTypeCommand(Result.Request.Type.ID) + " " + Result.Request.FormatDoubleToString(Result.Request.Size) + " symbol:" + Result.Request.Symbol.Name + " price open:" + Result.Request.MapPriceForDigit(Result.Request.OpenPrice) + " price close:" + Result.Request.MapPriceForDigit(Result.Request.ClosePrice) + " sl:" + Result.Request.MapPriceForDigit(Result.Request.StopLoss) + " tp:" + Result.Request.MapPriceForDigit(Result.Request.TakeProfit), "Invalid IP", ipAddress, code); } } break; case "DealerCommandReject": { bool ResultAddNew = false; Business.RequestDealer Result = new RequestDealer(); Result = this.ExtractionRequestDealer(subValue[1]); Facade.FillInstanceOpenTrade(Result, Result.Request); bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { ResultAddNew = TradingServer.Facade.FacadeDealerCommandReject(Result); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } else { StringResult = "InvalidIP"; TradingServer.Facade.FacadeAddNewSystemLog(3, "'" + code + "': dealer reject action not taken (invalid ip)'" + Result.Request.Investor.Code + "' " + Result.Name.ToLower() + " " + Facade.FacadeGetTypeCommand(Result.Request.Type.ID) + " " + Result.Request.FormatDoubleToString(Result.Request.Size) + " symbol:" + Result.Request.Symbol.Name + " price open:" + Result.Request.MapPriceForDigit(Result.Request.OpenPrice) + " price close:" + Result.Request.MapPriceForDigit(Result.Request.ClosePrice) + " sl:" + Result.Request.MapPriceForDigit(Result.Request.StopLoss) + " tp:" + Result.Request.MapPriceForDigit(Result.Request.TakeProfit), "Invalid IP", ipAddress, code); } } break; case "DealerCommandReturn": { bool ResultAddNew = false; Business.RequestDealer Result = new RequestDealer(); Result = this.ExtractionRequestDealer(subValue[1]); Facade.FillInstanceOpenTrade(Result, Result.Request); bool checkip = Facade.FacadeCheckIpManager(code, ipAddress); if (checkip) { ResultAddNew = TradingServer.Facade.FacadeDealerCommandReturn(Result); StringResult = subValue[0] + "$" + ResultAddNew.ToString(); } else { StringResult = "InvalidIP"; TradingServer.Facade.FacadeAddNewSystemLog(3, "'" + code + "': dealer return action not taken (invalid ip)'" + Result.Request.Investor.Code + "' " + Result.Name.ToLower() + " " + Facade.FacadeGetTypeCommand(Result.Request.Type.ID) + " " + Result.Request.FormatDoubleToString(Result.Request.Size) + " symbol:" + Result.Request.Symbol.Name + " price open:" + Result.Request.MapPriceForDigit(Result.Request.OpenPrice) + " price close:" + Result.Request.MapPriceForDigit(Result.Request.ClosePrice) + " sl:" + Result.Request.MapPriceForDigit(Result.Request.StopLoss) + " tp:" + Result.Request.MapPriceForDigit(Result.Request.TakeProfit), "Invalid IP", ipAddress, code); } } break; #endregion #region Select Internal Mail case "GetInternalMailToInvestorByID": { Business.InternalMail result = new InternalMail(); string temp = ""; int MailID = int.Parse(subValue[1]); result = TradingServer.Facade.FacadeGetInternalMailToInvestorByID(MailID); if (result != null) { temp = result.InternalMailID + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Subject) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.From) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.FromName) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Time.ToString()) + "," + result.IsNew.ToString() + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Content); } StringResult = subValue[0] + "$" + temp; } break; case "GetFullInternalMailToInvestor": { string[] tem = subValue[1].Split('{'); string temp = ""; List<Business.InternalMail> result = new List<InternalMail>(); result = Facade.internalMailInstance.GetInternalMailToInvestor(tem[0]); if (result != null) { int countResult = result.Count; for (int j = 0; j < countResult; j++) { temp += result[j].InternalMailID + "█" + result[j].Subject + "█" + result[j].From + "█" + result[j].FromName + "█" + result[j].Time.ToString() + "█" + result[j].IsNew.ToString() + "█" + result[j].Content + "█"; } } StringResult = subValue[0] + "$" + temp; } break; case "GetInternalMailToAgentByID": { Business.InternalMail result = new InternalMail(); string temp = ""; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { string[] spli = subValue[1].Split(','); int MailID = int.Parse(spli[0]); result = TradingServer.Facade.FacadeGetInternalMailToAgentByID(MailID, spli[1]); if (result != null) { temp = result.InternalMailID + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Subject) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.From) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.FromName) + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Time.ToString()) + "," + result.IsNew.ToString() + "," + TradingServer.Model.TradingCalculate.Instance.ConvertStringToHex(result.Content); } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Alert case "SelectAlertByInvestorID": { string temp = string.Empty; List<Business.PriceAlert> Result = new List<PriceAlert>(); string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int Start = int.Parse(subParameter[0]); int End = int.Parse(subParameter[1]); int InvestorID = int.Parse(subParameter[2]); Result = TradingServer.Facade.FacadeGetAlertByInvestorID(InvestorID, Start, End); if (Result != null) { for (int n = 0; n < Result.Count; n++) { temp += Result[n].ID + "," + Result[n].Symbol + "," + Result[n].Email + "," + Result[n].PhoneNumber + "," + Result[n].Value + "," + Result[n].AlertCondition.ToString() + "," + Result[n].AlertAction.ToString() + "," + Result[n].IsEnable + "," + Result[n].DateCreate + "," + Result[n].DateActive + "," + Result[n].InvestorID + "," + Result[n].Notification + "|"; } } } StringResult = subValue[0] + "$" + temp; } break; case "GetAlertByInvestorID": { string temp = string.Empty; List<Business.PriceAlert> Result = new List<PriceAlert>(); if (subValue[1] != "") { int InvestorID = int.Parse(subValue[1]); Result = TradingServer.Facade.FacadeGetAlertByInvestorID(InvestorID); if (Result != null) { for (int n = 0; n < Result.Count; n++) { temp += Result[n].ID + "{" + Result[n].Symbol + "{" + Result[n].Email + "{" + Result[n].PhoneNumber + "{" + Result[n].Value + "{" + Result[n].AlertCondition.ToString() + "{" + Result[n].AlertAction.ToString() + "{" + Result[n].IsEnable + "{" + Result[n].DateCreate + "{" + Result[n].DateActive + "{" + Result[n].InvestorID + "{" + Result[n].Notification + "`"; } } } StringResult = subValue[0] + "$" + temp; } break; case "SelectAlertByInvestorIDWithTime": { string temp = string.Empty; List<Business.PriceAlert> Result = new List<PriceAlert>(); string[] subParameter = subValue[1].Split(','); if (subParameter.Length > 0) { int InvestorID = int.Parse(subParameter[0]); DateTime Start = DateTime.Parse(subParameter[1]); DateTime End = DateTime.Parse(subParameter[2]); Result = TradingServer.Facade.FacadeGetAlertByInvestorIDWithTime(InvestorID, Start, End); if (Result != null) { for (int n = 0; n < Result.Count; n++) { temp += Result[n].ID + "," + Result[n].Symbol + "," + Result[n].Email + "," + Result[n].PhoneNumber + "," + Result[n].Value + "," + Result[n].AlertCondition.ToString() + "," + Result[n].AlertAction.ToString() + "," + Result[n].IsEnable + "," + Result[n].DateCreate + "," + Result[n].DateActive + "," + Result[n].InvestorID + "," + Result[n].Notification + "|"; } } } StringResult = subValue[0] + "$" + temp; } break; case "SelectHistoryAlertWithTime": { string temp = string.Empty; List<Business.PriceAlert> Result = new List<PriceAlert>(); string[] subParameter = subValue[1].Split('{'); if (subParameter.Length > 0) { int InvestorID = int.Parse(subParameter[0]); DateTime Start = DateTime.Parse(subParameter[1]); DateTime End = DateTime.Parse(subParameter[2]); Result = TradingServer.Facade.FacadeGetAlertByInvestorIDWithTime(InvestorID, Start, End); if (Result != null) { for (int n = 0; n < Result.Count; n++) { temp += Result[n].ID + "{" + Result[n].Symbol + "{" + Result[n].Email + "{" + Result[n].PhoneNumber + "{" + Result[n].Value + "{" + Result[n].AlertCondition.ToString() + "{" + Result[n].AlertAction.ToString() + "{" + Result[n].IsEnable + "{" + Result[n].DateCreate + "{" + Result[n].DateActive + "{" + Result[n].InvestorID + "{" + Result[n].Notification + "`"; } } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Permit case "SelectPermit": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string temp = string.Empty; List<Business.Permit> Result = new List<Permit>(); Result = TradingServer.Facade.FacadeGetAllPermit(); if (Result != null) { int countAgent = Result.Count; for (int n = 0; n < countAgent; n++) { temp += Result[n].PermitID.ToString() + "," + Result[n].AgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].Role.RoleID.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } } break; case "SelectPermitByID": { string temp = string.Empty; int PermitID = -1; int.TryParse(subValue[1], out PermitID); Business.Permit Result = new Permit(); Result = TradingServer.Facade.FacadeGetPermitByPermitID(PermitID); if (Result != null) { temp += Result.PermitID.ToString() + "," + Result.AgentGroupID.ToString() + "," + Result.AgentID.ToString() + "," + Result.Role.RoleID.ToString(); } StringResult = subValue[0] + "$" + temp; } break; case "GetCodeAgentSendMailByInvestorGroupID": { string temp = string.Empty; int GroupID = -1; int.TryParse(subValue[1], out GroupID); List<Business.Agent> Result = new List<Agent>(); Result = TradingServer.Facade.FacadeGetCodeAgentMailByInvestorGroupID(GroupID); if (Result != null) { for (int i = 0; i < Result.Count; i++) { if (Result[i].Name != "" & Result[i].Code != "") { temp += Result[i].Name + "," + Result[i].Code + "|"; } } } StringResult = subValue[0] + "$" + temp; } break; case "SelectPermitByAgentID": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { int AgentID = -1; int.TryParse(subValue[1], out AgentID); List<Business.Permit> Result = new List<Permit>(); Result = TradingServer.Facade.FacadeGetPermitByAgentID(AgentID); if (Result != null) { int countAgent = Result.Count; for (int n = 0; n < countAgent; n++) { temp += Result[n].PermitID.ToString() + "," + Result[n].AgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].Role.RoleID.ToString() + "|"; } } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Role case "SelectRole": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string temp = string.Empty; List<Business.Role> Result = new List<Role>(); Result = TradingServer.Facade.FacadeGetAllRole(); if (Result != null) { int countAgent = Result.Count; for (int n = 0; n < countAgent; n++) { temp += Result[n].RoleID.ToString() + "," + Result[n].Code + "," + Result[n].Name + "," + Result[n].Comment + "|"; } } StringResult = subValue[0] + "$" + temp; } } break; case "SelectRoleByID": { string temp = string.Empty; int RoleID = -1; int.TryParse(subValue[1], out RoleID); Business.Role Result = new Role(); Result = TradingServer.Facade.FacadeGetRoleByRoleID(RoleID); if (Result != null) { temp += Result.RoleID.ToString() + "," + Result.Code + "," + Result.Name + "," + Result.Comment; } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select IAgentSecurity case "SelectIAgentSecurity": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string temp = string.Empty; List<Business.IAgentSecurity> Result = new List<IAgentSecurity>(); Result = TradingServer.Facade.FacadeGetIAgentSecurity(); if (Result != null) { int countInvestor = Result.Count; for (int n = 0; n < countInvestor; n++) { temp += Result[n].IAgentSecurityID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].SecurityID.ToString() + "," + Result[n].Use.ToString() + "," + Result[n].MinLots.ToString() + "," + Result[n].MaxLots.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } } break; case "SelectIAgentSecurityByID": { string temp = string.Empty; int IAgentSecurityID = -1; int.TryParse(subValue[1], out IAgentSecurityID); Business.IAgentSecurity Result = new IAgentSecurity(); Result = TradingServer.Facade.FacadeGetIAgentSecurityByID(IAgentSecurityID); if (Result != null) { temp = Result.IAgentSecurityID.ToString() + "," + Result.AgentID.ToString() + "," + Result.SecurityID.ToString() + "," + Result.Use.ToString() + "," + Result.MinLots.ToString() + "," + Result.MaxLots.ToString(); } StringResult = subValue[0] + "$" + temp; } break; case "SelectIAgentSecurityByAgentID": { string temp = string.Empty; int AgentID = -1; int.TryParse(subValue[1], out AgentID); List<Business.IAgentSecurity> Result = new List<Business.IAgentSecurity>(); Result = TradingServer.Facade.FacadeGetIAgentSecurityByAgentID(AgentID); if (Result != null) { int countInvestor = Result.Count; for (int n = 0; n < countInvestor; n++) { temp += Result[n].IAgentSecurityID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].SecurityID.ToString() + "," + Result[n].Use.ToString() + "," + Result[n].MinLots.ToString() + "," + Result[n].MaxLots.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } break; case "SelectIAgentSecurityBySecurityID": { string temp = string.Empty; int SecurityID = -1; int.TryParse(subValue[1], out SecurityID); List<Business.IAgentSecurity> Result = new List<Business.IAgentSecurity>(); Result = TradingServer.Facade.FacadeGetIAgentSecurityBySecurityID(SecurityID); if (Result != null) { int countInvestor = Result.Count; for (int n = 0; n < countInvestor; n++) { temp += Result[n].IAgentSecurityID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].SecurityID.ToString() + "," + Result[n].Use.ToString() + "," + Result[n].MinLots.ToString() + "," + Result[n].MaxLots.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select IAgentGroup case "SelectIAgentGroup": { string temp = string.Empty; List<Business.IAgentGroup> Result = new List<IAgentGroup>(); Result = TradingServer.Facade.FacadeGetAllIAgentGroup(); if (Result != null) { int countInvestor = Result.Count; for (int n = 0; n < countInvestor; n++) { temp += Result[n].IAgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } break; case "SelectIAgentGroupByID": { string temp = string.Empty; int IAgentGroupID = -1; int.TryParse(subValue[1], out IAgentGroupID); Business.IAgentGroup Result = new IAgentGroup(); Result = TradingServer.Facade.FacadeGetIAgentGroupByIAgentGroupID(IAgentGroupID); if (Result != null) { temp = Result.IAgentGroupID.ToString() + "," + Result.AgentID.ToString() + "," + Result.InvestorGroupID.ToString(); } StringResult = subValue[0] + "$" + temp; } break; case "SelectIAgentGroupByAgentID": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { int AgentID = -1; int.TryParse(subValue[1], out AgentID); List<Business.IAgentGroup> Result = new List<Business.IAgentGroup>(); Result = TradingServer.Facade.FacadeGetIAgentGroupByAgentID(AgentID); if (Result != null) { int countInvestor = Result.Count; for (int n = 0; n < countInvestor; n++) { temp += Result[n].IAgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|"; } } } StringResult = subValue[0] + "$" + temp; } break; case "SelectIAgentSecurityByInvestorGroupID": { string temp = string.Empty; int InvestorGroupID = -1; int.TryParse(subValue[1], out InvestorGroupID); List<Business.IAgentGroup> Result = new List<Business.IAgentGroup>(); Result = TradingServer.Facade.FacadeGetIAgentGroupByInvestorGroupID(InvestorGroupID); if (Result != null) { int countInvestor = Result.Count; for (int n = 0; n < countInvestor; n++) { temp += Result[n].IAgentGroupID.ToString() + "," + Result[n].AgentID.ToString() + "," + Result[n].InvestorGroupID.ToString() + "|"; } } StringResult = subValue[0] + "$" + temp; } break; #endregion #region Select Market Area case "SelectMarketArea": { string temp = string.Empty; bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { temp = this.ExtractSelectMarketArea(); } StringResult = subValue[0] + "$" + temp; } break; #endregion #region SELECT OPEN TRADE(LOG COMMENT) case "GetOpenTradeByID": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { int OpenTradeID = -1; int.TryParse(subValue[1], out OpenTradeID); Business.OpenTrade Result = new OpenTrade(); Result = TradingServer.Facade.FacadeGetOpenTradeByOpenTradeID(OpenTradeID); if (Result.Symbol != null && Result.Investor != null) { StringResult = subValue[0] + "$" + Result.ClientCode + "," + Result.ClosePrice + "," + Result.CloseTime + "," + Result.CommandCode + "," + Result.Commission + "," + Result.ExpTime + "," + Result.ID + "," + Result.Investor.InvestorID + "," + Result.IsClose + "," + Result.IsHedged + "," + Result.Margin + "," + Result.MaxDev + "," + Result.OpenPrice + "," + Result.OpenTime + "," + Result.Profit + "," + Result.Size + "," + Result.StopLoss + "," + Result.Swap + "," + Result.Symbol.Name + "," + Result.TakeProfit + "," + Result.Taxes + "," + Result.Type.Name + "," + Result.Type.ID + "," + Result.Symbol.ContractSize + "," + /*Result.Symbol.SpreadDifference*/ +Result.SpreaDifferenceInOpenTrade + "," + Result.Symbol.Currency + "," + Result.Comment + "," + Result.AgentCommission; } #region INSERT SYSTEM LOG //INSERT SYSTEM LOG //'2222': 22450 accounts have been requested //int num = 0; //if (Result.ID > 0) // num = 1; //string content = "'" + code + "': " + num + " accounts have been requested"; //string comment = "[account request]"; //TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); #endregion } } break; #endregion #region SELECT ORDER DATA case "GetListFiles": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); bool checkPermit = Facade.FacadeCheckPermitDownloadStatement(code); if (checkip) { if (checkPermit) { DateTime from = new DateTime(); DateTime to = new DateTime(); string[] times = subValue[1].Split('{'); if (times.Length == 2) { from = DateTime.Parse(times[0]); to = DateTime.Parse(times[1]); StringResult = subValue[0] + "$" + Model.TradingCalculate.Instance.GetFileInfo(from, to); } } else { StringResult = subValue[0] + "$" + "MCM006"; } } } break; case "GetFileContents": { bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); bool checkPermit = Facade.FacadeCheckPermitDownloadStatement(code); if (checkip) { if (checkPermit) { if (subValue[1] != "") { StringResult = subValue[0] + "$" + Model.TradingCalculate.Instance.GetContenFile(subValue[1]); } } else { StringResult = subValue[0] + "$" + "MCM006"; } } } break; case "GetOrderByCode": { Business.OrderData Result = new OrderData(); Result = TradingServer.Facade.FacadeGetOrderDataByCode(subValue[1]); if (!string.IsNullOrEmpty(Result.Code)) { StringResult = subValue[0] + "$" + Result.Login + "," + Result.Type + "," + Result.OpenTime + "," + Result.CloseTime + "," + Result.OneConvRate + "," + Result.Commission + "," + Result.Comment + "," + Result.ExpDate + "," + Result.Lots + "," + Result.OpenPrice + "," + Result.ClosePrice + "," + Result.TwoConvRate + "," + Result.AgentCommission + "," + Result.ValueDate + "," + Result.Symbol + "," + Result.StopLoss + "," + Result.TakeProfit + "," + Result.MarginRate + "," + Result.Swaps + "," + Result.Taxes + "," + Result.Profit + "," + Result.OrderCode + "," + Result.Code; } } break; #endregion #region CHECK PASSWORD case "VerifyMaster": { bool resultCheck = false; string[] subParameter = subValue[1].Split(','); if (subParameter.Length == 2) { int investorID = 0; bool check = int.TryParse(subParameter[0], out investorID); if (check) { Business.Investor tempInvestor = new Investor(); tempInvestor = TradingServer.Facade.FacadeGetInvestorByInvestorID(investorID); bool checkip = Facade.FacadeCheckIpManagerAndAdmin(code, ipAddress); if (checkip) { bool checkRule = Facade.FacadeCheckPermitAccountManagerAndAdmin(code); bool checkGroup = Facade.FacadeCheckPermitAccessGroupManagerAndAdmin(code, tempInvestor.InvestorGroupInstance.InvestorGroupID); if (checkRule && checkGroup) { resultCheck = TradingServer.Facade.FacadeCheckMasterPassword(investorID, subParameter[1]); if (resultCheck) { string content = "'" + code + "': checking password of '" + tempInvestor.Code + "' [Success]"; string comment = "[verify password]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } else { string content = "'" + code + "': checking password of '" + tempInvestor.Code + "' [Failed]"; string comment = "[verify password]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } StringResult = subValue[0] + "$" + resultCheck; } else { StringResult = subValue[0] + "$MCM006"; string content = "'" + code + "': checking password of '" + tempInvestor.Code + "' failed(not enough rights)"; string comment = "[verify password]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } else { StringResult = subValue[0] + "$" + "MCM005"; string content = "'" + code + "': checking password of '" + tempInvestor.Code + "' failed(invalid ip)"; string comment = "[verify password]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); } } } } break; #endregion #region GET TIME SERVER case "GetTimeServer": { long time = 0; time = TradingServer.ClientFacade.FacadeGetTimeZoneServer(); StringResult = subValue[0] + "$" + time; } break; #endregion #region MANUAL SEND REPORT case "ManualSendReport": { string[] subParameter = subValue[1].Split(','); //string investorCode = subParameter[0]; //DateTime timeStart = DateTime.Parse(subParameter[1]); //DateTime timeEnd = DateTime.Parse(subParameter[2]); Business.TimeEvent newTimeEvent = new TimeEvent(); //Market.marketInstance.SendReportDayManaual(investorCode, timeStart, timeEnd); marketInstance.SendReportDay("All,", newTimeEvent); } break; case "ManualSendReportMonth": { string[] subParameter = subValue[1].Split(','); Business.TimeEvent newTimeEvent = new TimeEvent(); marketInstance.SendReportMonth("All", newTimeEvent); } break; #endregion #region MANUAL CALCULATION SWAP case "ManualCalculationSwap": { Business.TimeEvent newTimeEvent = new TimeEvent(); marketInstance.BeginCalculationSwap("All", newTimeEvent); } break; #endregion #region VIRTUAL DEALER case "KD312": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string status = "[Failed]"; VirtualDealer vd = new VirtualDealer(); string result = vd.MapDealer(subValue[1]); int id; int.TryParse(result, out id); if (id == 1) { result = vd.AddDealer(); status = "[Success]"; } string content = "'" + code + "': robot dealer config added/changed ['" + vd.Name + "'] " + status; string comment = "[add new robot dealer]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); StringResult = subValue[0] + "$" + result; } } break; case "KD341": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string status = "[Failed]",contentChange = ""; VirtualDealer vd = new VirtualDealer(); string result = vd.MapDealer(subValue[1]); int id; int.TryParse(result, out id); if (id == 1) { contentChange = vd.MapChangeContentConfigVD(); result = vd.UpdateDealer(); status = "[Success]"; } string content = "'" + code + "': update config robot dealer '" + vd.Name + "': " + contentChange + " " + status; string comment = "[update config robot dealer]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); StringResult = subValue[0] + "$" + result; } } break; case "KD485": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string status = "[Failed]"; int id; int.TryParse(subValue[1], out id); string result = "0"; VirtualDealer vd = new VirtualDealer(); if (id > 0) { vd.ID = id; result = vd.DeleteDealer(id); status = "[Success]"; } string content = "'" + code + "': delete robot dealer ['" + vd.Name + "'] " + status; string comment = "[delete config robot dealer]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); StringResult = subValue[0] + "$" + result; } } break; case "KD678": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string status = "[Failed]", contentChange = ""; VirtualDealer vd = new VirtualDealer(); string result = vd.MapDealer(subValue[1]); int id; int.TryParse(result, out id); if (id == 1) { contentChange = vd.MapChangeContentConfigVD(); result = vd.UpdateDealerInfo(); status = "[Success]"; } string content = "'" + code + "': update config robot dealer '" + vd.Name + "': " + contentChange + " " + status; string comment = "[update config robot dealer]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); StringResult = subValue[0] + "$" + result; } } break; case "KD346": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string result = ""; VirtualDealer vd = new VirtualDealer(); List<VirtualDealer> vds = new List<VirtualDealer>(); vds = vd.GetAllVirtualDealer(); for (int i = 0; i < vds.Count; i++) { result += vds[i].ExtractDealer() + "["; } StringResult = subValue[0] + "$" + result; } } break; case "KD394": { bool checkip = Facade.FacadeCheckIpAdmin(code, ipAddress); if (checkip) { string status = "[Failed]", contentChange = ""; VirtualDealer vd = new VirtualDealer(); string result = vd.MapDealer(subValue[1]); int id; int.TryParse(result, out id); if (id == 1) { contentChange = vd.MapChangeContentConfigVD(); result = vd.UpdateDealerSymbol(); status = "[Success]"; } string content = "'" + code + "': update config robot dealer '" + vd.Name + "': " + contentChange + " " + status; string comment = "[update config robot dealer]"; TradingServer.Facade.FacadeAddNewSystemLog(3, content, comment, ipAddress, code); StringResult = subValue[0] + "$" + result; } } break; #endregion #region MONITOR STATUS SYMBOL case "MonitorSymbol": { if (Business.Market.SymbolList != null) { int count = Business.Market.SymbolList.Count; for (int j = 0; j < count; j++) { if (Business.Market.SymbolList[j].Name == subValue[1]) { StringResult = subValue[0] + "$Trade Status: " + Business.Market.SymbolList[j].IsTrade + "- Quote Status: " + Business.Market.SymbolList[j].IsQuote; break; } } } } break; #endregion #region COMMAND GET CLIENT LOG case "GetClientLog": { //GetClientLog$LoginCode{StartTime{EndTime string[] subCommand = subValue[1].Split('{'); if (subCommand.Length > 0) { //int investorID = int.Parse(subCommand[0]); DateTime timeStart = DateTime.Parse(subCommand[1]); DateTime timeEnd = DateTime.Parse(subCommand[2]); if (Business.Market.InvestorList != null) { bool isExists = false; int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorList[i].Code == subCommand[0]) { #region PROCESS CHECK CLIENT IN MARKET if (Business.Market.ListClientLogs != null && Business.Market.ListClientLogs.Count > 0) { int countClientLog = Business.Market.ListClientLogs.Count; for (int j = 0; j < count; j++) { if (Business.Market.ListClientLogs[j].AdminCode == code) { Business.Market.ListClientLogs[j].InvestorID = Business.Market.InvestorList[i].InvestorID; Business.Market.ListClientLogs[j].InvestorCode = subCommand[0]; Business.Market.ListClientLogs[j].IsComplete = false; Business.Market.ListClientLogs[j].ClientLogs = new List<string>(); isExists = true; break; } } } if (!isExists) { Business.ClientLog newClientLog = new ClientLog(); newClientLog.InvestorID = Business.Market.InvestorList[i].InvestorID; newClientLog.InvestorCode = subCommand[0]; newClientLog.AdminCode = code; newClientLog.IsComplete = false; newClientLog.ClientLogs = new List<string>(); Business.Market.ListClientLogs.Add(newClientLog); } #endregion //SEND COMMAND TO CLIENT REQUEST LOG string strRequestActionLog = "ServerRequestLog$" + subCommand[0] + "{" + timeStart + "{" + timeEnd; Business.Market.InvestorList[i].ClientCommandQueue.Add(strRequestActionLog); System.Threading.Thread.Sleep(1000); StringResult = subValue[0] + "$True"; isExists = true; break; } } if (!isExists) StringResult = subValue[0] + "$False"; } } else { StringResult = subValue[0] + "$False"; } } break; #endregion } } } return StringResult; }
internal Business.OpenTrade FindOpenTradeInCommandExe(int commandID) { Business.OpenTrade result = new OpenTrade(); if (Business.Market.CommandExecutor != null) { int count = Business.Market.CommandExecutor.Count; for (int i = 0; i < count; i++) { if (Business.Market.CommandExecutor[i].ID == commandID) { result = Business.Market.CommandExecutor[i]; break; } } } return result; }
/// <summary> /// /// </summary> /// <param name="CommandID"></param> /// <returns></returns> internal Business.OpenTrade FindOpenTradeInInvestorList(int CommandID) { Business.OpenTrade Result = new OpenTrade(); if (Business.Market.InvestorList != null) { bool Flag = false; int count = Business.Market.InvestorList.Count; for (int i = 0; i < count; i++) { if (Flag) break; if (Business.Market.InvestorList[i].CommandList != null) { int countCommand = Business.Market.InvestorList[i].CommandList.Count; for (int j = 0; j < countCommand; j++) { if (Business.Market.InvestorList[i].CommandList[j].ID == CommandID) { //Business.Market.InvestorList[i].CommandList[j].InProcessClose = true; Result = Business.Market.InvestorList[i].CommandList[j]; Flag = true; break; } } } } } return Result; }
/// <summary> /// /// </summary> /// <param name="CommandID"></param> /// <returns></returns> internal Business.OpenTrade FindOpenTradeInSymbolListByRefID(int RefCommandID) { Business.OpenTrade Result = new OpenTrade(); if (Business.Market.SymbolList != null) { bool Flag = false; int count = Business.Market.SymbolList.Count; for (int i = 0; i < count; i++) { if (Flag) break; if (Business.Market.SymbolList[i].CommandList != null) { for (int j = 0; j < Business.Market.SymbolList[i].CommandList.Count; j++) { if (Business.Market.SymbolList[i].CommandList[j] != null) { if (Business.Market.SymbolList[i].CommandList[j].RefCommandID == RefCommandID) { Result.AgentCommission = Business.Market.SymbolList[i].CommandList[j].AgentCommission; Result.ClientCode = Business.Market.SymbolList[i].CommandList[j].ClientCode; Result.ClosePrice = Business.Market.SymbolList[i].CommandList[j].ClosePrice; Result.CloseTime = Business.Market.SymbolList[i].CommandList[j].CloseTime; Result.CommandCode = Business.Market.SymbolList[i].CommandList[j].CommandCode; Result.Comment = Business.Market.SymbolList[i].CommandList[j].Comment; Result.Commission = Business.Market.SymbolList[i].CommandList[j].Commission; Result.ExpTime = Business.Market.SymbolList[i].CommandList[j].ExpTime; Result.FreezeMargin = Business.Market.SymbolList[i].CommandList[j].FreezeMargin; Result.ID = Business.Market.SymbolList[i].CommandList[j].ID; Result.IGroupSecurity = Business.Market.SymbolList[i].CommandList[j].IGroupSecurity; Result.InProcessClose = Business.Market.SymbolList[i].CommandList[j].InProcessClose; Result.Investor = Business.Market.SymbolList[i].CommandList[j].Investor; Result.IsClose = Business.Market.SymbolList[i].CommandList[j].IsClose; Result.IsHedged = Business.Market.SymbolList[i].CommandList[j].IsHedged; Result.IsMultiClose = Business.Market.SymbolList[i].CommandList[j].IsMultiClose; Result.IsMultiUpdate = Business.Market.SymbolList[i].CommandList[j].IsMultiUpdate; Result.IsProcess = Business.Market.SymbolList[i].CommandList[j].IsProcess; Result.IsProcessStatus = Business.Market.SymbolList[i].CommandList[j].IsProcessStatus; Result.IsReOpen = Business.Market.SymbolList[i].CommandList[j].IsReOpen; Result.IsServer = Business.Market.SymbolList[i].CommandList[j].IsServer; Result.ManagerID = Business.Market.SymbolList[i].CommandList[j].ManagerID; Result.Margin = Business.Market.SymbolList[i].CommandList[j].Margin; Result.MaxDev = Business.Market.SymbolList[i].CommandList[j].MaxDev; Result.NumberUpdate = Business.Market.SymbolList[i].CommandList[j].NumberUpdate; Result.OpenPrice = Business.Market.SymbolList[i].CommandList[j].OpenPrice; Result.OpenTime = Business.Market.SymbolList[i].CommandList[j].OpenTime; Result.Profit = Business.Market.SymbolList[i].CommandList[j].Profit; Result.Size = Business.Market.SymbolList[i].CommandList[j].Size; Result.SpreaDifferenceInOpenTrade = Business.Market.SymbolList[i].CommandList[j].SpreaDifferenceInOpenTrade; Result.StopLoss = Business.Market.SymbolList[i].CommandList[j].StopLoss; Result.Swap = Business.Market.SymbolList[i].CommandList[j].Swap; Result.Symbol = Business.Market.SymbolList[i].CommandList[j].Symbol; Result.TakeProfit = Business.Market.SymbolList[i].CommandList[j].TakeProfit; Result.Taxes = Business.Market.SymbolList[i].CommandList[j].Taxes; Result.TotalSwap = Business.Market.SymbolList[i].CommandList[j].TotalSwap; Result.Type = Business.Market.SymbolList[i].CommandList[j].Type; Result.RefCommandID = Business.Market.SymbolList[i].CommandList[j].RefCommandID; Result.InsExe = Business.Market.SymbolList[i].CommandList[j].InsExe; Flag = true; break; } } } } } } if (Result == null) TradingServer.Facade.FacadeAddNewSystemLog(5, "Find command in symbol list: " + RefCommandID, "", "", ""); return Result; }
/// <summary> /// MAKE BINARY COMMAND OF MARKETAREA BINARY /// </summary> /// <param name="Cmd"></param> internal void MakeBinaryCommand(string Cmd) { Business.OpenTrade Command = new OpenTrade(); Command = Model.CommandFramework.CommandFrameworkInstance.ExtractCommand(Cmd); #region Get Setting IsTrade In Group bool IsTradeGroup = false; if (Business.Market.InvestorGroupList != null) { int count = Business.Market.InvestorGroupList.Count; for (int i = 0; i < count; i++) { if (Business.Market.InvestorGroupList[i].InvestorGroupID == Command.Investor.InvestorGroupInstance.InvestorGroupID) { if (Business.Market.InvestorGroupList[i].ParameterItems != null) { int countParameter = Business.Market.InvestorGroupList[i].ParameterItems.Count; for (int j = 0; j < countParameter; j++) { if (Business.Market.InvestorGroupList[i].ParameterItems[j].Code == "G01") { if (Business.Market.InvestorGroupList[i].ParameterItems[j].BoolValue == 1) IsTradeGroup = true; break; } } } break; } } } #endregion if (IsTradeGroup == true) { if (Command.Symbol == null || Command.Investor == null || Command.Type == null || Command.IGroupSecurity == null) { #region Session Close //Add String Command Server To Client string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(4, false, "CM001", Command); Command.Investor.ClientCommandQueue.Add(Message); #endregion return; } //End If Check Instance == Null else { #region Check Lots Minimum And Maximum In IGroupSecurity And Check IsTrade In IGroupSecurity bool IsTrade = false; double Minimum = -1; double Maximum = -1; double Step = -1; bool ResultCheckStepLots = false; #region Get Config IGroupSecurity if (Command.IGroupSecurity.IGroupSecurityConfig != null) { int countIGroupSecurityConfig = Command.IGroupSecurity.IGroupSecurityConfig.Count; for (int i = 0; i < countIGroupSecurityConfig; i++) { if (Command.IGroupSecurity.IGroupSecurityConfig[i].Code == "B01") { if (Command.IGroupSecurity.IGroupSecurityConfig[i].BoolValue == 1) IsTrade = true; } if (Command.IGroupSecurity.IGroupSecurityConfig[i].Code == "B11") { double.TryParse(Command.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Minimum); } if (Command.IGroupSecurity.IGroupSecurityConfig[i].Code == "B12") { double.TryParse(Command.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Maximum); } if (Command.IGroupSecurity.IGroupSecurityConfig[i].Code == "B13") { double.TryParse(Command.IGroupSecurity.IGroupSecurityConfig[i].NumValue, out Step); } } } #endregion if (IsTrade == true) { ResultCheckStepLots = Command.IGroupSecurity.CheckStepLots(Minimum, Maximum, Step, Command.Size); #region If Check Step Lots False Return Client if (ResultCheckStepLots == false) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(4, false, "CM013", Command); Command.Investor.ClientCommandQueue.Add(Message); return; } #endregion //Call Function Make Binary Command In MarketArea BinaryCommand Command.Symbol.MarketAreaRef.AddCommand(Command); } //End If Check IsTrade In IGroupSecurity else { #region Check IsTrade == False string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(4, false, "CM014", Command); Command.Investor.ClientCommandQueue.Add(Message); return; #endregion } //End Else Check IsTrade In IGroupSecurity #endregion } //End Else Check Instance == Null } //End If Check IsTrade In Group else { if (Command.Investor != null) { //Add Result To Client Command Queue Of Investor string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(4, false, "CM015", Command); Command.Investor.ClientCommandQueue.Add(Message); } return; } //End Else Check IsTrade In Group }
/// <summary> /// /// </summary> /// <param name="ListSymbol"></param> /// <param name="OpenTradeID"></param> /// <returns></returns> private Business.OpenTrade FindAndRemoveOpenTradeInBinaryCommandListReference(List<Business.Symbol> ListSymbol, int OpenTradeID) { Business.OpenTrade Result = new OpenTrade(); if (ListSymbol != null) { bool Flag = false; int count = ListSymbol.Count; for (int i = 0; i < count; i++) { if (ListSymbol[i].BinaryCommandList != null) { int countOpenTrade = ListSymbol[i].BinaryCommandList.Count; for (int j = 0; j < ListSymbol[i].BinaryCommandList.Count; j++) { if (ListSymbol[i].BinaryCommandList[j].ID == OpenTradeID) { Result.ClientCode = ListSymbol[i].BinaryCommandList[j].ClientCode; Result.ClosePrice = ListSymbol[i].BinaryCommandList[j].ClosePrice; Result.CloseTime = ListSymbol[i].BinaryCommandList[j].CloseTime; Result.CommandCode = ListSymbol[i].BinaryCommandList[j].CommandCode; Result.Commission = ListSymbol[i].BinaryCommandList[j].Commission; Result.ExpTime = ListSymbol[i].BinaryCommandList[j].ExpTime; Result.ID = ListSymbol[i].BinaryCommandList[j].ID; Result.IsClose = ListSymbol[i].BinaryCommandList[j].IsClose; Result.Margin = ListSymbol[i].BinaryCommandList[j].Margin; Result.OpenPrice = ListSymbol[i].BinaryCommandList[j].OpenPrice; Result.OpenTime = ListSymbol[i].BinaryCommandList[j].OpenTime; Result.Profit = ListSymbol[i].BinaryCommandList[j].Profit; Result.Size = ListSymbol[i].BinaryCommandList[j].Size; Result.StopLoss = ListSymbol[i].BinaryCommandList[j].StopLoss; Result.Swap = ListSymbol[i].BinaryCommandList[j].Swap; Result.Symbol = ListSymbol[i].BinaryCommandList[j].Symbol; Result.TakeProfit = ListSymbol[i].BinaryCommandList[j].TakeProfit; Result.Investor = ListSymbol[i].BinaryCommandList[j].Investor; Result.Type = ListSymbol[i].BinaryCommandList[j].Type; if (ListSymbol[i].BinaryCommandList.Count > 0) { ListSymbol[i].BinaryCommandList.RemoveAt(j); } Flag = true; break; } } } if (Flag == false) { if (ListSymbol[i].RefSymbol != null) { Result = this.FindAndRemoveOpenTradeInCommandListReference(ListSymbol[i].RefSymbol, OpenTradeID); } else { bool IsBuy = false; if (Result.Type.ID == 3) IsBuy = true; if (Result.Investor.ClientBinaryQueue == null) Result.Investor.ClientBinaryQueue = new List<string>(); string Message = "CancelBinary$False,Can't Find Symbol," + Result.ID + "," + Result.Investor.InvestorID + "," + Result.Symbol.Name + "," + Result.Size + "," + IsBuy + "," + Result.OpenTime + "," + Result.OpenPrice + "," + Result.StopLoss + "," + Result.TakeProfit + "," + Result.ClosePrice + "," + Result.Commission + "," + Result.Swap + "," + Result.Profit + "," + "Comment," + Result.ID + "," + "BinaryTrading" + "," + 1 + "," + Result.ExpTime + "," + Result.ClientCode + "," + Result.CommandCode + "," + Result.IsHedged + "," + Result.Type.ID + "," + Result.Margin + ",Binary"; Result.Investor.ClientBinaryQueue.Add(Message); } } } } return Result; }
/// <summary> /// UPDATE COMMAND OF MARKET AREA SPOT COMMAND /// </summary> /// <param name="Cmd"></param> internal void UpdateCommand(string Cmd) { Business.OpenTrade Result = new OpenTrade(); Result = Model.CommandFramework.CommandFrameworkInstance.ExtractCommand(Cmd); if (Result.Symbol != null && Result.Investor != null && Result.Type != null && Result.IGroupSecurity != null) { #region Check Valid Take Profit And Stop Loss bool ResultTakeProfit = false; ResultTakeProfit = Result.Symbol.CheckLimitAndStop(Result.Symbol.Name, Result.Type.ID, Result.StopLoss, Result.TakeProfit, Result.Symbol.LimitStopLevel, Result.Symbol.Digit); if (ResultTakeProfit == false) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(3, false, "CM018", Result); Result.Investor.ClientCommandQueue.Add(Message); return; } #endregion #region Call Check FreezeLevel //Call Check FreezeLevel ResultTakeProfit = Result.Symbol.CheckLimitAndStop(Result.Symbol.Name, Result.Type.ID, Result.StopLoss, Result.TakeProfit, Result.Symbol.FreezeLevel, Result.Symbol.Digit); if (ResultTakeProfit == false) { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(3, false, "CM019", Result); Result.Investor.ClientCommandQueue.Add(Message); return; } #endregion Result.Symbol.MarketAreaRef.UpdateCommand(Result); } else { string Message = Model.CommandFramework.CommandFrameworkInstance.ExtractCommandToString(3, false, "CM001", Result); Result.Investor.ClientCommandQueue.Add(Message); return; } }
/// <summary> /// /// </summary> /// <param name="Command"></param> /// <returns></returns> public OpenTrade CalculateCommand(OpenTrade Command) { return null; }