/// <summary>
        /// 
        /// </summary>
        /// <param name="listRollBack"></param>
        internal bool MultipleCloseCommand(Business.OpenTrade command)
        {
            bool result = false;
            if (this.CommandList != null && this.CommandList.Count > 0)
            {
                int count = this.CommandList.Count;
                for (int i = 0; i < this.CommandList.Count; i++)
                {
                    if (this.CommandList[i].ID == command.ID)
                    {
                        bool IsBuy = false;
                        if (this.CommandList[i].Type.ID == 1 || this.CommandList[i].Type.ID == 7 ||
                            this.CommandList[i].Type.ID == 9 || this.CommandList[i].Type.ID == 11 ||
                            this.CommandList[i].Type.ID == 17 || this.CommandList[i].Type.ID == 19)
                        {
                            IsBuy = true;
                        }

                        #region SET NEW DATA
                        this.CommandList[i].CloseTime = DateTime.Now;
                        this.CommandList[i].ClosePrice = command.ClosePrice;

                        //this.CommandList[i].CalculatorProfitCommand(this.CommandList[i]);
                        //this.CommandList[i].Profit = this.CommandList[i].Symbol.ConvertCurrencyToUSD(this.CommandList[i].Symbol.Currency, this.CommandList[i].Profit, false,
                        //    this.CommandList[i].SpreaDifferenceInOpenTrade, this.CommandList[i].Symbol.Digit);
                        #endregion

                        #region CLOSE COMMAND

                        #region COMMAND CODE(REMOVE COMMAND IN COMMAND EXECUTOR AND SYMBOL LIST
                        ////Remove Command In Symbol List
                        //bool temp = TradingServer.Facade.FacadeRemoveOpenTradeInCommandList(this.CommandList[i].ID);

                        ////Remove Command In Command Executor
                        //bool deleteCommandExe = TradingServer.Facade.FacadeRemoveOpenTradeInCommandExecutor(this.CommandList[i].ID);
                        #endregion

                        //NEW SOLUTION ADD COMMAND TO REMOVE LIST
                        //Business.OpenTrade newOpenTrade = this.CommandList[i];
                        Business.OpenRemove newOpenRemove = new OpenRemove();
                        newOpenRemove.InvestorID = this.InvestorID;
                        newOpenRemove.OpenTradeID = this.CommandList[i].ID;
                        newOpenRemove.SymbolName = this.CommandList[i].Symbol.Name;
                        newOpenRemove.IsExecutor = true;
                        newOpenRemove.IsSymbol = true;
                        newOpenRemove.IsInvestor = false;
                        Business.Market.AddCommandToRemoveList(newOpenRemove);

                        //if (temp && deleteCommandExe)
                        //{
                            double totalProfit = Math.Round(this.CommandList[i].Profit + this.CommandList[i].Commission + this.CommandList[i].Swap, 2);

                            //Update Balance Of Investor Account
                            bool updateBalance = this.UpdateBalance(this.CommandList[i].Investor.InvestorID, this.Balance);

                            if (updateBalance)
                            {
                                //'00001140': close command #00148535 balance : 123456 command profit : 10000
                                string content = "'" + this.Code + "': multiple close command #" + this.CommandList[i].CommandCode + " balance : " + this.Balance + " command profit: " + totalProfit +
                                    " Commission: " + this.CommandList[i].Commission + " Swap: " + this.CommandList[i].Swap;

                                TradingServer.Facade.FacadeAddNewSystemLog(5, content, "[Close Command]", "", this.Code);

                                this.Balance += totalProfit;

                                //Close Command Complete Add Message To Client
                                if (this.ClientCommandQueue == null)
                                    this.ClientCommandQueue = new List<string>();

                                #region Map Command Server To Client
                                if (command.IsServer)
                                {
                                    string Message = "CloseCommandByManager$True,Close Command Complete," + this.CommandList[i].ID + "," + this.CommandList[i].Investor.InvestorID + "," +
                                        this.CommandList[i].Symbol.Name + "," + this.CommandList[i].Size + "," + IsBuy + "," + this.CommandList[i].OpenTime + "," +
                                        this.CommandList[i].OpenPrice + "," + this.CommandList[i].StopLoss + "," + this.CommandList[i].TakeProfit + "," +
                                        this.CommandList[i].ClosePrice + "," + this.CommandList[i].Commission + "," + this.CommandList[i].Swap + "," + this.CommandList[i].Profit + "," +
                                        "Comment," + this.CommandList[i].ID + "," + this.CommandList[i].Type.Name + "," + 1 + "," + this.CommandList[i].ExpTime + "," +
                                        this.CommandList[i].ClientCode + "," + this.CommandList[i].CommandCode + "," + this.CommandList[i].IsHedged + "," + this.CommandList[i].Type.ID + "," +
                                        this.CommandList[i].Margin + ",Close," + this.CommandList[i].CloseTime;

                                    if (this.ClientCommandQueue == null)
                                        this.ClientCommandQueue = new List<string>();

                                    this.ClientCommandQueue.Add(Message);
                                }
                                else
                                {
                                    string Message = "CloseCommand$True,Close Command Complete," + this.CommandList[i].ID + "," + this.CommandList[i].Investor.InvestorID + "," +
                                        this.CommandList[i].Symbol.Name + "," + this.CommandList[i].Size + "," + IsBuy + "," + this.CommandList[i].OpenTime + "," +
                                        this.CommandList[i].OpenPrice + "," + this.CommandList[i].StopLoss + "," + this.CommandList[i].TakeProfit + "," +
                                        this.CommandList[i].ClosePrice + "," + this.CommandList[i].Commission + "," + this.CommandList[i].Swap + "," +
                                        this.CommandList[i].Profit + "," + "Comment," + this.CommandList[i].ID + "," + this.CommandList[i].Type.Name + "," +
                                        1 + "," + this.CommandList[i].ExpTime + "," + this.CommandList[i].ClientCode + "," + this.CommandList[i].CommandCode + "," +
                                        this.CommandList[i].IsHedged + "," + this.CommandList[i].Type.ID + "," + this.CommandList[i].Margin +
                                        ",Close," + this.CommandList[i].CloseTime;

                                    if (this.ClientCommandQueue == null)
                                        this.ClientCommandQueue = new List<string>();

                                    this.ClientCommandQueue.Add(Message);
                                }
                                #endregion

                                #region INSERT SYSTEM LOG EVENT CLOSE SPOT COMMAND ORDER
                                string mode = TradingServer.Facade.FacadeGetTypeNameByTypeID(this.CommandList[i].Type.ID).ToLower();
                                string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Size.ToString(), 2);
                                string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].OpenPrice.ToString(), this.CommandList[i].Symbol.Digit);
                                string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].StopLoss.ToString(), this.CommandList[i].Symbol.Digit);
                                string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].TakeProfit.ToString(), this.CommandList[i].Symbol.Digit);
                                string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Symbol.TickValue.Bid.ToString(), this.CommandList[i].Symbol.Digit);
                                string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Symbol.TickValue.Ask.ToString(), this.CommandList[i].Symbol.Digit);

                                string contentServer = "'" + this.Code + "': multiple close order #" + this.CommandList[i].CommandCode + " (" + mode + " " + size + " " +
                                    this.CommandList[i].Symbol.Name + " at " + this.CommandList[i].OpenPrice + ") at " + command.ClosePrice + " completed";

                                TradingServer.Facade.FacadeAddNewSystemLog(5, contentServer, "[multiple close]", this.CommandList[i].Investor.IpAddress, this.CommandList[i].Investor.Code);
                                #endregion

                                bool removeOpenTrade = false;
                                lock (Business.Market.syncObject)
                                {
                                    //Remove Command In Investor List
                                    removeOpenTrade = this.CommandList.Remove(this.CommandList[i]);
                                }

                                if (removeOpenTrade)
                                {
                                    if (this.CommandList.Count > 0)
                                    {
                                        //RECACULATION TOTAL MARGIN OF INVESTOR
                                        Business.Margin newMargin = new Margin();
                                        newMargin = this.CommandList[0].Symbol.CalculationTotalMargin(this.CommandList);
                                        this.Margin = newMargin.TotalMargin;
                                        this.FreezeMargin = newMargin.TotalFreezeMargin;
                                    }
                                    else
                                    {
                                        this.Margin = 0;
                                    }

                                    //SEND NOTIFY TO MANAGER THEN CLOSE COMMAND
                                    TradingServer.Facade.FacadeSendNotifyManagerRequest(3, this);
                                }
                                else
                                {
                                    return false;
                                }
                            }
                            else
                            {
                                return false;
                            }
                        //}
                        //else
                        //{
                        //    return false;
                        //}

                        #endregion

                        result = true;
                        break;
                    }
                }
            }

            return result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="listCommand"></param>
        /// <returns></returns>
        internal Margin CalculationTotalMargin(List<Business.OpenTrade> nlistCommand)
        {
            Margin result = new Margin();
            result.TotalMargin = 0;
            result.TotalFreezeMargin = 0;
            if (nlistCommand == null || nlistCommand.Count == 0)
            {
                return result;
            }

            List<Business.OpenTrade> listCommand = new List<Business.OpenTrade>();

            #region for 1
            for (int i = 0; i < nlistCommand.Count; i++)
            {
                if (nlistCommand[i].Type.ID != 3 & nlistCommand[i].Type.ID != 4 & nlistCommand[i].Type.ID != 7 & nlistCommand[i].Type.ID != 8 &
                    nlistCommand[i].Type.ID != 9 & nlistCommand[i].Type.ID != 10 && nlistCommand[i].Type.ID != 17 && nlistCommand[i].Type.ID != 18 &&
                    nlistCommand[i].Type.ID != 19 && nlistCommand[i].Type.ID != 20 && !nlistCommand[i].IsClose)
                {
                    Business.OpenTrade newOpenTrade = new Business.OpenTrade();
                    newOpenTrade.ClosePrice = nlistCommand[i].ClosePrice;
                    //newOpenTrade.CloseTime = nlistCommand[i].CloseTime;
                    //newOpenTrade.ExpTime = nlistCommand[i].ExpTime;
                    newOpenTrade.ID = nlistCommand[i].ID;
                    newOpenTrade.Investor = nlistCommand[i].Investor;
                    //newOpenTrade.OpenPrice = nlistCommand[i].OpenPrice;
                    //newOpenTrade.OpenTime = nlistCommand[i].OpenTime;
                    newOpenTrade.Size = nlistCommand[i].Size;
                    //newOpenTrade.StopLoss = nlistCommand[i].StopLoss;
                    newOpenTrade.Symbol = new Symbol();
                    newOpenTrade.Symbol = nlistCommand[i].Symbol;
                    //newOpenTrade.TakeProfit = nlistCommand[i].TakeProfit;
                    //newOpenTrade.NumberUpdate = nlistCommand[i].NumberUpdate;
                    newOpenTrade.Type = new TradeType();
                    newOpenTrade.Type = nlistCommand[i].Type;
                    //newOpenTrade.ClientCode = nlistCommand[i].ClientCode;
                    //newOpenTrade.IsClose = nlistCommand[i].IsClose;
                    //newOpenTrade.Profit = nlistCommand[i].Profit;
                    //newOpenTrade.Swap = nlistCommand[i].Swap;
                    //newOpenTrade.Commission = nlistCommand[i].Commission;
                    //newOpenTrade.CommandCode = nlistCommand[i].CommandCode;
                    newOpenTrade.Margin = nlistCommand[i].Margin;
                    newOpenTrade.IsHedged = nlistCommand[i].Symbol.IsHedged;
                    listCommand.Add(newOpenTrade);
                }
            }
            #endregion
            double margin, lots, change;
            if (listCommand.Count > 0)
            {
                double leverage = GetLeverageSymbol(listCommand[0]);
                if (leverage >= 0) leverage = listCommand[0].Investor.Leverage;

                for (int i = 0; i < listCommand.Count; i++)
                {
                    if ((listCommand[i].Type.ID % 2 != 0) && listCommand[i].Size != 0 && listCommand[i].IsHedged)
                    {
                        for (int f = 0; f < listCommand.Count; f++)
                        {
                            #region Non FreezeMargin
                            if ((listCommand[f].Symbol.Name == listCommand[i].Symbol.Name) &&
                                (listCommand[f].Type.ID == listCommand[i].Type.ID + 1) && (listCommand[f].Size != 0) && listCommand[i].IsHedged && !listCommand[i].Symbol.UseFreezeMargin)
                            {
                                //result += listCommand[i].Margin;
                                change = Math.Abs(listCommand[i].Size - listCommand[f].Size);
                                if (change == 0)
                                {
                                    lots = listCommand[i].Size + listCommand[f].Size;
                                    result.TotalMargin += CalculationMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol);
                                    listCommand[f].Size = 0;
                                    listCommand[f].Margin = 0;
                                    listCommand[i].Size = 0;
                                    listCommand[i].Margin = 0;
                                    break;
                                }
                                else
                                {
                                    if (listCommand[i].Size > listCommand[f].Size)
                                    {
                                        margin = (listCommand[i].Margin / listCommand[i].Size) * change;
                                        listCommand[i].Margin = margin;
                                        listCommand[i].Size = change;
                                        lots = listCommand[f].Size * 2;
                                        result.TotalMargin += CalculationMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol);
                                        listCommand[f].Size = 0;
                                    }
                                    else
                                    {
                                        margin = (listCommand[f].Margin / listCommand[f].Size) * change;
                                        listCommand[f].Margin = margin;
                                        listCommand[f].Size = change;
                                        lots = listCommand[i].Size * 2;
                                        result.TotalMargin += CalculationMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol);
                                        listCommand[i].Size = 0;
                                        break;
                                    }
                                }
                            }
                            #endregion

                            #region FreezeMargin
                            if ((listCommand[f].Symbol.Name == listCommand[i].Symbol.Name) &&
                               (listCommand[f].Type.ID == listCommand[i].Type.ID + 1) && (listCommand[f].Size != 0) && listCommand[i].IsHedged && listCommand[i].Symbol.UseFreezeMargin)
                            {
                                //result += listCommand[i].Margin;
                                change = Math.Abs(listCommand[i].Size - listCommand[f].Size);
                                if (change == 0)
                                {
                                    lots = listCommand[i].Size + listCommand[f].Size;
                                    result.TotalFreezeMargin += this.CalculationFreezeMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol.FreezeMarginHedged, listCommand[i].Symbol);
                                    listCommand[f].Size = 0;
                                    listCommand[f].Margin = 0;
                                    listCommand[i].Size = 0;
                                    listCommand[i].Margin = 0;
                                    break;
                                }
                                else
                                {
                                    if (listCommand[i].Size > listCommand[f].Size)
                                    {
                                        margin = (listCommand[i].Margin / listCommand[i].Size) * change;
                                        listCommand[i].Margin = margin;
                                        listCommand[i].Size = change;
                                        lots = listCommand[f].Size * 2;
                                        result.TotalFreezeMargin += CalculationFreezeMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol.FreezeMarginHedged, listCommand[i].Symbol);
                                        listCommand[f].Size = 0;
                                    }
                                    else
                                    {
                                        margin = (listCommand[f].Margin / listCommand[f].Size) * change;
                                        listCommand[f].Margin = margin;
                                        listCommand[f].Size = change;
                                        lots = listCommand[i].Size * 2;
                                        result.TotalFreezeMargin += CalculationFreezeMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol.FreezeMarginHedged, listCommand[i].Symbol);
                                        listCommand[i].Size = 0;
                                        break;
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                }

                for (int i = 0; i < listCommand.Count; i++)
                {
                    if (listCommand[i].Size != 0)
                    {
                        if (!listCommand[i].Symbol.UseFreezeMargin)
                        {
                            result.TotalMargin += listCommand[i].Margin;
                        }else
                        {
                            result.TotalFreezeMargin += listCommand[i].Margin;
                        }
                    }
                }
            }
            return result;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Re Calculation Account Then Init Server
        /// </summary>
        internal void ReCalculationAccountInit()
        {
            this.IsCalculating = true;

            if (this.CommandList != null)
            {
                if (this.CommandList.Count > 0 && this.CommandList != null)
                {
                    //RECALCULATION PROFIT OF COMMAND WITH TICK ONLINE IS GET FROM CANDLES 1M
                    for (int i = 0; i < this.CommandList.Count; i++)
                    {
                        bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(this.CommandList[i].Type.ID);
                        if (!isPending)
                        {
                            this.CommandList[i].CalculatorProfitCommand(this.CommandList[i]);
                            this.CommandList[i].Profit = this.CommandList[i].Symbol.ConvertCurrencyToUSD(this.CommandList[i].Symbol.Currency, this.CommandList[i].Profit, false,
                                this.CommandList[i].SpreaDifferenceInOpenTrade, this.CommandList[i].Symbol.Digit);

                            this.CommandList[i].CalculatorMarginCommand(this.CommandList[i]);
                        }

                        //if (this.CommandList[i].Type.ID != 3 && this.CommandList[i].Type.ID != 4 &&
                        //    this.CommandList[i].Type.ID != 7 && this.CommandList[i].Type.ID != 8 &&
                        //    this.CommandList[i].Type.ID != 9 && this.CommandList[i].Type.ID != 10 &&
                        //    this.CommandList[i].Type.ID != 17 && this.CommandList[i].Type.ID != 18 &&
                        //    this.CommandList[i].Type.ID != 19 && this.CommandList[i].Type.ID != 20)
                        //{

                        //}
                    }

                    Business.Margin newMargin = new Margin();
                    newMargin = this.CommandList[0].Symbol.CalculationTotalMargin(this.CommandList);
                    this.Margin = newMargin.TotalMargin;
                    this.FreezeMargin = newMargin.TotalFreezeMargin;

                    this.Profit = this.InvestorGroupInstance.CalculationTotalProfit(this.CommandList);
                    this.Equity = this.Balance + this.Credit + this.Profit;
                    double Loss = 0;
                    double Profit = 0;
                    int Method = -1;

                    switch (this.InvestorGroupInstance.FreeMargin)
                    {
                        case "do not use unrealized profit/loss":
                            Method = 0;
                            break;
                        case "use unrealized profit/loss":
                            Method = 1;
                            break;
                        case "use unrealized profit only":
                            Method = 2;
                            Profit = this.InvestorGroupInstance.CalculationTotalProfitPositive(this.CommandList);
                            break;
                        case "use unrealized loss only":
                            Method = 3;
                            Loss = this.InvestorGroupInstance.CalculationTotalLoss(this.CommandList);
                            break;
                    }

                    double totalMargin = this.Margin + this.FreezeMargin;
                    this.FreeMargin = this.InvestorGroupInstance.CalculationTotalFreeMargin(totalMargin, this.Balance, this.Equity, Profit, Loss, Method);
                    this.MarginLevel = (this.Equity * 100) / (this.Margin + this.FreezeMargin);
                }
                else
                {
                    this.Margin = 0;
                    this.FreeMargin = 0;
                    this.MarginLevel = 0;
                    this.Profit = 0;
                }
            }

            this.IsCalculating = false;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="Command"></param>
        private void ProcessSetTask()
        {
            Investor.IsInProcess = true;
            this.isInTask = true;

            while (this.UpdateCommands.Count > 0)
            {
                #region WHILE
                try
                {
                    DateTime timeStart = DateTime.Now;

                    NumCheck++;
                    if (NumCheck == 100)
                        NumCheck = 0;

                    Business.OpenTrade Command = this.UpdateCommands[0];

                    this.UpdateCommands.RemoveAt(0);

                    if (Command == null)
                        continue;

                    bool IsBuy = false;
                    if (Command.Type.ID == 1 || Command.Type.ID == 7 || Command.Type.ID == 9 || Command.Type.ID == 11 || Command.Type.ID == 17 || Command.Type.ID == 19)
                        IsBuy = true;

                    #region PROCESS MARKET AREA
                    if (Command.Symbol.MarketAreaRef.IMarketAreaName.Trim() == "SpotCommand")
                    {
                        #region Spot Command
                        if (this.CommandList != null)
                        {
                            if (Command.IsClose && Command.IsMultiClose)
                            {
                                this.MultiCloseCommand(Command);
                            }
                            else
                            {
                                #region For Command List
                                bool FlagCommand = false;
                                for (int i = 0; i < this.CommandList.Count; i++)
                                {
                                    if (this.CommandList[i].ID == Command.ID)
                                    {
                                        if (Command.IsClose == true)
                                        {
                                            int commandRefID = this.CommandList[i].ID;
                                            bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(Command.Type.ID);

                                            //if (Command.Type.ID == 7 || Command.Type.ID == 8 || Command.Type.ID == 9 || Command.Type.ID == 10)
                                            if(isPending)
                                            {
                                                #region CLOSE PENDING ORDER
                                                //ADD PENDING ORDER TO DATABASE
                                                //int addHistory = TradingServer.Facade.FacadeAddNewCommandHistory(Command.Investor.InvestorID, Command.Type.ID, Command.CommandCode,
                                                //    Command.OpenTime, Command.OpenPrice, Command.CloseTime, Command.ClosePrice, 0, 0, 0, Command.ExpTime, Command.Size, Command.StopLoss,
                                                //    Command.TakeProfit, Command.ClientCode, Command.Symbol.SymbolID, Command.Taxes, Command.AgentCommission, Command.Comment, "3",
                                                //    Command.TotalSwap, Command.RefCommandID, Command.AgentRefConfig, Command.IsActivePending, Command.IsStopLossAndTakeProfit);

                                                //NEW SOLUTION ADD COMMAND TO REMOVE LIST
                                                Business.OpenRemove newOpenRemove = new OpenRemove();
                                                newOpenRemove.InvestorID = this.InvestorID;
                                                newOpenRemove.OpenTradeID = this.CommandList[i].ID;
                                                newOpenRemove.SymbolName = this.CommandList[i].Symbol.Name;
                                                newOpenRemove.IsExecutor = true;
                                                newOpenRemove.IsSymbol = true;
                                                newOpenRemove.IsInvestor = false;
                                                Business.Market.AddCommandToRemoveList(newOpenRemove);

                                                //Delete Command In Database
                                                //bool deleteDB = TradingServer.Facade.FacadeDeleteOpenTradeByID(Command.ID);

                                                //Close Command Complete Add Message To Client
                                                if (this.ClientCommandQueue == null)
                                                    this.ClientCommandQueue = new List<string>();

                                                #region MAP STRING SEND TO CLIENT
                                                string Message = string.Empty;
                                                if (Command.IsServer)
                                                {
                                                    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;

                                                    string msg = "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";

                                                    string msgNotify = "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.AgentRefConfig + "," + Command.SpreaDifferenceInOpenTrade;

                                                    //SEND COMMAND TO AGENT SERVER
                                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                                    newAgentNotify.NotifyMessage = msgNotify;
                                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Command.Investor.InvestorGroupInstance);
                                                }
                                                else
                                                {
                                                    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;

                                                    string msg = "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";

                                                    string msgNotify = "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.AgentRefConfig + "," + Command.SpreaDifferenceInOpenTrade;

                                                    //SEND COMMAND TO AGENT SERVER
                                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                                    newAgentNotify.NotifyMessage = msgNotify;
                                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Command.Investor.InvestorGroupInstance);
                                                }

                                                this.ClientCommandQueue.Add(Message);
                                                #endregion

                                                #region INSTER SYSTEM LOG(EVENT DELETE PENDING ORDER)
                                                string mode = TradingServer.Facade.FacadeGetTypeNameByTypeID(this.CommandList[i].Type.ID).ToLower();
                                                string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Size.ToString(), 2);
                                                string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].OpenPrice.ToString(), this.CommandList[i].Symbol.Digit);

                                                string content = "'" + this.CommandList[i].Investor.Code + "': delete order #" + this.CommandList[i].CommandCode + " " + mode + " " +
                                                    size + this.CommandList[i].Symbol.Name + " at " + openPrice;

                                                TradingServer.Facade.FacadeAddNewSystemLog(5, content, "[delete order]", Command.Investor.IpAddress, Command.Investor.Code);
                                                #endregion

                                                lock (Business.Market.syncObject)
                                                {
                                                    //Delete Command In Investor
                                                    bool deleteCommandInvestor = this.CommandList.Remove(this.CommandList[i]);
                                                }
                                                #endregion
                                            }
                                            else
                                            {
                                                #region CLOSE SPOT COMMAND
                                                #region GET STEP LOTS
                                                double step = -1;
                                                int strStep = -1;
                                                if (Command.IGroupSecurity != null)
                                                {
                                                    if (Command.IGroupSecurity.IGroupSecurityConfig != null)
                                                    {
                                                        int count = Command.IGroupSecurity.IGroupSecurityConfig.Count;
                                                        for (int j = 0; j < count; j++)
                                                        {
                                                            if (Command.IGroupSecurity.IGroupSecurityConfig[j].Code == "B13")
                                                                double.TryParse(Command.IGroupSecurity.IGroupSecurityConfig[j].NumValue, out step);
                                                        }
                                                    }
                                                }

                                                if (step > 0)
                                                {
                                                    string[] temp = step.ToString().Split('.');
                                                    if (temp.Length > 1)
                                                    {
                                                        strStep = temp[1].Length;
                                                    }
                                                }
                                                #endregion

                                                double tempSize = -1;
                                                if (strStep > 0)
                                                    tempSize = Math.Round((this.CommandList[i].Size - Command.Size), strStep);
                                                else
                                                    tempSize = Math.Round((this.CommandList[i].Size - Command.Size), 2);

                                                if (tempSize > 0)
                                                    Command.Commission = Model.CalculationFormular.Instance.CalculationCommission(Command);

                                                #region CALCLUATION COMMISSION FOR AGENT(COMMENT 03-02-2012)
                                                //double commissionAgent = Model.CalculationFormular.Instance.CalculationAgentCommission(Command);

                                                ////set Agent Commission To Open Trade
                                                //Command.AgentCommission = commissionAgent;

                                                //Business.Investor newAgent = TradingServer.Facade.FacadeSelectInvestorByCode(Command.Investor.AgentID);

                                                //if (newAgent.InvestorID > 0)
                                                //{
                                                //    //Update balance of agent
                                                //    double BalanceAgent = newAgent.Balance + commissionAgent;
                                                //    TradingServer.Facade.FacadeUpdateBalance(newAgent.InvestorID, BalanceAgent);

                                                //    //search in investor online if agent online then send message get balance of agent
                                                //    if (Business.Market.InvestorList != null)
                                                //    {
                                                //        int countInvestorOnline = Business.Market.InvestorList.Count;
                                                //        for (int m = 0; m < countInvestorOnline; m++)
                                                //        {
                                                //            if (Business.Market.InvestorList[m].InvestorID == newAgent.InvestorID)
                                                //            {
                                                //                if (Business.Market.InvestorList[m].IsOnline)
                                                //                {
                                                //                    string Message = "GetNewBalance";
                                                //                    Business.Market.InvestorList[m].ClientCommandQueue.Add(Message);
                                                //                }

                                                //                Business.Market.InvestorList[m].Balance += commissionAgent;

                                                //                //SEND NOTIFY TO MANAGER with type =3 then balance and credit
                                                //                TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[m]);

                                                //                break;
                                                //            }
                                                //        }
                                                //    }
                                                //}
                                                //else
                                                //{
                                                //    Command.AgentCommission = 0;
                                                //}
                                                #endregion

                                                #region CALCULATION COMMISSION FOR AGENT
                                                double commissionAgent = Model.CalculationFormular.Instance.CalculationAgentCommission(Command);

                                                //search in investor online if agent online then send message get balance of agent
                                                if (Business.Market.InvestorList != null)
                                                {
                                                    int countInvestorOnline = Business.Market.InvestorList.Count;
                                                    for (int m = 0; m < countInvestorOnline; m++)
                                                    {
                                                        if (Business.Market.InvestorList[m].Code == Command.Investor.AgentID)
                                                        {
                                                            double BalanceAgent = Business.Market.InvestorList[m].Balance + commissionAgent;

                                                            Business.Market.InvestorList[m].Balance += commissionAgent;

                                                            //Update balance of agent
                                                            TradingServer.Facade.FacadeUpdateBalance(Business.Market.InvestorList[m].InvestorID, BalanceAgent);

                                                            //set Agent Commission To Open Trade
                                                            Command.AgentCommission = commissionAgent;

                                                            //SEND NOTIFY TO MANAGER with type =3 then balance and credit
                                                            TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[m]);

                                                            if (Business.Market.InvestorList[m].IsOnline)
                                                            {
                                                                string Message = "GetNewBalance";

                                                                Business.Market.InvestorList[m].ClientCommandQueue.Add(Message);
                                                            }

                                                            break;
                                                        }
                                                    }
                                                }
                                                #endregion

                                                int commandId = Command.ID;

                                                int ResultHistory = -1;
                                                //Add Command To Command History
                                                ResultHistory = TradingServer.Facade.FacadeAddNewCommandHistory(Command.Investor.InvestorID, Command.Type.ID, Command.CommandCode, Command.OpenTime,
                                                    Command.OpenPrice, Command.CloseTime, Command.ClosePrice, Command.Profit, this.CommandList[i].Swap, Command.Commission, Command.ExpTime,
                                                    Command.Size, Command.StopLoss, Command.TakeProfit, Command.ClientCode, Command.Symbol.SymbolID, Command.Taxes, Command.AgentCommission,
                                                    Command.Comment, "4", this.CommandList[i].TotalSwap, this.CommandList[i].RefCommandID,
                                                    this.CommandList[i].AgentRefConfig, this.CommandList[i].IsActivePending, this.CommandList[i].IsStopLossAndTakeProfit);

                                                //NEW SOLUTION ADD COMMAND TO REMOVE LIST
                                                Business.OpenRemove newOpenRemove = new OpenRemove();
                                                newOpenRemove.InvestorID = this.InvestorID;
                                                newOpenRemove.OpenTradeID = commandId;
                                                newOpenRemove.SymbolName = this.CommandList[i].Symbol.Name;
                                                newOpenRemove.IsExecutor = true;
                                                newOpenRemove.IsSymbol = true;
                                                newOpenRemove.IsInvestor = false;
                                                Business.Market.AddCommandToRemoveList(newOpenRemove);

                                                double totalProfit = Math.Round(Command.Profit + Command.Commission + Command.Swap, 2);
                                                //CHANGE FORMAT CALCULATION SWAP(20-02-2012)
                                                //Update Balance Of Investor Account
                                                double totalBalance = this.Balance + totalProfit;

                                                bool updateBalance = false;
                                                if (!Business.Market.IsConnectMT4)
                                                    updateBalance = this.UpdateBalance(Command.Investor.InvestorID, totalBalance);

                                                if (updateBalance)
                                                {
                                                    string strBalance = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.Balance.ToString(), 2);
                                                    string strProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(totalProfit.ToString(), 2);
                                                    string strCommission = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Commission.ToString(), 2);
                                                    string strSwap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Swap.ToString(), 2);
                                                    string strTotalSwap = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].TotalSwap.ToString(), 2);
                                                    string strTotalBalance = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(totalBalance.ToString(), 2);

                                                    //'00001140': close command #00148535 balance : 123456 command profit : 10000
                                                    string content = "'" + this.Code + "': close command #" + this.CommandList[i].CommandCode + " balance : " + strBalance + " command profit: " + strProfit +
                                                        " Commission: " + strCommission + " Swap: " + strSwap + " Total Swap: " + strTotalSwap +
                                                        " -> total balance: " + strTotalBalance;

                                                    TradingServer.Facade.FacadeAddNewSystemLog(5, content, "[Close Command]", "", this.Code);

                                                    if (!Business.Market.IsConnectMT4)
                                                    {
                                                        this.Balance += totalProfit;
                                                    }
                                                }

                                                //Update Command In Database
                                                bool deleteCommandDB = TradingServer.Facade.FacadeDeleteOpenTradeByID(Command.ID);

                                                //Close Command Complete Add Message To Client
                                                if (this.ClientCommandQueue == null)
                                                    this.ClientCommandQueue = new List<string>();

                                                string msg = string.Empty;

                                                #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;

                                                    //int countOnline = this.CountInvestorOnline(this.InvestorID);
                                                    //if (countOnline > 0)
                                                    this.ClientCommandQueue.Add(Message);

                                                    string msgNotify = "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.AgentRefConfig + "," + Command.SpreaDifferenceInOpenTrade;

                                                    //SEND COMMAND TO AGENT SERVER
                                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                                    newAgentNotify.NotifyMessage = msgNotify;
                                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Command.Investor.InvestorGroupInstance);

                                                    msg = Message;
                                                }
                                                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;

                                                    //int countOnline = this.CountInvestorOnline(this.InvestorID);
                                                    //if (countOnline > 0)
                                                    this.ClientCommandQueue.Add(Message);

                                                    string msgNotify = "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.AgentRefConfig + "," + Command.SpreaDifferenceInOpenTrade;

                                                    //SEND COMMAND TO AGENT SERVER
                                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                                    newAgentNotify.NotifyMessage = msgNotify;
                                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Command.Investor.InvestorGroupInstance);

                                                    msg = Message;
                                                }
                                                #endregion

                                                #region INSERT SYSTEM LOG EVENT CLOSE SPOT COMMAND ORDER
                                                string mode = "sell";
                                                if (this.CommandList[i].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(), this.CommandList[i].Symbol.Digit);
                                                string strClosePrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.ClosePrice.ToString(), this.CommandList[i].Symbol.Digit);
                                                string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.StopLoss.ToString(), this.CommandList[i].Symbol.Digit);
                                                string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.TakeProfit.ToString(), this.CommandList[i].Symbol.Digit);
                                                string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Symbol.TickValue.Bid.ToString(), this.CommandList[i].Symbol.Digit);
                                                string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Symbol.TickValue.Ask.ToString(), this.CommandList[i].Symbol.Digit);

                                                string contentServer = "'" + this.Code + "': close order #" + Command.CommandCode + " (" + mode + " " + size + " " +
                                                    Command.Symbol.Name + " at " + openPrice + ") at " + strClosePrice + " completed";

                                                TradingServer.Facade.FacadeAddNewSystemLog(5, contentServer, "  ", Command.Investor.IpAddress, Command.Investor.Code);
                                                #endregion

                                                lock (Business.Market.syncObject)
                                                {
                                                    //Remove Command In Investor List
                                                    //this.CommandList.Remove(this.CommandList[i]);
                                                    bool deleteCommandInvestor = this.CommandList.Remove(this.CommandList[i]);
                                                }

                                                #region RECALCULATION TOTAL MARGIN OF INVESTOR
                                                //RECACULATION TOTAL MARGIN OF INVESTOR
                                                if (this.CommandList.Count > 0)
                                                {
                                                    Business.Margin newMargin = new Margin();
                                                    newMargin = Command.Symbol.CalculationTotalMargin(this.CommandList);
                                                    this.Margin = newMargin.TotalMargin;
                                                    this.FreezeMargin = newMargin.TotalFreezeMargin;
                                                }
                                                else
                                                {
                                                    this.Margin = 0;
                                                    this.FreezeMargin = 0;
                                                }
                                                #endregion

                                                #region MAKE NEW COMMAND WITH DELTA SIZE
                                                if (!Business.Market.IsConnectMT4)
                                                {
                                                    if (tempSize > 0)
                                                    {
                                                        //SET MARGIN OF NEW COMMAND
                                                        Command.Margin = 0;

                                                        //SET NEW SIZE AND NEW PRICES
                                                        Command.Size = tempSize;
                                                        Command.Swap = 0;
                                                        Command.IsReNewOpen = true;
                                                        Command.RefCommandID = commandRefID;
                                                        switch (Command.Type.ID)
                                                        {
                                                            case 1:
                                                                {
                                                                    Command.ClosePrice = Command.Symbol.TickValue.Bid;
                                                                    Command.OpenPrice = Command.OpenPrice;
                                                                }
                                                                break;
                                                            case 2:
                                                                {
                                                                    Command.ClosePrice = Command.Symbol.TickValue.Ask;
                                                                    Command.OpenPrice = Command.OpenPrice;
                                                                }
                                                                break;
                                                        }

                                                        Command.IsServer = true;
                                                        Command.Symbol.MarketAreaRef.AddCommand(Command);
                                                    }
                                                }
                                                #endregion

                                                //SEND NOTIFY TO MANAGER THEN CLOSE COMMAND
                                                TradingServer.Facade.FacadeSendNotifyManagerRequest(3, this);
                                                #endregion

                                                //CHECK NEW RULE CLOSE POSITION
                                                Command.CheckRuleCloseOpenPosition(this.CommandList, tempSize);
                                            }
                                        }
                                        else
                                        {
                                            #region Command Is Open
                                            //Update Command Of Investor
                                            //this.CommandList[i].ClientCode = Command.ClientCode;

                                            #region SET CLOSE PRICE FOR COMMAND
                                            if (Command.ClosePrice > 0)

                                            {
                                                this.CommandList[i].ClosePrice = Command.ClosePrice;
                                            }
                                            else
                                            {
                                                switch (this.CommandList[i].Type.ID)
                                                {
                                                    case 1:
                                                        if (this.CommandList[i].Symbol.TickValue != null && this.CommandList[i].Symbol.TickValue.Bid > 0)
                                                            this.CommandList[i].ClosePrice = this.CommandList[i].Symbol.TickValue.Bid;
                                                        break;

                                                    case 2:
                                                        if (this.CommandList[i].Symbol.TickValue != null && this.CommandList[i].Symbol.TickValue.Ask > 0)
                                                        {
                                                            double Ask = 0;
                                                            Ask = (Symbol.ConvertNumberPip(this.CommandList[i].Symbol.Digit, this.CommandList[i].SpreaDifferenceInOpenTrade) +
                                                                this.CommandList[i].Symbol.TickValue.Ask);
                                                            this.CommandList[i].ClosePrice = Ask;
                                                        }
                                                        break;
                                                }
                                            }
                                            #endregion

                                            bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(this.CommandList[i].Type.ID);
                                            if (!isPending)
                                            {
                                                this.CommandList[i].CalculatorProfitCommand(this.CommandList[i]);
                                                this.CommandList[i].Profit = this.CommandList[i].Symbol.ConvertCurrencyToUSD(this.CommandList[i].Symbol.Currency, this.CommandList[i].Profit,
                                                    false, this.CommandList[i].SpreaDifferenceInOpenTrade, this.CommandList[i].Symbol.Digit);

                                                #region UPDATE CLOSE PRICES IN COMMAND EXECUTOR
                                                //if (Business.Market.CommandExecutor != null)
                                                //{
                                                //    int countCommandExe = Business.Market.CommandExecutor.Count;
                                                //    for (int j = 0; j < countCommandExe; j++)
                                                //    {
                                                //        if (Business.Market.CommandExecutor[j].ID == Command.ID)
                                                //        {
                                                //            Business.Market.CommandExecutor[j].ClosePrice = Command.ClosePrice;
                                                //            Business.Market.CommandExecutor[j].Profit = this.CommandList[i].Profit;

                                                //            break;
                                                //        }
                                                //    }
                                                //}
                                                this.CommandList[i].InsExe.Profit = this.CommandList[i].Profit;
                                                #endregion

                                                #region UPDATE PROFIT IN SYMBOL LIST
                                                if (this.CommandList[i].Symbol != null && this.CommandList[i].Symbol.CommandList != null)
                                                {
                                                    int countCommand = this.CommandList[i].Symbol.CommandList.Count;
                                                    for (int j = 0; j < countCommand; j++)
                                                    {
                                                        if (this.CommandList[i].Symbol.CommandList[j].ID == Command.ID)
                                                        {
                                                            this.CommandList[i].Symbol.CommandList[j].Profit = this.CommandList[i].Profit;

                                                            break;
                                                        }
                                                    }
                                                }
                                                #endregion
                                            }
                                            else
                                            {
                                                #region UPDATE PENDING ORDER(PENDING ORDER ACTIVE)
                                                if (this.CommandList[i].Type.ID != Command.Type.ID)
                                                {
                                                    if (this.CommandList[i].Type.ID > Command.Type.ID)
                                                    {
                                                        //CHECK VALID ACCOUNT IF TRUE THEN UPDATE TYPE ELSE
                                                        //THEN CANCEL PENDING ORDER AND INSERT DATABASE
                                                        bool checkValidAccount = Command.CheckValidAccountInvestor(Command);

                                                        if (checkValidAccount)
                                                        {
                                                            //SET OPEN TIME FOR COMMAND
                                                            this.CommandList[i].OpenTime = DateTime.Now;
                                                            Command.OpenTime = DateTime.Now;
                                                            this.CommandList[i].OpenPrice = Command.OpenPrice;
                                                            this.CommandList[i].IsActivePending = false;
                                                            this.CommandList[i].IsStopLossAndTakeProfit = false;

                                                            //CALCULATION COMMISSION(COMMENT BECAUSE DON"T NEED, COMMISSION GET FROM MT4)
                                                            //double commission = Model.CalculationFormular.Instance.CalculationCommission(Command);
                                                            //Command.Commission = commission;

                                                            #region CALCULATION AGENT COMMISSION
                                                            //CALCULATION AGENT COMMISSION
                                                            double agentCommission = Model.CalculationFormular.Instance.CalculationAgentCommission(Command);

                                                            Business.Investor newAgent = TradingServer.Facade.FacadeSelectInvestorByCode(Command.Investor.AgentID);

                                                            //set commission and agent commission to command list in investor
                                                            this.CommandList[i].AgentCommission = agentCommission;
                                                            //this.CommandList[i].Commission = commission;
                                                            this.CommandList[i].Commission = Command.Commission;

                                                            #region FIND AGENT AND REQUEST BALANCE IF AGENT ONLINE
                                                            if (newAgent != null && newAgent.InvestorID > 0)
                                                            {
                                                                //Update balance of agent
                                                                double BalanceAgent = newAgent.Balance + agentCommission;
                                                                TradingServer.Facade.FacadeUpdateBalance(newAgent.InvestorID, BalanceAgent);

                                                                //search in investor online if agent online then send message get balance of agent
                                                                if (Business.Market.InvestorList != null)
                                                                {
                                                                    int countInvestorOnline = Business.Market.InvestorList.Count;
                                                                    for (int m = 0; m < countInvestorOnline; m++)
                                                                    {
                                                                        if (Business.Market.InvestorList[m].InvestorID == newAgent.InvestorID)
                                                                        {
                                                                            if (Business.Market.InvestorList[m].IsOnline)
                                                                            {
                                                                                Business.Market.InvestorList[m].Balance += agentCommission;
                                                                                string messageAgent = "GetNewBalance";

                                                                                Business.Market.InvestorList[m].ClientCommandQueue.Add(messageAgent);

                                                                                //SEND NOTIFY TO MANAGER
                                                                                TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[m]);
                                                                            }

                                                                            break;
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                            #endregion
                                                            #endregion

                                                            this.CommandList[i].Type = Command.Type;

                                                            //CALCULATION MARGIN FOR COMMAND PENDING ORDER
                                                            this.CommandList[i].CalculatorMarginCommand(this.CommandList[i]);

                                                            //SET MARGIN FOR COMMAND
                                                            Command.Margin = this.CommandList[i].Margin;

                                                            #region FIND COMMAND IN COMMAND EXECUTOR AND UPDATE TYPE
                                                            if (Business.Market.CommandExecutor != null)
                                                            {
                                                                int countExe = Business.Market.CommandExecutor.Count;
                                                                for (int m = 0; m < countExe; m++)
                                                                {
                                                                    if (Business.Market.CommandExecutor[m].ID == Command.ID)
                                                                    {
                                                                        Business.Market.CommandExecutor[m].Type = Command.Type;
                                                                        Business.Market.CommandExecutor[m].Commission = Command.Commission;
                                                                        Business.Market.CommandExecutor[m].AgentCommission = agentCommission;
                                                                        Business.Market.CommandExecutor[m].Margin = Command.Margin;
                                                                        Business.Market.CommandExecutor[m].OpenTime = Command.OpenTime;
                                                                        Business.Market.CommandExecutor[m].OpenPrice = Command.OpenPrice;
                                                                        Business.Market.CommandExecutor[m].IsActivePending = false;
                                                                        Business.Market.CommandExecutor[m].IsStopLossAndTakeProfit = false;

                                                                        break;
                                                                    }
                                                                }
                                                            }
                                                            #endregion

                                                            #region UPDATE COMMAND TYPE IN SYMBOL LIST
                                                            if (this.CommandList[i].Symbol != null && this.CommandList[i].Symbol.CommandList != null)
                                                            {
                                                                int countCommand = this.CommandList[i].Symbol.CommandList.Count;
                                                                for (int j = 0; j < countCommand; j++)
                                                                {
                                                                    if (this.CommandList[i].Symbol.CommandList[j].ID == Command.ID)
                                                                    {
                                                                        this.CommandList[i].Symbol.CommandList[j].Type = Command.Type;
                                                                        this.CommandList[i].Symbol.CommandList[j].Commission = Command.Commission;
                                                                        this.CommandList[i].Symbol.CommandList[j].AgentCommission = agentCommission;
                                                                        this.CommandList[i].Symbol.CommandList[j].Margin = Command.Margin;
                                                                        this.CommandList[i].Symbol.CommandList[j].OpenTime = Command.OpenTime;
                                                                        this.CommandList[i].Symbol.CommandList[j].OpenPrice = Command.OpenPrice;
                                                                        this.CommandList[i].Symbol.CommandList[j].IsActivePending = false;
                                                                        this.CommandList[i].Symbol.CommandList[j].IsStopLossAndTakeProfit = false;

                                                                        break;
                                                                    }
                                                                }
                                                            }
                                                            #endregion

                                                            //Update Command Type In Database
                                                            TradingServer.Facade.FacadeUpdateOpenTrade(Command);

                                                            #region Map Command Server To Client
                                                            if (this.ClientCommandQueue == null)
                                                                this.ClientCommandQueue = new List<string>();

                                                            string Message = "UpdatePendingOrder$True,Update Pending Order Command To Spot Command," + this.CommandList[i].ID + "," +
                                                                this.CommandList[i].Investor.InvestorID + "," + this.CommandList[i].Symbol.Name + "," + this.CommandList[i].Size + "," +
                                                                IsBuy + "," + this.CommandList[i].OpenTime + "," + this.CommandList[i].OpenPrice + "," + this.CommandList[i].StopLoss + "," +
                                                                this.CommandList[i].TakeProfit + "," + Command.ClosePrice + "," + Command.Commission + "," + Command.Swap + "," +
                                                                Command.Profit + "," + "Comment," + Command.ID + "," + "Open" + "," + 1 + "," + this.CommandList[i].ExpTime + "," +
                                                                this.CommandList[i].ClientCode + "," + this.CommandList[i].CommandCode + "," + this.CommandList[i].IsHedged + "," +
                                                                this.CommandList[i].Type.ID + "," + this.CommandList[i].Margin + ",UpdatePendingOrder";

                                                            //int countInvestor = this.CountInvestorOnline(this.InvestorID);
                                                            //if (countInvestor > 0)
                                                            this.ClientCommandQueue.Add(Message);

                                                            //SEND NOTIFY TO AGENT SERVER
                                                            Message += "," + this.CommandList[i].AgentRefConfig;
                                                            Business.AgentNotify newAgentNotify = new AgentNotify();
                                                            newAgentNotify.NotifyMessage = Message;
                                                            TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, this.CommandList[i].Investor.InvestorGroupInstance);
                                                            #endregion

                                                            #region CALCULATION TOTAL MARGIN
                                                            if (this.CommandList.Count > 0)
                                                            {
                                                                Business.Margin newMargin = new Margin();
                                                                newMargin = this.CommandList[0].Symbol.CalculationTotalMargin(this.CommandList);
                                                                this.Margin = newMargin.TotalMargin;
                                                                this.FreezeMargin = newMargin.TotalFreezeMargin;
                                                            }
                                                            else
                                                            {
                                                                this.Margin = 0;
                                                            }
                                                            #endregion

                                                            //SENT COMMAND REMOVE COMMAND TO MANAGER
                                                            TradingServer.Facade.FacadeSendNoticeManagerRequest(2, this.CommandList[i]);

                                                            //SENT NOTIFY ADD COMMAND TO MANAGER
                                                            TradingServer.Facade.FacadeSendNoticeManagerRequest(1, this.CommandList[i]);

                                                            //SEND NOTIFY TO MANAGE CHANGE ACCOUNT
                                                            TradingServer.Facade.FacadeSendNotifyManagerRequest(3, this);

                                                            //SEND COMMAND TO BROKER SERVER(CLOSE COMMAND)
                                                            //try
                                                            //{
                                                            //    string cmdBroker = Command.CommandCode + "¬" + Command.Size + "¬" + Command.Symbol.Name + "¬" +
                                                            //        Command.Investor.Code;

                                                            //    TradingServer.Business.Market.clientBroker.NotifyBroker(cmdBroker);
                                                            //}
                                                            //catch (Exception ex)
                                                            //{

                                                            //}

                                                            this.CommandList[i].IsProcess = false;

                                                            //UPDATE DATABASE
                                                            this.CommandList[i].UpdateIsActivePending(false, false, this.CommandList[i].ID, this.InvestorID);

                                                            #region LOG ACTIVATE PENDING ORDER
                                                            if (this.CommandList[i].Symbol != null)
                                                            {
                                                                string content = string.Empty;
                                                                string mode = string.Empty;
                                                                string size = string.Empty;
                                                                string openPrice = string.Empty;
                                                                string bid = string.Empty;
                                                                string ask = string.Empty;

                                                                bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Symbol.TickValue.Bid.ToString(), this.CommandList[i].Symbol.Digit);
                                                                ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Symbol.TickValue.Ask.ToString(), this.CommandList[i].Symbol.Digit);

                                                                TradingServer.Facade.FacadeConvertTypeIDToName(this.CommandList[i].Type.ID);
                                                                size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Size.ToString(), 2);
                                                                openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].OpenPrice.ToString(), this.CommandList[i].Symbol.Digit);
                                                                content = "order #" + this.CommandList[i].CommandCode + " " + mode + " " + size + " " + this.CommandList[i].Symbol.Name + " is opened at " +
                                                                    openPrice + " (" + bid + "/" + ask + ")";

                                                                TradingServer.Facade.FacadeAddNewSystemLog(5, content, "[pending order triggered]", "", this.Code);
                                                            }
                                                            else
                                                            {
                                                                TradingServer.Facade.FacadeAddNewSystemLog(5, "pending order triggerd [symbol empty]", "[pending order triggered]", "", this.Code);
                                                            }
                                                            #endregion
                                                        }
                                                        else
                                                        {
                                                            #region CLOSE PENDING ORDER IF CHECK ACCOUNT INVALID
                                                            //SET PROPERTY FOR CLOSE COMMAND
                                                            Command.CloseTime = DateTime.Now;
                                                            Command.Comment = "Cancel pending order #" + Command.CommandCode + " [not enough money]";
                                                            Command.Type = this.CommandList[i].Type;

                                                            //ADD PENDING ORDER TO DATABASE
                                                            TradingServer.Facade.FacadeAddNewCommandHistory(Command.Investor.InvestorID, Command.Type.ID, Command.CommandCode,
                                                                Command.OpenTime, Command.OpenPrice, Command.CloseTime, Command.ClosePrice, 0, 0, 0, Command.ExpTime, Command.Size, Command.StopLoss,
                                                                Command.TakeProfit, Command.ClientCode, Command.Symbol.SymbolID, Command.Taxes, Command.AgentCommission,
                                                                Command.Comment, "5", Command.TotalSwap,
                                                                Command.RefCommandID, Command.AgentRefConfig, Command.IsActivePending, Command.IsStopLossAndTakeProfit);

                                                            #region COMMENT CODE(REMOVE COMMAND IN COMMAND EXECUTOR AND SYMBOL LIST
                                                            ////Remove Command In Symbol List
                                                            //bool resultRemoveCommandSymbol = TradingServer.Facade.FacadeRemoveOpenTradeInCommandList(Command.ID);

                                                            ////Remove Command In Command Executor
                                                            //bool deleteCommandExe = TradingServer.Facade.FacadeRemoveOpenTradeInCommandExecutor(Command.ID);
                                                            #endregion

                                                            //NEW SOLUTION ADD COMMAND TO REMOVE LIST
                                                            //Business.OpenTrade newOpenTrade = this.CommandList[i];
                                                            Business.OpenRemove newOpenRemove = new OpenRemove();
                                                            newOpenRemove.InvestorID = this.InvestorID;
                                                            newOpenRemove.OpenTradeID = this.CommandList[i].ID;
                                                            newOpenRemove.SymbolName = this.CommandList[i].Symbol.Name;
                                                            newOpenRemove.IsExecutor = true;
                                                            newOpenRemove.IsSymbol = true;
                                                            newOpenRemove.IsInvestor = false;
                                                            Business.Market.AddCommandToRemoveList(newOpenRemove);

                                                            //Delete Command In Database
                                                            TradingServer.Facade.FacadeDeleteOpenTradeByID(Command.ID);

                                                            //Close Command Complete Add Message To Client
                                                            if (this.ClientCommandQueue == null)
                                                                this.ClientCommandQueue = new List<string>();

                                                            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," +
                                                                DateTime.Now;

                                                            this.ClientCommandQueue.Add(Message);
                                                            #endregion

                                                            #region LOG ACTIVATE PENDING ORDER
                                                            if (this.CommandList[i].Symbol != null)
                                                            {
                                                                string content = string.Empty;
                                                                string mode = string.Empty;
                                                                string size = string.Empty;
                                                                string openPrice = string.Empty;
                                                                string bid = string.Empty;
                                                                string ask = string.Empty;

                                                                bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Symbol.TickValue.Bid.ToString(), this.CommandList[i].Symbol.Digit);
                                                                ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Symbol.TickValue.Ask.ToString(), this.CommandList[i].Symbol.Digit);

                                                                TradingServer.Facade.FacadeConvertTypeIDToName(this.CommandList[i].Type.ID);
                                                                size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].Size.ToString(), 2);
                                                                openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(this.CommandList[i].OpenPrice.ToString(), this.CommandList[i].Symbol.Digit);
                                                                content = "order #" + this.CommandList[i].CommandCode + " " + mode + " " + size + " " + this.CommandList[i].Symbol.Name + " is opened at " +
                                                                    openPrice + " (" + bid + "/" + ask + ")" + " [unsuccessful - not enough money]";

                                                                TradingServer.Facade.FacadeAddNewSystemLog(5, content, "[unsuccessful - not enough money]", "", this.Code);
                                                            }
                                                            else
                                                            {
                                                                TradingServer.Facade.FacadeAddNewSystemLog(5, "pending order triggered [symbol empty]", "[unsuccessful - not enough money]", "", this.Code);
                                                            }
                                                            #endregion

                                                            //SENT NOTIFY TO MANAGER
                                                            TradingServer.Facade.FacadeSendNoticeManagerRequest(2, this.CommandList[i]);

                                                            lock (Business.Market.syncObject)
                                                            {
                                                                this.CommandList.Remove(this.CommandList[i]);
                                                            }
                                                        }
                                                    }
                                                }
                                                #endregion
                                            }

                                            #region UPDATE STOP LOSS AND TAKE PROFIT
                                            //Update Database If Command Is Update StopLoss Or Update Take Profit
                                            if (this.CommandList[i].StopLoss != Command.StopLoss ||
                                                this.CommandList[i].TakeProfit != Command.TakeProfit ||
                                                this.CommandList[i].OpenPrice != Command.OpenPrice)
                                            {
                                                //TradingServer.Facade.FacadeUpdateOnlineCommandWithTakeProfit(Command.TakeProfit, Command.StopLoss, Command.ID);

                                                this.CommandList[i].TakeProfit = Command.TakeProfit;
                                                this.CommandList[i].StopLoss = Command.StopLoss;

                                                bool checkIsPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(this.CommandList[i].Type.ID);
                                                //if (this.CommandList[i].Type.ID == 7 || this.CommandList[i].Type.ID == 8 ||
                                                //    this.CommandList[i].Type.ID == 9 || this.CommandList[i].Type.ID == 10)
                                                if(checkIsPending)
                                                {
                                                    if (this.CommandList[i].OpenPrice != Command.OpenPrice)
                                                    {
                                                        this.CommandList[i].OpenPrice = Command.OpenPrice;
                                                    }
                                                }

                                                //If Client Update Command Then Add Message To Client Message
                                                if (this.ClientCommandQueue == null)
                                                    this.ClientCommandQueue = new List<string>();

                                                //SEND NOTIFY TO MANAGER
                                                TradingServer.Facade.FacadeSendNoticeManagerRequest(1, this.CommandList[i]);
                                            }
                                            #endregion

                                            #endregion
                                        }

                                        FlagCommand = true;
                                        break;
                                    }
                                }
                                #endregion
                            }
                        }
                        else
                        {
                            #region Init Command List Of Investor
                            this.CommandList = new List<OpenTrade>();
                            this.CommandList.Add(Command);
                            #endregion
                        }
                        #endregion
                    }
                    #endregion

                    //Call Function ReCalculation Account Of Investor
                    this.ReCalculationAccount();

                    DateTime timeStop = DateTime.Now;
                    TimeSpan timeProcess = timeStop - timeStart;

                    if (this.IsMonitor)
                    {
                        StringBuilder monitor = new StringBuilder();
                        monitor.Append("Time Process " + timeProcess.TotalMilliseconds + " millisecond <=> Command Code: " + Command.CommandCode + "<=>");
                        monitor.Append("Balance: " + this.Balance + "<=> Margin Level: " + Math.Round(this.MarginLevel,2) + "<=> Margin: " + this.Margin);

                        if (this.ListMonitor == null)
                            this.ListMonitor = new List<string>();

                        this.ListMonitor.Insert(0, monitor.ToString());

                        if (this.ListMonitor.Count > 10)
                        {
                            this.ListMonitor.RemoveAt(10);
                        }
                    }

                    Command = null;
                }
                catch (Exception ex)
                {

                }
                #endregion
            }

            this.isInTask = false;
            Investor.IsInProcess = false;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="nlistCommand"></param>
        /// <returns></returns>
        internal Margin CalculationTotalMarginPending(List<Business.OpenTrade> nlistCommand, List<Business.OpenTrade> nlistSpotCommand)
        {
            Margin result = new Margin();
            result.TotalMargin = 0;
            result.TotalFreezeMargin = 0;
            if (nlistCommand.Count == 0 && nlistSpotCommand.Count == 0)
            {
                return result;
            }

            List<Business.OpenTrade> listCommand = new List<Business.OpenTrade>();

            #region for 1
            for (int i = 0; i < nlistCommand.Count; i++)
            {
                if (nlistCommand[i].Type.ID != 3 & nlistCommand[i].Type.ID != 4 && nlistCommand[i].Type.ID != 1 && nlistCommand[i].Type.ID != 2
                    && nlistCommand[i].Type.ID != 17 && nlistCommand[i].Type.ID != 18 &&
                    nlistCommand[i].Type.ID != 19 && nlistCommand[i].Type.ID != 20 && !nlistCommand[i].IsClose)
                {
                    Business.OpenTrade newOpenTrade = new Business.OpenTrade();
                    newOpenTrade.ClosePrice = nlistCommand[i].ClosePrice;
                    newOpenTrade.ID = nlistCommand[i].ID;
                    newOpenTrade.Investor = nlistCommand[i].Investor;
                    newOpenTrade.Size = nlistCommand[i].Size;
                    newOpenTrade.Symbol = new Symbol();
                    newOpenTrade.Symbol = nlistCommand[i].Symbol;
                    newOpenTrade.Type = new TradeType();
                    newOpenTrade.Type.ID = Business.Symbol.ConvertCommandIsBuySell(nlistCommand[i].Type.ID);
                    newOpenTrade.Margin = nlistCommand[i].Margin;
                    newOpenTrade.IsHedged = nlistCommand[i].Symbol.IsHedged;
                    listCommand.Add(newOpenTrade);
                }
            }
            for (int i = 0; i < nlistSpotCommand.Count; i++)
            {
                if (nlistSpotCommand[i].Type.ID != 3 & nlistSpotCommand[i].Type.ID != 4
                    && nlistSpotCommand[i].Type.ID != 17 && nlistSpotCommand[i].Type.ID != 18 &&
                    nlistSpotCommand[i].Type.ID != 19 && nlistSpotCommand[i].Type.ID != 20 && !nlistSpotCommand[i].IsClose)
                {
                    Business.OpenTrade newOpenTrade = new Business.OpenTrade();
                    newOpenTrade.ClosePrice = nlistSpotCommand[i].ClosePrice;
                    newOpenTrade.ID = nlistSpotCommand[i].ID;
                    newOpenTrade.Investor = nlistSpotCommand[i].Investor;
                    newOpenTrade.Size = nlistSpotCommand[i].Size;
                    newOpenTrade.Symbol = new Symbol();
                    newOpenTrade.Symbol = nlistSpotCommand[i].Symbol;
                    newOpenTrade.Type = new TradeType();
                    newOpenTrade.Type.ID = Business.Symbol.ConvertCommandIsBuySell(nlistSpotCommand[i].Type.ID);
                    newOpenTrade.Margin = nlistSpotCommand[i].Margin;
                    newOpenTrade.IsHedged = nlistSpotCommand[i].Symbol.IsHedged;
                    listCommand.Add(newOpenTrade);
                }
            }
            #endregion
            double margin, lots, change;
            if (listCommand.Count > 0)
            {
                double leverage = GetLeverageSymbol(listCommand[0]);
                if (leverage >= 0) leverage = listCommand[0].Investor.Leverage;

                for (int i = 0; i < listCommand.Count; i++)
                {
                    if ((listCommand[i].Type.ID % 2 != 0) && listCommand[i].Size != 0 && listCommand[i].IsHedged)
                    {
                        for (int f = 0; f < listCommand.Count; f++)
                        {
                            #region Non FreezeMargin
                            if ((listCommand[f].Symbol.Name == listCommand[i].Symbol.Name) &&
                                (listCommand[f].Type.ID == listCommand[i].Type.ID + 1) && (listCommand[f].Size != 0) && listCommand[i].IsHedged && !listCommand[i].Symbol.UseFreezeMargin)
                            {
                                change = Math.Abs(listCommand[i].Size - listCommand[f].Size);
                                if (change == 0)
                                {
                                    lots = listCommand[i].Size + listCommand[f].Size;
                                    result.TotalMargin += CalculationMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol);
                                    listCommand[f].Size = 0;
                                    listCommand[f].Margin = 0;
                                    listCommand[i].Size = 0;
                                    listCommand[i].Margin = 0;
                                    break;
                                }
                                else
                                {
                                    if (listCommand[i].Size > listCommand[f].Size)
                                    {
                                        margin = (listCommand[i].Margin / listCommand[i].Size) * change;
                                        listCommand[i].Margin = margin;
                                        listCommand[i].Size = change;
                                        lots = listCommand[f].Size * 2;
                                        result.TotalMargin += CalculationMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol);
                                        listCommand[f].Size = 0;
                                    }
                                    else
                                    {
                                        margin = (listCommand[f].Margin / listCommand[f].Size) * change;
                                        listCommand[f].Margin = margin;
                                        listCommand[f].Size = change;
                                        lots = listCommand[i].Size * 2;
                                        result.TotalMargin += CalculationMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol);
                                        listCommand[i].Size = 0;
                                        break;
                                    }
                                }
                            }
                            #endregion

                            #region FreezeMargin
                            if ((listCommand[f].Symbol.Name == listCommand[i].Symbol.Name) && (listCommand[f].Type.ID != 7) && (listCommand[f].Type.ID != 8) &&
                                 (listCommand[f].Type.ID != 9) && (listCommand[f].Type.ID != 10) && (listCommand[f].Type.ID == listCommand[i].Type.ID + 1) && (listCommand[f].Size != 0) &&
                                 listCommand[i].IsHedged && listCommand[i].Symbol.UseFreezeMargin)
                            {
                                //result += listCommand[i].Margin;
                                change = Math.Abs(listCommand[i].Size - listCommand[f].Size);
                                if (change == 0)
                                {
                                    lots = listCommand[i].Size + listCommand[f].Size;
                                    result.TotalFreezeMargin += this.CalculationFreezeMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol.FreezeMarginHedged, listCommand[i].Symbol);
                                    listCommand[f].Size = 0;
                                    listCommand[f].Margin = 0;
                                    listCommand[i].Size = 0;
                                    listCommand[i].Margin = 0;
                                    break;
                                }
                                else
                                {
                                    if (listCommand[i].Size > listCommand[f].Size)
                                    {
                                        margin = (listCommand[i].Margin / listCommand[i].Size) * change;
                                        listCommand[i].Margin = margin;
                                        listCommand[i].Size = change;
                                        lots = listCommand[f].Size * 2;
                                        result.TotalFreezeMargin += CalculationFreezeMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol.FreezeMarginHedged, listCommand[i].Symbol);
                                        listCommand[f].Size = 0;
                                    }
                                    else
                                    {
                                        margin = (listCommand[f].Margin / listCommand[f].Size) * change;
                                        listCommand[f].Margin = margin;
                                        listCommand[f].Size = change;
                                        lots = listCommand[i].Size * 2;
                                        result.TotalFreezeMargin += CalculationFreezeMarginHedged(leverage, listCommand[i].Symbol.MarginHedged, lots, listCommand[i].Symbol.FreezeMarginHedged, listCommand[i].Symbol);
                                        listCommand[i].Size = 0;
                                        break;
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                }

                for (int i = 0; i < listCommand.Count; i++)
                {
                    if (listCommand[i].Size != 0)
                    {
                        if (!listCommand[i].Symbol.UseFreezeMargin)
                        {
                            if (listCommand[i].Type.ID != 7 && listCommand[i].Type.ID != 8
                                && listCommand[i].Type.ID != 9 && listCommand[i].Type.ID != 10)
                            {
                                result.TotalMargin += listCommand[i].Margin;
                            }
                            if (listCommand[i].Type.ID == 7 || listCommand[i].Type.ID == 8 ||
                                listCommand[i].Type.ID == 9 || listCommand[i].Type.ID == 10)
                            {
                                result.TotalMargin += listCommand[i].Margin;
                            }
                        }
                        else
                        {
                            if ( listCommand[i].Type.ID != 7 && listCommand[i].Type.ID != 8
                                && listCommand[i].Type.ID != 9 && listCommand[i].Type.ID != 10)
                            {
                                result.TotalFreezeMargin += listCommand[i].Margin;
                            }
                        }
                    }
                }
            }
            return result;
        }
        /// <summary>
        /// EVENT WEEK CLOSE TRADE SYMBOL
        /// </summary>
        internal void CloseTradeSymbol(string TargetName, Business.TimeEvent timeEvent)
        {
            return;

            if (Business.Market.SymbolList != null)
            {
                int count = Business.Market.SymbolList.Count;
                for (int i = 0; i < count; i++)
                {
                    if (Business.Market.SymbolList[i].Name == TargetName)
                    {
                        //=============CLOSE TRADE SESSION=========================
                        if (Business.Market.SymbolList[i].IsTrade)
                        {
                            Business.Market.SymbolList[i].IsTrade = false;

                            //TradingServer.Facade.FacadeAddNewSystemLog(6, "Close Trade Symbol " + TargetName + " is: " +
                            //                                            Business.Market.SymbolList[i].IsTrade,
                            //                                            "[Check Event Close Trade]", "", "");

                            //SEND NOTIFY TO CLIENT
                            string content = "OTS53427640$" + TargetName + "{" + Business.Market.SymbolList[i].IsTrade;
                            TradingServer.Business.Market.SendNotifyToClient(content, 2, 0);
                        }

                        //==============FREEZE MARGIN============================
                        #region FIND SETTING ORDER OF SYMBOL
                        string MethodOrders = string.Empty;
                        if (Business.Market.SymbolList[i].ParameterItems != null)
                        {
                            int countParameter = Business.Market.SymbolList[i].ParameterItems.Count;
                            for (int n = 0; n < countParameter; n++)
                            {
                                if (Business.Market.SymbolList[i].ParameterItems[n].Code == "S012")
                                {
                                    MethodOrders = Business.Market.SymbolList[i].ParameterItems[n].StringValue;
                                    break;
                                }
                            }
                        }
                        #endregion

                        #region PROCESS GOOD TILL CANCEL
                        if (Business.Market.SymbolList[i].CommandList != null)
                        {
                            for (int j = 0; j < Business.Market.SymbolList[i].CommandList.Count; j++)
                            {
                                bool flagUpdateSLTP = false;
                                switch (MethodOrders)
                                {
                                    #region GOOD TILL TODAY INCLUDING SL/TP
                                    case "Good till today including SL/TP":
                                        {
                                            bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(Business.Market.SymbolList[i].CommandList[j].Type.ID);
                                            if (!isPending)
                                            {
                                                #region RESET STOP LOSS AND TAKE PROFIT OF ONLINE COMMAND
                                                if (Business.Market.SymbolList[i].CommandList[j].StopLoss > 0 ||
                                                  Business.Market.SymbolList[i].CommandList[j].TakeProfit > 0)
                                                {
                                                    Business.Market.SymbolList[i].CommandList[j].StopLoss = 0;
                                                    Business.Market.SymbolList[i].CommandList[j].TakeProfit = 0;
                                                    flagUpdateSLTP = true;
                                                }
                                                #endregion

                                                if (flagUpdateSLTP)
                                                {
                                                    #region UPDATE STOP LOST AND TAKE PROFIT OF COMMAND IN COMMAND EXECUTOR
                                                    //UPDATE STOP LOST AND TAKE PROFIT OF COMMAND IN COMMAND EXECUTOR
                                                    if (Business.Market.CommandExecutor != null && Business.Market.CommandExecutor.Count > 0)
                                                    {
                                                        for (int n = 0; n < Business.Market.CommandExecutor.Count; n++)
                                                        {
                                                            if (Business.Market.CommandExecutor[n].ID == Business.Market.SymbolList[i].CommandList[j].ID)
                                                            {
                                                                if (Business.Market.CommandExecutor[n].StopLoss > 0 || Business.Market.CommandExecutor[n].TakeProfit > 0)
                                                                {
                                                                    Business.Market.CommandExecutor[n].StopLoss = 0;
                                                                    Business.Market.CommandExecutor[n].TakeProfit = 0;
                                                                }
                                                                break;
                                                            }
                                                        }
                                                    }
                                                    #endregion

                                                    #region UPDATE STOP LOSS AND TAKE PROFIT OF COMMAND IN INVESTOR COMMAND
                                                    if (Business.Market.InvestorList != null)
                                                    {
                                                        for (int n = 0; n < Business.Market.InvestorList.Count; n++)
                                                        {
                                                            if (Business.Market.InvestorList[n].InvestorCommand == Business.Market.SymbolList[i].CommandList[j].Investor.InvestorCommand)
                                                            {
                                                                if (Business.Market.InvestorList[n].CommandList != null)
                                                                {
                                                                    for (int m = 0; m < Business.Market.InvestorList[n].CommandList.Count; m++)
                                                                    {
                                                                        if (Business.Market.InvestorList[n].CommandList[m].ID == Business.Market.SymbolList[i].CommandList[j].ID)
                                                                        {
                                                                            if (Business.Market.InvestorList[n].CommandList[m].StopLoss > 0 || Business.Market.InvestorList[n].CommandList[m].TakeProfit > 0)
                                                                            {
                                                                                Business.Market.InvestorList[n].CommandList[m].StopLoss = 0;
                                                                                Business.Market.InvestorList[n].CommandList[m].TakeProfit = 0;

                                                                                break;
                                                                            }
                                                                        }
                                                                    }
                                                                }

                                                                break;
                                                            }
                                                        }
                                                    }
                                                    #endregion

                                                    //SENT NOTIFY TO CLIENT
                                                    string message = "STO8546";
                                                    Business.Market.SymbolList[i].CommandList[j].Investor.ClientCommandQueue.Add(message);

                                                    //SEND NOTIFY TO CLIENT UPDATE STOP LOSS AND TAKE PROFIT
                                                    TradingServer.Facade.FacadeSendNoticeManagerRequest(1, Business.Market.SymbolList[i].CommandList[j]);

                                                    //UPDATE STOP LOST AND TAKE PROFIT OF COMMAND IN DATABASE
                                                    TradingServer.Facade.FacadeUpdateOnlineCommandWithTakeProfit(0, 0, Business.Market.SymbolList[i].CommandList[j].ID,
                                                        Business.Market.SymbolList[i].CommandList[j].Comment, Business.Market.SymbolList[i].CommandList[j].OpenPrice);
                                                }
                                            }
                                            else
                                            {
                                                #region REMOVE PENDING ORDER OF INVESTOR
                                                Business.OpenRemove newOpenRemove = new OpenRemove();
                                                newOpenRemove.InvestorID = Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID;
                                                newOpenRemove.IsExecutor = true;
                                                newOpenRemove.IsInvestor = true;
                                                newOpenRemove.IsSymbol = false;
                                                newOpenRemove.OpenTradeID = Business.Market.SymbolList[i].CommandList[j].ID;
                                                newOpenRemove.SymbolName = Business.Market.SymbolList[i].Name;
                                                Business.Market.AddCommandToRemoveList(newOpenRemove);

                                                //DELETE COMMAND IN DATABASE
                                                bool deleteCommand = TradingServer.Facade.FacadeDeleteOpenTradeByID(Business.Market.SymbolList[i].CommandList[j].ID);

                                                //INSERT DATABASE THEN CANCEL PENDING ORDER
                                                TradingServer.Facade.FacadeAddNewCommandHistory(Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID,
                                                    Business.Market.SymbolList[i].CommandList[j].Type.ID, Business.Market.SymbolList[i].CommandList[j].CommandCode,
                                                    Business.Market.SymbolList[i].CommandList[j].OpenTime, Business.Market.SymbolList[i].CommandList[j].OpenPrice,
                                                    DateTime.Now, 0, 0, 0, 0, Business.Market.SymbolList[i].CommandList[j].ExpTime, Business.Market.SymbolList[i].CommandList[j].Size,
                                                    Business.Market.SymbolList[i].CommandList[j].StopLoss, Business.Market.SymbolList[i].CommandList[j].TakeProfit,
                                                    Business.Market.SymbolList[i].CommandList[j].ClientCode, Business.Market.SymbolList[i].SymbolID,
                                                    Business.Market.SymbolList[i].CommandList[j].Taxes, 0, Business.Market.SymbolList[i].CommandList[j].Comment, "8",
                                                    Business.Market.SymbolList[i].CommandList[j].TotalSwap,
                                                    Business.Market.SymbolList[i].CommandList[j].RefCommandID,
                                                    Business.Market.SymbolList[i].CommandList[j].AgentRefConfig,
                                                    Business.Market.SymbolList[i].CommandList[j].IsActivePending,
                                                    Business.Market.SymbolList[i].CommandList[j].IsStopLossAndTakeProfit);

                                                //SENT NOTIFY TO CLIENT
                                                string message = "STO8546";
                                                if (Business.Market.SymbolList[i].CommandList[j].Investor.ClientCommandQueue == null)
                                                    Business.Market.SymbolList[i].CommandList[j].Investor.ClientCommandQueue = new List<string>();

                                                Business.Market.SymbolList[i].CommandList[j].Investor.ClientCommandQueue.Add(message);

                                                //NOTIFY TO MANAGER DELETE PENDING ORDER COMMAND
                                                TradingServer.Facade.FacadeSendNoticeManagerRequest(2, Business.Market.SymbolList[i].CommandList[j]);

                                                //'1205': close sell stop order #00275799 sell stop 0.10 XAUUSD at 1401.30 sl: 0.00 tp: 0.00 (1410.40/1410.90) exp 6/7/2013 10:48:46 AM
                                                //'1205': delete order #00275799 sell stop 0.10XAUUSD at 1401.30
                                                string strLog = "'System': close " +
                                                    Business.Market.SymbolList[i].CommandList[j].Type.Name + " order #" + Business.Market.SymbolList[i].CommandList[j].CommandCode +
                                                    " " + Business.Market.SymbolList[i].CommandList[j].Type.Name + " " +
                                                    Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].Size.ToString(), 2) + " " +
                                                    Business.Market.SymbolList[i].CommandList[j].Symbol.Name + " at " +
                                                    Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].OpenPrice.ToString(), Business.Market.SymbolList[i].CommandList[j].Symbol.Digit) +
                                                    " sl: " + Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].StopLoss.ToString(), 2) +
                                                    " tp: " + Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].TakeProfit.ToString(), 2) +
                                                    " (" + Business.Market.SymbolList[i].CommandList[j].Symbol.TickValue.Bid + "/" + Business.Market.SymbolList[i].CommandList[j].Symbol.TickValue.Ask + ")" +
                                                    " [Good till today including SL/TP]";

                                                TradingServer.Facade.FacadeAddNewSystemLog(3, strLog, "[Good till today including SL/TP]", "", "");

                                                string stContent = "'System': delete order #" + Business.Market.SymbolList[i].CommandList[j].CommandCode +
                                                    " " + Business.Market.SymbolList[i].CommandList[j].Type.Name + " " +
                                                    Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].Size.ToString(), 2) +
                                                    " " + Business.Market.SymbolList[i].CommandList[j].Symbol.Name + " at " +
                                                    Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].OpenPrice.ToString(), Business.Market.SymbolList[i].CommandList[j].Symbol.Digit) +
                                                    " [Good till today including SL/TP]";

                                                TradingServer.Facade.FacadeAddNewSystemLog(3, stContent, "[Good till today including SL/TP]", "", "");

                                                //REMOVE COMMAND IN SYMBOL LIST
                                                Business.Market.SymbolList[i].CommandList.RemoveAt(j);

                                                j--;
                                                #endregion
                                            }
                                        }
                                        break;
                                    #endregion

                                    #region GOOL TILL TODAY EXCLUDING SL/TP
                                    case "Good till today excluding SL/TP":
                                        {
                                            bool isPending = TradingServer.Model.TradingCalculate.Instance.CheckIsPendingPosition(Business.Market.SymbolList[i].CommandList[j].Type.ID);
                                            if (isPending)
                                            {
                                                #region REMOVE PENDING ORDER OF INVESTOR
                                                Business.OpenRemove newOpenRemove = new OpenRemove();
                                                newOpenRemove.InvestorID = Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID;
                                                newOpenRemove.IsExecutor = true;
                                                newOpenRemove.IsInvestor = true;
                                                newOpenRemove.IsSymbol = false;
                                                newOpenRemove.OpenTradeID = Business.Market.SymbolList[i].CommandList[j].ID;
                                                newOpenRemove.SymbolName = Business.Market.SymbolList[i].Name;
                                                Business.Market.AddCommandToRemoveList(newOpenRemove);

                                                //DELETE COMMAND IN DATABASE
                                                TradingServer.Facade.FacadeDeleteOpenTradeByID(Business.Market.SymbolList[i].CommandList[j].ID);

                                                //INSERT DATABASE THEN CANCEL PENDING ORDER
                                                TradingServer.Facade.FacadeAddNewCommandHistory(Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID,
                                                    Business.Market.SymbolList[i].CommandList[j].Type.ID, Business.Market.SymbolList[i].CommandList[j].CommandCode,
                                                    Business.Market.SymbolList[i].CommandList[j].OpenTime, Business.Market.SymbolList[i].CommandList[j].OpenPrice,
                                                    DateTime.Now, 0, 0, 0, 0, Business.Market.SymbolList[i].CommandList[j].ExpTime, Business.Market.SymbolList[i].CommandList[j].Size,
                                                    Business.Market.SymbolList[i].CommandList[j].StopLoss, Business.Market.SymbolList[i].CommandList[j].TakeProfit,
                                                    Business.Market.SymbolList[i].CommandList[j].ClientCode, Business.Market.SymbolList[i].SymbolID,
                                                    Business.Market.SymbolList[i].CommandList[j].Taxes, 0, Business.Market.SymbolList[i].CommandList[j].Comment, "11",
                                                    Business.Market.SymbolList[i].CommandList[j].TotalSwap,
                                                    Business.Market.SymbolList[i].CommandList[j].RefCommandID,
                                                    Business.Market.SymbolList[i].CommandList[j].AgentRefConfig,
                                                    Business.Market.SymbolList[i].CommandList[j].IsActivePending,
                                                    Business.Market.SymbolList[i].CommandList[j].IsStopLossAndTakeProfit);

                                                //SENT NOTIFY TO CLIENT
                                                string message = "STO8546";
                                                if (Business.Market.SymbolList[i].CommandList[j].Investor.ClientCommandQueue == null)
                                                    Business.Market.SymbolList[i].CommandList[j].Investor.ClientCommandQueue = new List<string>();

                                                Business.Market.SymbolList[i].CommandList[j].Investor.ClientCommandQueue.Add(message);

                                                //SEND NOTIFY DELETE PENDING ORDER TO MANAGER
                                                TradingServer.Facade.FacadeSendNoticeManagerRequest(2, Business.Market.SymbolList[i].CommandList[j]);

                                                //'1205': close sell stop order #00275799 sell stop 0.10 XAUUSD at 1401.30 sl: 0.00 tp: 0.00 (1410.40/1410.90) exp 6/7/2013 10:48:46 AM
                                                //'1205': delete order #00275799 sell stop 0.10XAUUSD at 1401.30
                                                string strLog = "'System': close " +
                                                    Business.Market.SymbolList[i].CommandList[j].Type.Name + " order #" + Business.Market.SymbolList[i].CommandList[j].CommandCode +
                                                    " " + Business.Market.SymbolList[i].CommandList[j].Type.Name + " " +
                                                    Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].Size.ToString(), 2) + " " +
                                                    Business.Market.SymbolList[i].CommandList[j].Symbol.Name + " at " +
                                                    Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].OpenPrice.ToString(), Business.Market.SymbolList[i].CommandList[j].Symbol.Digit) +
                                                    " sl: " + Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].StopLoss.ToString(), 2) +
                                                    " tp: " + Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].TakeProfit.ToString(), 2) +
                                                    " (" + Business.Market.SymbolList[i].CommandList[j].Symbol.TickValue.Bid + "/" + Business.Market.SymbolList[i].CommandList[j].Symbol.TickValue.Ask + ")" +
                                                    " [Good till today including SL/TP]";

                                                TradingServer.Facade.FacadeAddNewSystemLog(3, strLog, "[Good till today including SL/TP]", "", "");

                                                string stContent = "'System': delete order #" + Business.Market.SymbolList[i].CommandList[j].CommandCode +
                                                    " " + Business.Market.SymbolList[i].CommandList[j].Type.Name + " " +
                                                    Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].Size.ToString(), 2) +
                                                    " " + Business.Market.SymbolList[i].CommandList[j].Symbol.Name + " at " +
                                                    Model.TradingCalculate.Instance.BuildStringWithDigit(Business.Market.SymbolList[i].CommandList[j].OpenPrice.ToString(), Business.Market.SymbolList[i].CommandList[j].Symbol.Digit) +
                                                    " [Good till today including SL/TP]";

                                                TradingServer.Facade.FacadeAddNewSystemLog(3, stContent, "[Good till today including SL/TP]", "", "");

                                                //REMOVE COMMAND IN SYMBOL LIST
                                                Business.Market.SymbolList[i].CommandList.RemoveAt(j);

                                                j--;

                                                #endregion
                                            }
                                        }
                                        break;
                                    #endregion
                                }
                            }
                        }
                        #endregion                        

                        if (!Business.Market.SymbolList[i].IsEnableFreezeMargin)
                            return;

                        List<Business.Investor> listTempInvestor = new List<Investor>();

                        #region CHANGE VALUE MARGIN AND SET FREEZE MARGIN
                        if (Business.Market.SymbolList[i].CommandList != null)
                        {                            
                            int countCommand = Business.Market.SymbolList[i].CommandList.Count;
                            for (int j = 0; j < countCommand; j++)
                            {
                                bool flagInvestor = false;

                                Business.Market.SymbolList[i].CommandList[j].Symbol.UseFreezeMargin = true;
                                //Business.Market.SymbolList[i].CommandList[j].Margin = Business.Market.SymbolList[i].CommandList[j].CalculationFreezeMarginCommand(Business.Market.SymbolList[i].CommandList[j]);
                                Business.Market.SymbolList[i].CommandList[j].CalculatorMarginCommand(Business.Market.SymbolList[i].CommandList[j]);

                                if (listTempInvestor != null)
                                {
                                    int countInvestor = listTempInvestor.Count;
                                    for (int n = 0; n < countInvestor; n++)
                                    {
                                        if (listTempInvestor[n].Code == Business.Market.SymbolList[i].CommandList[j].Investor.Code)
                                        {
                                            flagInvestor = true;
                                            break;
                                        }
                                    }
                                }

                                if (!flagInvestor)
                                {
                                    listTempInvestor.Add(Business.Market.SymbolList[i].CommandList[j].Investor);
                                }
                            }
                        }
                        #endregion     

                        #region SEND COMMAND TO INVESTOR ONLINE
                        if (listTempInvestor != null)
                        {
                            int countInvestor = listTempInvestor.Count;
                            for (int j = 0; j < countInvestor; j++)
                            {
                                if (listTempInvestor[j].CommandList != null && listTempInvestor[j].CommandList.Count > 0)
                                {
                                    int countCommand = listTempInvestor[j].CommandList.Count;
                                    for (int n = 0; n < countCommand; n++)
                                    {
                                        if (listTempInvestor[j].CommandList[n].Symbol.Name.Trim().ToUpper() == TargetName.Trim().ToUpper())
                                        {
                                            listTempInvestor[j].CommandList[n].Symbol.UseFreezeMargin = true;
                                            //listTempInvestor[j].CommandList[n].Margin = listTempInvestor[j].CommandList[n].CalculationFreezeMarginCommand(listTempInvestor[j].CommandList[n]);
                                            listTempInvestor[j].CommandList[n].CalculatorMarginCommand(listTempInvestor[j].CommandList[n]);
                                        }
                                    }
                                }

                                #region RECALCULATION ACCOUNT OF INVESTOR
                                //Recalculation total margin of investor
                                if (listTempInvestor[j].CommandList.Count > 0)
                                {
                                    Business.Margin newMargin = new Margin();
                                    newMargin = listTempInvestor[j].CommandList[0].Symbol.CalculationTotalMargin(listTempInvestor[j].CommandList);
                                    listTempInvestor[j].Margin = newMargin.TotalMargin;
                                    listTempInvestor[j].FreezeMargin = newMargin.TotalFreezeMargin;
                                }
                                else
                                {
                                    listTempInvestor[j].Margin = 0;
                                    listTempInvestor[j].FreezeMargin = 0;
                                }
                                #endregion                                

                                //SEND COMMAND TO AGENT SERVER
                                Business.AgentNotify newAgentNotify = new AgentNotify();
                                newAgentNotify.NotifyMessage = "UpdateInvestorAccount$" + listTempInvestor[j].InvestorID;
                                TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, listTempInvestor[j].InvestorGroupInstance);

                                //SEND NOTIFY TO MANAGE RESET ACCOUNT
                                TradingServer.Facade.FacadeSendNotifyManagerRequest(3, listTempInvestor[j]);

                                #region SEND COMMAND TO INVESTOR IF INVESTOR ONLINE
                                if (listTempInvestor[j].IsOnline)
                                {
                                    string message = "FRZM14785213";
                                    if (listTempInvestor[j].ClientCommandQueue == null)
                                        listTempInvestor[j].ClientCommandQueue = new List<string>();

                                        listTempInvestor[j].ClientCommandQueue.Add(message);
                                }
                                #endregion                                
                            }
                        }
                        #endregion                        

                        break;
                    }
                }
            }
        }
        /// <summary>
        /// EVENT WEEK OPEN TRADE SYMBOL
        /// </summary>
        internal void OpenTradeSymbol(string TargetName, Business.TimeEvent timeEvent)
        {
            return;

            if (Business.Market.SymbolList != null)
            {
                int count = Business.Market.SymbolList.Count;
                for (int i = 0; i < count; i++)
                {
                    if (Business.Market.SymbolList[i].Name == TargetName)
                    {
                        if (!Business.Market.SymbolList[i].IsTrade)
                        {
                            Business.Market.SymbolList[i].IsTrade = true;

                            //SEND NOTIFY TO CLIENT
                            string content = "OTS53427640$" + TargetName + "{" + Business.Market.SymbolList[i].IsTrade;
                            TradingServer.Business.Market.SendNotifyToClient(content, 2, 0);
                        }

                        if (Business.Market.SymbolList[i].IsEnableFreezeMargin)
                        {
                            Business.Market.SymbolList[i].UseFreezeMargin = false;
                            List<Business.Investor> listInvestor = new List<Investor>();

                            #region RESET FREEZE MARGIN AND CALCULATION MARGION OF COMMAND
                            if (Business.Market.SymbolList[i].CommandList != null)
                            {                                
                                int countCommand = Business.Market.SymbolList[i].CommandList.Count;
                                for (int j = 0; j < countCommand; j++)
                                {
                                    bool flagInvestor = false;
                                    Business.Market.SymbolList[i].CommandList[j].CalculatorMarginCommand(Business.Market.SymbolList[i].CommandList[j]);
                                    Business.Market.SymbolList[i].CommandList[j].FreezeMargin = 0;

                                    if (listInvestor != null)
                                    {
                                        int countInvestor = listInvestor.Count;
                                        for (int n = 0; n < countInvestor; n++)
                                        {
                                            if (listInvestor[n].InvestorID == Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID)
                                            {
                                                flagInvestor = true;
                                                break;
                                            }
                                        }
                                    }

                                    if (!flagInvestor)
                                    {
                                        listInvestor.Add(Business.Market.SymbolList[i].CommandList[j].Investor);
                                    }
                                }
                            }
                            #endregion

                            #region COMMENT CODE(06/07/2011)
                            //if (timeEvent.NumSession == 0)    //First session
                            //{
                            //    #region RESET FREEZE MARGIN AND CALCULATION MARGION OF COMMAND
                            //    if (Business.Market.SymbolList[i].CommandList != null)
                            //    {
                            //        bool flagInvestor = false;
                            //        int countCommand = Business.Market.SymbolList[i].CommandList.Count;
                            //        for (int j = 0; j < countCommand; j++)
                            //        {
                            //            Business.Market.SymbolList[i].CommandList[j].CalculatorMarginCommand(Business.Market.SymbolList[i].CommandList[j]);
                            //            Business.Market.SymbolList[i].CommandList[j].FreezeMargin = 0;

                            //            if (listInvestor != null)
                            //            {
                            //                int countInvestor = listInvestor.Count;
                            //                for (int n = 0; n < countInvestor; n++)
                            //                {
                            //                    if (listInvestor[n].InvestorID == Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID)
                            //                    {
                            //                        flagInvestor = true;
                            //                        break;
                            //                    }
                            //                }
                            //            }

                            //            if (!flagInvestor)
                            //            {
                            //                listInvestor.Add(Business.Market.SymbolList[i].CommandList[j].Investor);
                            //            }
                            //        }
                            //    }
                            //    #endregion
                            //}
                            //else    //Second Session
                            //{
                            //    #region RESET FREEZE MARGIN AND CALCULATION MARGION OF COMMAND
                            //    if (Business.Market.SymbolList[i].CommandList != null)
                            //    {
                            //        int countCommand = Business.Market.SymbolList[i].CommandList.Count;
                            //        for (int j = 0; j < countCommand; j++)
                            //        {
                            //            bool flagInvestor = false;

                            //            DateTime timeSession = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, timeEvent.Time.Hour, timeEvent.Time.Minute, 00);
                            //            TimeSpan checkSessionOpen = Business.Market.SymbolList[i].CommandList[j].OpenTime - timeSession;
                            //            if (checkSessionOpen.TotalSeconds > 0)  //command open in session
                            //            {
                            //                Business.Market.SymbolList[i].CommandList[j].FreezeMargin = 0;
                            //                Business.Market.SymbolList[i].CommandList[j].CalculatorMarginCommand(Business.Market.SymbolList[i].CommandList[j]);
                            //            }
                            //            else    //command open before session
                            //            {
                            //                Business.Market.SymbolList[i].CommandList[j].FreezeMargin = 0;
                            //                Business.Market.SymbolList[i].CommandList[j].Margin = Business.Market.SymbolList[i].CommandList[j].CalculationFreezeMarginCommand(Business.Market.SymbolList[i].CommandList[j]);
                            //            }

                            //            if (listInvestor != null)
                            //            {
                            //                int countInvestor = listInvestor.Count;
                            //                for (int n = 0; n < countInvestor; n++)
                            //                {
                            //                    if (listInvestor[n].InvestorID == Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID)
                            //                    {
                            //                        flagInvestor = true;
                            //                        break;
                            //                    }
                            //                }
                            //            }

                            //            if (!flagInvestor)
                            //            {
                            //                listInvestor.Add(Business.Market.SymbolList[i].CommandList[j].Investor);
                            //            }
                            //        }
                            //    }
                            //    #endregion
                            //}
                            #endregion                            

                            #region SEND COMMAND TO INVESTOR ONLINE
                            if (listInvestor != null)
                            {
                                int countInvestor = listInvestor.Count;
                                for (int j = 0; j < countInvestor; j++)
                                {
                                    if (listInvestor[j].CommandList != null && listInvestor[j].CommandList.Count > 0)
                                    {
                                        int countCommand = listInvestor[j].CommandList.Count;
                                        for (int n = 0; n < countCommand; n++)
                                        {
                                            if (listInvestor[j].CommandList[n].Symbol.Name.Trim().ToUpper() == TargetName.Trim().ToUpper())
                                            {
                                                listInvestor[j].CommandList[n].Symbol.UseFreezeMargin = false;
                                                listInvestor[j].CommandList[n].CalculatorMarginCommand(listInvestor[j].CommandList[n]);
                                            }
                                        }
                                    }

                                    if (listInvestor[j].CommandList != null && listInvestor[j].CommandList.Count > 0)
                                    {
                                        Business.Margin newMargin = new Margin();
                                        newMargin = listInvestor[j].CommandList[0].Symbol.CalculationTotalMargin(listInvestor[j].CommandList);
                                        listInvestor[j].Margin = newMargin.TotalMargin;
                                        listInvestor[j].FreezeMargin = newMargin.TotalFreezeMargin;
                                    }
                                    else
                                    {
                                        listInvestor[j].Margin = 0;
                                        listInvestor[j].FreezeMargin = 0;
                                    }

                                    //SEND COMMAND TO AGENT SERVER
                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                    newAgentNotify.NotifyMessage = "UpdateInvestorAccount$" + listInvestor[j].InvestorID;
                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, listInvestor[j].InvestorGroupInstance);

                                    //SEND NOTIFY TO MANAGER THEN CLOSE COMMAND
                                    TradingServer.Facade.FacadeSendNotifyManagerRequest(3, listInvestor[j]);

                                    if (listInvestor[j].IsOnline)
                                    {
                                        string message = "FRZM14785213";

                                        if (listInvestor[j].ClientCommandQueue == null)
                                            listInvestor[j].ClientCommandQueue = new List<string>();

                                        listInvestor[j].ClientCommandQueue.Add(message);
                                    }
                                }
                            }
                            #endregion
                        }

                        break;
                    }
                }
            }         
        }
        /// <summary>
        /// UPDATE TRADING CONFIG, SETTING PARAMETER DEFAULT
        /// </summary>
        /// <param name="objSymbolConfig"></param>
        internal bool UpdateTradingConfig(Business.ParameterItem objSymbolConfig)
        {
            bool Result = false;
            StringBuilder content = new StringBuilder();

            if (Market.SymbolList != null)
            {
                int count = Market.SymbolList.Count;
                for (int i = 0; i < count; i++)
                {
                    if (Market.SymbolList[i].SymbolID == objSymbolConfig.SecondParameterID)
                    {
                        if (Market.SymbolList[i].ParameterItems != null)
                        {
                            int countConfig = Market.SymbolList[i].ParameterItems.Count;
                            for (int j = 0; j < countConfig; j++)
                            {
                                if (Market.SymbolList[i].ParameterItems[j].Code == objSymbolConfig.Code)
                                {
                                    #region CHANGE CONFIG SYMBOL AND UPDATE CONFIG DEAFULT
                                    //Set ParameterID For Config
                                    objSymbolConfig.ParameterItemID = Market.SymbolList[i].ParameterItems[j].ParameterItemID;

                                    //Update Value Default Of Symbol
                                    #region Update Property Contract Size Of Symbol
                                    if (objSymbolConfig.Code == "S025")
                                    {
                                        double ContractSize = 0;
                                        double.TryParse(objSymbolConfig.NumValue, out ContractSize);
                                        Market.SymbolList[i].ContractSize = ContractSize;
                                    }
                                    #endregion

                                    #region Update Property Tick Price Of Symbol
                                    if (objSymbolConfig.Code == "S030")
                                    {
                                        double TickPrice = 0;
                                        double.TryParse(objSymbolConfig.NumValue, out TickPrice);
                                        Market.SymbolList[i].TickPrice = TickPrice;
                                    }
                                    #endregion

                                    #region Update Property Tick Size Of Symbol
                                    if (objSymbolConfig.Code == "S029")
                                    {
                                        double TickSize = 0;
                                        double.TryParse(objSymbolConfig.NumValue, out TickSize);
                                        Market.SymbolList[i].TickSize = TickSize;
                                    }
                                    #endregion

                                    #region Update Property Profit Calculation Of Symbol
                                    if (objSymbolConfig.Code == "S033")
                                    {
                                        Market.SymbolList[i].ProfitCalculation = objSymbolConfig.StringValue;
                                    }
                                    #endregion

                                    #region Update Property Digit Of Symbol
                                    if (objSymbolConfig.Code == "S003")
                                    {
                                        int Digit = 0;
                                        int.TryParse(objSymbolConfig.NumValue, out Digit);
                                        Market.SymbolList[i].Digit = Digit;
                                    }
                                    #endregion

                                    #region Update Property Currency
                                    if (objSymbolConfig.Code == "S007")
                                    {
                                        Market.SymbolList[i].Currency = objSymbolConfig.StringValue.Trim();
                                    }
                                    #endregion

                                    #region Update Property Initital Margin
                                    if (objSymbolConfig.Code == "S026")
                                    {
                                        double InitialMargin = -1;
                                        double.TryParse(objSymbolConfig.NumValue, out InitialMargin);
                                        Market.SymbolList[i].InitialMargin = InitialMargin;
                                    }
                                    #endregion

                                    #region Update Property Spread By Default Of Symbol
                                    if (objSymbolConfig.Code == "S013")
                                    {
                                        double SpreadByDefault = 0;
                                        double.TryParse(objSymbolConfig.NumValue, out SpreadByDefault);
                                        Market.SymbolList[i].SpreadByDefault = SpreadByDefault;
                                    }
                                    #endregion

                                    #region Update Property Sread Balance Of Symbol
                                    if (objSymbolConfig.Code == "S016")
                                    {
                                        double SpreadBalance = 0;
                                        double.TryParse(objSymbolConfig.NumValue, out SpreadBalance);
                                        Market.SymbolList[i].SpreadBalace = SpreadBalance;
                                    }
                                    #endregion

                                    #region Update Property Long Only Of Symbol
                                    if (objSymbolConfig.Code == "S014")
                                    {
                                        bool LongOnly = false;
                                        if (objSymbolConfig.BoolValue == 1)
                                        {
                                            LongOnly = true;
                                        }
                                        Market.SymbolList[i].LongOnly = LongOnly;
                                    }
                                    #endregion

                                    #region Update Property Limit Stop Level Of Symbol
                                    if (objSymbolConfig.Code == "S015")
                                    {
                                        int LimitLevel = 0;
                                        int.TryParse(objSymbolConfig.NumValue, out LimitLevel);
                                        Market.SymbolList[i].LimitLevel = LimitLevel;
                                    }

                                    if (objSymbolConfig.Code == "S046")
                                    {
                                        int StopLevel = 0;
                                        int.TryParse(objSymbolConfig.NumValue, out StopLevel);
                                        Market.SymbolList[i].StopLevel = StopLevel;
                                    }

                                    if (objSymbolConfig.Code == "S047")
                                    {
                                        int SLTP = 0;
                                        int.TryParse(objSymbolConfig.NumValue, out SLTP);
                                        Market.SymbolList[i].StopLossTakeProfitLevel = SLTP;
                                    }
                                    #endregion

                                    #region Update Property Freeze Level Of Symbol
                                    if (objSymbolConfig.Code == "S017")
                                    {
                                        int FreezeLevel = 0;
                                        int.TryParse(objSymbolConfig.NumValue, out FreezeLevel);
                                        Market.SymbolList[i].FreezeLevel = FreezeLevel;
                                    }
                                    #endregion

                                    #region Update Property Allow Read Time In Symbol
                                    if (objSymbolConfig.Code == "S018")
                                    {
                                        bool AllowReadTime = false;
                                        if (objSymbolConfig.BoolValue == 1)
                                        {
                                            AllowReadTime = true;
                                        }

                                        Market.SymbolList[i].AllowReadTime = AllowReadTime;
                                    }
                                    #endregion

                                    #region Update Property Filter Of Symbol
                                    if (objSymbolConfig.Code == "S022")
                                    {
                                        int Filter = 0;
                                        int.TryParse(objSymbolConfig.NumValue, out Filter);
                                        Market.SymbolList[i].Filter = Filter;
                                    }
                                    #endregion

                                    #region Update Property Filtration Level Of Symbol
                                    if (objSymbolConfig.Code == "S020")
                                    {
                                        int FiltrationsLevel = 0;
                                        int.TryParse(objSymbolConfig.NumValue, out FiltrationsLevel);
                                        Market.SymbolList[i].FiltrationsLevel = FiltrationsLevel;
                                    }
                                    #endregion

                                    #region Update Property Auto Limit Of Symbol
                                    if (objSymbolConfig.Code == "S021")
                                    {
                                        Market.SymbolList[i].AutoLimit = objSymbolConfig.StringValue;
                                    }
                                    #endregion

                                    #region Update Property IsHedged Of Symbol
                                    if (objSymbolConfig.Code == "S034")
                                    {
                                        bool IsHedged = false;
                                        if (objSymbolConfig.BoolValue == 1)
                                            IsHedged = true;
                                        Market.SymbolList[i].IsHedged = IsHedged;

                                        //RECALCULATION ALL INVESTOR
                                        Business.Investor.investorInstance.ReCalculationTotalMargin();
                                    }
                                    #endregion

                                    #region Update Property Trade Of Symbol
                                    if (objSymbolConfig.Code == "S008")
                                    {
                                        Market.SymbolList[i].Trade = objSymbolConfig.StringValue;
                                    }
                                    #endregion

                                    #region Update Event Symbol
                                    //if (objSymbolConfig.Code == "S042")
                                    //{
                                    //    TradingServer.Facade.FacadeUpdateSymbolEvent(objSymbolConfig.StringValue, Business.Market.SymbolList[i].Name,
                                    //        objSymbolConfig.Code, Business.Market.SymbolList[i].ParameterItems[j].ParameterItemID);
                                    //}

                                    //if (objSymbolConfig.Code == "S043")
                                    //{
                                    //    TradingServer.Facade.FacadeUpdateSymbolEvent(objSymbolConfig.StringValue, Business.Market.SymbolList[i].Name,
                                    //        objSymbolConfig.Code, Business.Market.SymbolList[i].ParameterItems[j].ParameterItemID);
                                    //}
                                    #endregion

                                    #region UPDATE PROPERTY APPLY SPREAD
                                    if (objSymbolConfig.Code == "S050")
                                    {
                                        bool applySpread = false;
                                        if (objSymbolConfig.BoolValue == 1)
                                        {
                                            applySpread = true;
                                        }

                                        Business.Market.SymbolList[i].ApplySpread = applySpread;
                                    }
                                    #endregion

                                    #region UPDATE PROPERTY USE FREEZE MARGIN
                                    if (objSymbolConfig.Code == "S051")
                                    {
                                        bool useFreezeMargin = false;
                                        if (objSymbolConfig.BoolValue == 1)
                                            useFreezeMargin = true;

                                        Business.Market.SymbolList[i].IsEnableFreezeMargin = useFreezeMargin;
                                    }
                                    #endregion

                                    #region UPDATE PROPERTY FREEZE MARGIN
                                    if (objSymbolConfig.Code == "S052")
                                    {
                                        double freezeMargin = 0;
                                        double.TryParse(objSymbolConfig.NumValue.ToString(), out freezeMargin);
                                        Business.Market.SymbolList[i].FreezeMargin = freezeMargin;
                                    }
                                    #endregion

                                    #region UPDATE PROPERTY FREEZE MARGIN HEDGED
                                    if (objSymbolConfig.Code == "S053")
                                    {
                                        double freezeMarginH = 0;
                                        double.TryParse(objSymbolConfig.NumValue, out freezeMarginH);
                                        Business.Market.SymbolList[i].FreezeMarginHedged = freezeMarginH;
                                    }
                                    #endregion

                                    #region UPDATE PROPERTY MARGIN HEDGED
                                    if (objSymbolConfig.Code == "S028")
                                    {
                                        double marginH = 0;
                                        double.TryParse(objSymbolConfig.NumValue, out marginH);
                                        Business.Market.SymbolList[i].MarginHedged = marginH;
                                    }
                                    #endregion

                                    //Update Value Parameter Item
                                    Market.SymbolList[i].ParameterItems[j].Name = objSymbolConfig.Name;
                                    Market.SymbolList[i].ParameterItems[j].Code = objSymbolConfig.Code;
                                    Market.SymbolList[i].ParameterItems[j].BoolValue = objSymbolConfig.BoolValue;
                                    Market.SymbolList[i].ParameterItems[j].StringValue = objSymbolConfig.StringValue;
                                    Market.SymbolList[i].ParameterItems[j].NumValue = objSymbolConfig.NumValue;
                                    Market.SymbolList[i].ParameterItems[j].DateValue = objSymbolConfig.DateValue;

                                    //Set ParameterID Again
                                    objSymbolConfig.ParameterItemID = Market.SymbolList[i].ParameterItems[j].ParameterItemID;
                                    #endregion

                                    break;
                                }
                            }
                        }

                        #region UPDATE CALCULATION SYMBOL
                        if (objSymbolConfig.Code == "S025" || objSymbolConfig.Code == "S026" ||
                            objSymbolConfig.Code == "S027" || objSymbolConfig.Code == "S028" ||
                            objSymbolConfig.Code == "S029" || objSymbolConfig.Code == "S030" ||
                            objSymbolConfig.Code == "S031" || objSymbolConfig.Code == "S032" ||
                            objSymbolConfig.Code == "S034")
                        {
                            List<Business.Investor> listInvestor = new List<Investor>();
                            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++)
                                {
                                    bool flagInvestor = false;
                                    Business.Market.SymbolList[i].CommandList[j].CalculatorMarginCommand(Business.Market.SymbolList[i].CommandList[j]);

                                    if (listInvestor != null)
                                    {
                                        int countInvestor = listInvestor.Count;
                                        for (int n = 0; n < countInvestor; n++)
                                        {
                                            if (Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID == listInvestor[n].InvestorID)
                                            {
                                                flagInvestor = true;
                                                break;
                                            }
                                        }
                                    }

                                    if (!flagInvestor)
                                    {
                                        listInvestor.Add(Business.Market.SymbolList[i].CommandList[j].Investor);
                                    }
                                }
                            }

                            if (listInvestor != null && listInvestor.Count > 0)
                            {
                                int countInvestor = listInvestor.Count;
                                for (int j = 0; j < countInvestor; j++)
                                {
                                    if (listInvestor[j].CommandList != null && listInvestor[j].CommandList.Count > 0)
                                    {
                                        int countCommand = listInvestor[j].CommandList.Count;
                                        for (int n = 0; n < countCommand; n++)
                                        {
                                            if (listInvestor[j].CommandList[n].Symbol.Name == Market.SymbolList[i].Name)
                                            {
                                                listInvestor[j].CommandList[n].CalculatorMarginCommand(listInvestor[j].CommandList[n]);
                                            }
                                        }
                                    }

                                    if (listInvestor[j].CommandList.Count > 0)
                                    {
                                        Business.Margin newMargin = new Margin();
                                        newMargin = listInvestor[j].CommandList[0].Symbol.CalculationTotalMargin(listInvestor[j].CommandList);
                                        listInvestor[j].Margin = newMargin.TotalMargin;
                                        listInvestor[j].FreezeMargin = newMargin.TotalFreezeMargin;
                                    }
                                    else
                                    {
                                        listInvestor[j].Margin = 0;
                                        listInvestor[j].FreezeMargin = 0;
                                    }

                                    //SEND NOTIFY TO MANAGER
                                    TradingServer.Facade.FacadeSendNotifyManagerRequest(3, listInvestor[j]);

                                    //SEND NOTIFY TO CLIENT
                                    TradingServer.Business.Market.SendNotifyToClient("IAC04332451", 3, listInvestor[j].InvestorID);
                                }
                            }
                        }
                        #endregion
                    }
                    else
                    {
                        //Find In Reference Symbol
                        this.UpdateTradingConfigReference(objSymbolConfig, Market.SymbolList[i].RefSymbol);
                    }
                }
            }

            Result = ParameterItem.DBWTradingConfigInstance.UpdateTradingConfig(objSymbolConfig.ParameterItemID, objSymbolConfig.SecondParameterID, -1,
                objSymbolConfig.Name, objSymbolConfig.Code, objSymbolConfig.BoolValue, objSymbolConfig.StringValue, objSymbolConfig.NumValue, objSymbolConfig.DateValue);

            #region SEARCH IN INVESTOR ONLINE AND SENT COMMAND UPDATE CONFIG SYMBOL
            //SEARCH IN INVESTOR ONLINE AND SENT COMMAND UPDATE CONFIG SYMBOL
            //if (Business.Market.InvestorList != null && Business.Market.InvestorList.Count > 0)
            //{
            //    int count = Business.Market.InvestorList.Count;
            //    for (int i = 0; i < count; i++)
            //    {
            //        if (Business.Market.InvestorList[i].IsOnline)
            //        {
            //            if (Business.Market.InvestorList[i].ClientCommandQueue == null)
            //                Business.Market.InvestorList[i].ClientCommandQueue = new List<string>();

            //            Business.Market.InvestorList[i].ClientCommandQueue.Add("RSC1235789$" + objSymbolConfig.ParameterItemID + "," + objSymbolConfig.SecondParameterID + ",-1" +
            //                objSymbolConfig.Name + "," + objSymbolConfig.Code + "," + objSymbolConfig.BoolValue + "," + objSymbolConfig.StringValue + "," + objSymbolConfig.NumValue +
            //                objSymbolConfig.DateValue);
            //        }
            //    }
            //}
            #endregion

            if (objSymbolConfig.Code == "S042" || objSymbolConfig.Code == "S043")
            {
                //Call Function Init Time Event Symbol
                Business.Market.marketInstance.InitTimeEventInSymbol();

                //CALL FUNCTION INIT TIME MARKET
                Business.Market.marketInstance.InitTimeEventServer();
            }

            if (objSymbolConfig.Code == "S044" || objSymbolConfig.Code == "S045")
            {
                Business.Market.marketInstance.InitSymbolFuture();
            }

            return Result;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="listTradingConfig"></param>
        /// <returns></returns>
        internal bool UpdateTradingConfig(List<Business.ParameterItem> listTradingConfig, string code,string ipAddress)
        {
            bool Result = false;
            bool isExits = false;
            StringBuilder content = new StringBuilder();
            StringBuilder beforeContent = new StringBuilder();
            StringBuilder afterContent = new StringBuilder();

            content.Append("'" + code + "': update config symbol ");

            if (listTradingConfig != null)
            {
                int countTradingConfig = listTradingConfig.Count;
                for (int a = 0; a < countTradingConfig; a++)
                {
                    if (Market.SymbolList != null)
                    {
                        int count = Market.SymbolList.Count;
                        for (int i = 0; i < count; i++)
                        {
                            if (Market.SymbolList[i].SymbolID == listTradingConfig[a].SecondParameterID)
                            {
                                #region CHECK FIRST RUN
                                if (!isExits)
                                {
                                    content.Append("'" + Business.Market.SymbolList[i].Name + "': ");
                                    isExits = true;
                                }
                                #endregion

                                #region UPDATE PARAMETER ON TRADING CONFIG
                                if (Market.SymbolList[i].ParameterItems != null)
                                {
                                    int countConfig = Market.SymbolList[i].ParameterItems.Count;
                                    for (int j = 0; j < countConfig; j++)
                                    {
                                        if (Market.SymbolList[i].ParameterItems[j].Code == listTradingConfig[a].Code)
                                        {
                                            #region FILTER CODE GET NAME UPDATE BEFORE
                                            switch (Market.SymbolList[i].ParameterItems[j].Code)
                                            {
                                                case "S001":    //SYMBOL NAME
                                                    beforeContent.Append("symbol name: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S002":    //SOURCE
                                                    break;
                                                case "S003":    //DIGIT
                                                    beforeContent.Append("digit: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S004":    //DESCRIPTION
                                                    beforeContent.Append("description: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S005":    //TYPE
                                                    beforeContent.Append("type: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S006":    //EXECUTION
                                                    beforeContent.Append("execution: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S007":    //CURRENCY
                                                    beforeContent.Append("currency: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S008":    //TRADE
                                                    beforeContent.Append("trade: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S009":    //BACKGROUND
                                                    break;
                                                case "S010": //MARGIN CURRENCY
                                                    beforeContent.Append("margin currency: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S011":    //MAXIMUM LOTS FOR IE
                                                    beforeContent.Append("maximum lots for IE: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S012":    //ORDERS
                                                    beforeContent.Append("orders: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S013":    //SPREAD BY DEFAULT
                                                    beforeContent.Append("spread by default: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S014":    //LONG ONLY
                                                    if (Market.SymbolList[i].ParameterItems[j].BoolValue == 1)
                                                        beforeContent.Append("long only: enable - ");
                                                    else
                                                        beforeContent.Append("long only: disable - ");
                                                    break;
                                                case "S015":
                                                    beforeContent.Append("limit level: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S016":
                                                    beforeContent.Append("spread balance: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S017":
                                                    beforeContent.Append("freeze level: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S018":
                                                    if (Business.Market.SymbolList[i].ParameterItems[j].BoolValue == 1)
                                                        beforeContent.Append("use datafeed time stamp: on - ");
                                                    else
                                                        beforeContent.Append("use datafeed time stamp: off - ");
                                                    break;
                                                case "S019":
                                                    break;
                                                case "S020":
                                                    beforeContent.Append("filtration level: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S021":
                                                    beforeContent.Append("auto limit: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S022":
                                                    beforeContent.Append("filter: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S023":
                                                    break;
                                                case "S024":
                                                    break;
                                                case "S025":
                                                    beforeContent.Append("contract size: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S026":
                                                    beforeContent.Append("initial margin: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S027":
                                                    break;
                                                case "S028":
                                                    beforeContent.Append("hedge: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S029":
                                                    beforeContent.Append("tick size: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S030":
                                                    beforeContent.Append("tick price: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S031":
                                                    beforeContent.Append("percentage: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S032":
                                                    beforeContent.Append("margin calculation: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S033":
                                                    beforeContent.Append("profit calculation: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S034":
                                                    if (Market.SymbolList[i].ParameterItems[j].BoolValue == 1)
                                                        beforeContent.Append("strong hedged margin mode: enable - ");
                                                    else
                                                        beforeContent.Append("string hedged margin mode: disable - ");
                                                    break;
                                                case "S035":
                                                    if (Business.Market.SymbolList[i].ParameterItems[j].BoolValue == 1)
                                                        beforeContent.Append("enable swap: on - ");
                                                    else
                                                        beforeContent.Append("enable swap: off - ");
                                                    break;
                                                case "S036":
                                                    beforeContent.Append("swap calculation: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S037":
                                                    beforeContent.Append("long position: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S038":
                                                    beforeContent.Append("short position: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S039":
                                                    beforeContent.Append("3-day swaps: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S040":
                                                    break;
                                                case "S041":
                                                    break;
                                                case "S042":
                                                    beforeContent.Append("trade session: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S043":
                                                    beforeContent.Append("quote session: " + Market.SymbolList[i].ParameterItems[j].StringValue + " - ");
                                                    break;
                                                case "S044":
                                                    beforeContent.Append("close only: " + Market.SymbolList[i].ParameterItems[j].DateValue + " - ");
                                                    break;
                                                case "S045":
                                                    beforeContent.Append("time expired: " + Market.SymbolList[i].ParameterItems[j].DateValue + " - ");
                                                    break;
                                                case "S046":
                                                    beforeContent.Append("stop level: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S047":
                                                    beforeContent.Append("stoploss and takeprofit level: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S048":
                                                    beforeContent.Append("start focus digit: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S049":
                                                    beforeContent.Append("end focus digit: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S050":
                                                    if (Market.SymbolList[i].ParameterItems[j].BoolValue == 1)
                                                        beforeContent.Append("apply spread: enable - ");
                                                    else
                                                        beforeContent.Append("apply spread: disable - ");
                                                    break;
                                                case "S051":
                                                    if (Market.SymbolList[i].ParameterItems[j].BoolValue == 1)
                                                        beforeContent.Append("use freeze margin: enable - ");
                                                    else
                                                        beforeContent.Append("use freeze margin: disable - ");
                                                    break;
                                                case "S052":
                                                    beforeContent.Append("freeze margin: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S053":
                                                    beforeContent.Append("freeze margin hedged: " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                                case "S054":
                                                    beforeContent.Append("on hold time : " + Market.SymbolList[i].ParameterItems[j].NumValue + " - ");
                                                    break;
                                            }
                                            #endregion

                                            #region FILTER CODE GET NAME UPDATE AFTER
                                            switch (listTradingConfig[a].Code)
                                            {
                                                case "S001":    //SYMBOL NAME
                                                    afterContent.Append("symbol name: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S002":    //SOURCE
                                                    break;
                                                case "S003":    //DIGIT
                                                    afterContent.Append("digit: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S004":    //DESCRIPTION
                                                    afterContent.Append("description: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S005":    //TYPE
                                                    afterContent.Append("type: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S006":    //EXECUTION
                                                    afterContent.Append("execution: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S007":    //CURRENCY
                                                    afterContent.Append("currency: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S008":    //TRADE
                                                    afterContent.Append("trade: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S009":    //BACKGROUND
                                                    break;
                                                case "S010": //MARGIN CURRENCY
                                                    afterContent.Append("margin currency: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S011":    //MAXIMUM LOTS FOR IE
                                                    afterContent.Append("maximum lots for IE: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S012":    //ORDERS
                                                    afterContent.Append("orders: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S013":    //SPREAD BY DEFAULT
                                                    afterContent.Append("spread by default: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S014":    //LONG ONLY
                                                    if (listTradingConfig[a].BoolValue == 1)
                                                        afterContent.Append("long only: enable - ");
                                                    else
                                                        afterContent.Append("long only: disable - ");
                                                    break;
                                                case "S015":
                                                    afterContent.Append("limit level: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S016":
                                                    afterContent.Append("spread balance: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S017":
                                                    afterContent.Append("freeze level: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S018":
                                                    if (listTradingConfig[a].BoolValue == 1)
                                                        afterContent.Append("use datafeed time stamp: on - ");
                                                    else
                                                        afterContent.Append("use datafeed time stamp: off - ");
                                                    break;
                                                case "S019":
                                                    break;
                                                case "S020":
                                                    afterContent.Append("filtration level: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S021":
                                                    afterContent.Append("auto limit: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S022":
                                                    afterContent.Append("filter: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S023":
                                                    break;
                                                case "S024":
                                                    break;
                                                case "S025":
                                                    afterContent.Append("contract size: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S026":
                                                    afterContent.Append("initial margin: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S027":
                                                    break;
                                                case "S028":
                                                    afterContent.Append("hedge: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S029":
                                                    afterContent.Append("tick size: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S030":
                                                    afterContent.Append("tick price: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S031":
                                                    afterContent.Append("percentage: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S032":
                                                    afterContent.Append("margin calculation: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S033":
                                                    afterContent.Append("profit calculation: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S034":
                                                    if (listTradingConfig[a].BoolValue == 1)
                                                        afterContent.Append("strong hedged margin mode: enable - ");
                                                    else
                                                        afterContent.Append("string hedged margin mode: disable - ");
                                                    break;
                                                case "S035":
                                                    if (listTradingConfig[a].BoolValue == 1)
                                                        afterContent.Append("enable swap: on - ");
                                                    else
                                                        afterContent.Append("enable swap: off - ");
                                                    break;
                                                case "S036":
                                                    afterContent.Append("swap calculation: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S037":
                                                    afterContent.Append("long position: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S038":
                                                    afterContent.Append("short position: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S039":
                                                    afterContent.Append("3-day swaps: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S040":
                                                    break;
                                                case "S041":
                                                    break;
                                                case "S042":
                                                    afterContent.Append("trade session: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S043":
                                                    afterContent.Append("quote session: " + listTradingConfig[a].StringValue + " - ");
                                                    break;
                                                case "S044":
                                                    afterContent.Append("close only: " + listTradingConfig[a].DateValue + " - ");
                                                    break;
                                                case "S045":
                                                    afterContent.Append("time expired: " + listTradingConfig[a].DateValue + " - ");
                                                    break;
                                                case "S046":
                                                    afterContent.Append("stop level: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S047":
                                                    afterContent.Append("stoploss and takeprofit level: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S048":
                                                    afterContent.Append("start focus digit: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S049":
                                                    afterContent.Append("end focus digit: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S050":
                                                    if (listTradingConfig[a].BoolValue == 1)
                                                        afterContent.Append("apply spread: enable - ");
                                                    else
                                                        afterContent.Append("apply spread: disable - ");
                                                    break;
                                                case "S051":
                                                    if (listTradingConfig[a].BoolValue == 1)
                                                        afterContent.Append("use freeze margin: enable - ");
                                                    else
                                                        afterContent.Append("use freeze margin: disable - ");
                                                    break;
                                                case "S052":
                                                    afterContent.Append("freeze margin: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S053":
                                                    afterContent.Append("freeze margin hedged: " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                                case "S054":
                                                    afterContent.Append("on hold time : " + listTradingConfig[a].NumValue + " - ");
                                                    break;
                                            }
                                            #endregion

                                            #region CHANGE CONFIG SYMBOL AND UPDATE CONFIG DEAFULT
                                            //Set ParameterID For Config
                                            listTradingConfig[a].ParameterItemID = Market.SymbolList[i].ParameterItems[j].ParameterItemID;

                                            //Update Value Default Of Symbol
                                            #region Update Property Contract Size Of Symbol
                                            if (listTradingConfig[a].Code == "S025")
                                            {
                                                double ContractSize = 0;
                                                double.TryParse(listTradingConfig[a].NumValue, out ContractSize);
                                                Market.SymbolList[i].ContractSize = ContractSize;
                                            }
                                            #endregion

                                            #region Update Property Tick Price Of Symbol
                                            if (listTradingConfig[a].Code == "S030")
                                            {
                                                double TickPrice = 0;
                                                double.TryParse(listTradingConfig[a].NumValue, out TickPrice);
                                                Market.SymbolList[i].TickPrice = TickPrice;
                                            }
                                            #endregion

                                            #region Update Property Tick Size Of Symbol
                                            if (listTradingConfig[a].Code == "S029")
                                            {
                                                double TickSize = 0;
                                                double.TryParse(listTradingConfig[a].NumValue, out TickSize);
                                                Market.SymbolList[i].TickSize = TickSize;
                                            }
                                            #endregion

                                            #region Update Property Profit Calculation Of Symbol
                                            if (listTradingConfig[a].Code == "S033")
                                            {
                                                Market.SymbolList[i].ProfitCalculation = listTradingConfig[a].StringValue;
                                            }
                                            #endregion

                                            #region Update Property Digit Of Symbol
                                            if (listTradingConfig[a].Code == "S003")
                                            {
                                                int Digit = 0;
                                                int.TryParse(listTradingConfig[a].NumValue, out Digit);
                                                Market.SymbolList[i].Digit = Digit;
                                            }
                                            #endregion

                                            #region Update Property Currency
                                            if (listTradingConfig[a].Code == "S007")
                                            {
                                                Market.SymbolList[i].Currency = listTradingConfig[a].StringValue.Trim();
                                            }
                                            #endregion

                                            #region Update Property Initital Margin
                                            if (listTradingConfig[a].Code == "S026")
                                            {
                                                double InitialMargin = -1;
                                                double.TryParse(listTradingConfig[a].NumValue, out InitialMargin);
                                                Market.SymbolList[i].InitialMargin = InitialMargin;
                                            }
                                            #endregion

                                            #region Update Property Spread By Default Of Symbol
                                            if (listTradingConfig[a].Code == "S013")
                                            {
                                                double SpreadByDefault = 0;
                                                double.TryParse(listTradingConfig[a].NumValue, out SpreadByDefault);
                                                Market.SymbolList[i].SpreadByDefault = SpreadByDefault;
                                            }
                                            #endregion

                                            #region Update Property Sread Balance Of Symbol
                                            if (listTradingConfig[a].Code == "S016")
                                            {
                                                double SpreadBalance = 0;
                                                double.TryParse(listTradingConfig[a].NumValue, out SpreadBalance);
                                                Market.SymbolList[i].SpreadBalace = SpreadBalance;
                                            }
                                            #endregion

                                            #region Update Property Long Only Of Symbol
                                            if (listTradingConfig[a].Code == "S014")
                                            {
                                                bool LongOnly = false;
                                                if (listTradingConfig[a].BoolValue == 1)
                                                {
                                                    LongOnly = true;
                                                }
                                                Market.SymbolList[i].LongOnly = LongOnly;
                                            }
                                            #endregion

                                            #region Update Property Limit Stop Level Of Symbol
                                            if (listTradingConfig[a].Code == "S015")
                                            {
                                                int LimitLevel = 0;
                                                int.TryParse(listTradingConfig[a].NumValue, out LimitLevel);
                                                Market.SymbolList[i].LimitLevel = LimitLevel;
                                            }

                                            if (listTradingConfig[a].Code == "S046")
                                            {
                                                int StopLevel = 0;
                                                int.TryParse(listTradingConfig[a].NumValue, out StopLevel);
                                                Market.SymbolList[i].StopLevel = StopLevel;
                                            }

                                            if (listTradingConfig[a].Code == "S047")
                                            {
                                                int SLTP = 0;
                                                int.TryParse(listTradingConfig[a].NumValue, out SLTP);
                                                Market.SymbolList[i].StopLossTakeProfitLevel = SLTP;
                                            }
                                            #endregion

                                            #region Update Property Freeze Level Of Symbol
                                            if (listTradingConfig[a].Code == "S017")
                                            {
                                                int FreezeLevel = 0;
                                                int.TryParse(listTradingConfig[a].NumValue, out FreezeLevel);
                                                Market.SymbolList[i].FreezeLevel = FreezeLevel;
                                            }
                                            #endregion

                                            #region Update Property Allow Read Time In Symbol
                                            if (listTradingConfig[a].Code == "S018")
                                            {
                                                bool AllowReadTime = false;
                                                if (listTradingConfig[a].BoolValue == 1)
                                                {
                                                    AllowReadTime = true;
                                                }

                                                Market.SymbolList[i].AllowReadTime = AllowReadTime;
                                            }
                                            #endregion

                                            #region Update Property Filter Of Symbol
                                            if (listTradingConfig[a].Code == "S022")
                                            {
                                                int Filter = 0;
                                                int.TryParse(listTradingConfig[a].NumValue, out Filter);
                                                Market.SymbolList[i].Filter = Filter;
                                            }
                                            #endregion

                                            #region Update Property Filtration Level Of Symbol
                                            if (listTradingConfig[a].Code == "S020")
                                            {
                                                int FiltrationsLevel = 0;
                                                int.TryParse(listTradingConfig[a].NumValue, out FiltrationsLevel);
                                                Market.SymbolList[i].FiltrationsLevel = FiltrationsLevel;
                                            }
                                            #endregion

                                            #region Update Property Auto Limit Of Symbol
                                            if (listTradingConfig[a].Code == "S021")
                                            {
                                                Market.SymbolList[i].AutoLimit = listTradingConfig[a].StringValue;
                                            }
                                            #endregion

                                            #region Update Property IsHedged Of Symbol
                                            if (listTradingConfig[a].Code == "S034")
                                            {
                                                bool IsHedged = false;
                                                if (listTradingConfig[a].BoolValue == 1)
                                                    IsHedged = true;
                                                Market.SymbolList[i].IsHedged = IsHedged;

                                                //RECALCULATION ALL INVESTOR
                                                Business.Investor.investorInstance.ReCalculationTotalMargin();
                                            }
                                            #endregion

                                            #region Update Property Trade Of Symbol
                                            if (listTradingConfig[a].Code == "S008")
                                            {
                                                Market.SymbolList[i].Trade = listTradingConfig[a].StringValue;
                                            }
                                            #endregion

                                            #region UPDATE PROPERTY APPLY SPREAD
                                            if (listTradingConfig[a].Code == "S050")
                                            {
                                                bool applySpread = false;
                                                if (listTradingConfig[a].BoolValue == 1)
                                                {
                                                    applySpread = true;
                                                }

                                                Business.Market.SymbolList[i].ApplySpread = applySpread;
                                            }
                                            #endregion

                                            #region UPDATE PROPERTY USE FREEZE MARGIN
                                            if (listTradingConfig[a].Code == "S051")
                                            {
                                                bool useFreezeMargin = false;
                                                if (listTradingConfig[a].BoolValue == 1)
                                                    useFreezeMargin = true;

                                                Business.Market.SymbolList[i].IsEnableFreezeMargin = useFreezeMargin;
                                            }
                                            #endregion

                                            #region UPDATE PROPERTY FREEZE MARGIN
                                            if (listTradingConfig[a].Code == "S052")
                                            {
                                                double freezeMargin = 0;
                                                double.TryParse(listTradingConfig[a].NumValue.ToString(), out freezeMargin);
                                                Business.Market.SymbolList[i].FreezeMargin = freezeMargin;
                                            }
                                            #endregion

                                            #region UPDATE PROPERTY FREEZE MARGIN HEDGED
                                            if (listTradingConfig[a].Code == "S053")
                                            {
                                                double freezeMarginH = 0;
                                                double.TryParse(listTradingConfig[a].NumValue, out freezeMarginH);
                                                Business.Market.SymbolList[i].FreezeMarginHedged = freezeMarginH;
                                            }
                                            #endregion

                                            #region UPDATE PROPERTY MARGIN HEDGED
                                            if (listTradingConfig[a].Code == "S028")
                                            {
                                                double marginH = 0;
                                                double.TryParse(listTradingConfig[a].NumValue, out marginH);
                                                Business.Market.SymbolList[i].MarginHedged = marginH;
                                            }
                                            #endregion

                                            //Update Value Parameter Item
                                            Market.SymbolList[i].ParameterItems[j].Name = listTradingConfig[a].Name;
                                            Market.SymbolList[i].ParameterItems[j].Code = listTradingConfig[a].Code;
                                            Market.SymbolList[i].ParameterItems[j].BoolValue = listTradingConfig[a].BoolValue;
                                            Market.SymbolList[i].ParameterItems[j].StringValue = listTradingConfig[a].StringValue;
                                            Market.SymbolList[i].ParameterItems[j].NumValue = listTradingConfig[a].NumValue;
                                            Market.SymbolList[i].ParameterItems[j].DateValue = listTradingConfig[a].DateValue;

                                            //Set ParameterID Again
                                            listTradingConfig[a].ParameterItemID = Market.SymbolList[i].ParameterItems[j].ParameterItemID;
                                            #endregion

                                            break;
                                        }
                                    }
                                }
                                #endregion

                                #region UPDATE CALCULATION SYMBOL
                                if (listTradingConfig[a].Code == "S025" || listTradingConfig[a].Code == "S026" ||
                                    listTradingConfig[a].Code == "S027" || listTradingConfig[a].Code == "S028" ||
                                    listTradingConfig[a].Code == "S029" || listTradingConfig[a].Code == "S030" ||
                                    listTradingConfig[a].Code == "S031" || listTradingConfig[a].Code == "S032" ||
                                    listTradingConfig[a].Code == "S034")
                                {
                                    List<Business.Investor> listInvestor = new List<Investor>();
                                    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++)
                                        {
                                            bool flagInvestor = false;
                                            Business.Market.SymbolList[i].CommandList[j].CalculatorMarginCommand(Business.Market.SymbolList[i].CommandList[j]);

                                            if (listInvestor != null)
                                            {
                                                int countInvestor = listInvestor.Count;
                                                for (int n = 0; n < countInvestor; n++)
                                                {
                                                    if (Business.Market.SymbolList[i].CommandList[j].Investor.InvestorID == listInvestor[n].InvestorID)
                                                    {
                                                        flagInvestor = true;
                                                        break;
                                                    }
                                                }
                                            }

                                            if (!flagInvestor)
                                            {
                                                listInvestor.Add(Business.Market.SymbolList[i].CommandList[j].Investor);
                                            }
                                        }
                                    }

                                    if (listInvestor != null && listInvestor.Count > 0)
                                    {
                                        int countInvestor = listInvestor.Count;
                                        for (int j = 0; j < countInvestor; j++)
                                        {
                                            if (listInvestor[j].CommandList != null && listInvestor[j].CommandList.Count > 0)
                                            {
                                                int countCommand = listInvestor[j].CommandList.Count;
                                                for (int n = 0; n < countCommand; n++)
                                                {
                                                    if (listInvestor[j].CommandList[n].Symbol.Name == Market.SymbolList[i].Name)
                                                    {
                                                        listInvestor[j].CommandList[n].CalculatorMarginCommand(listInvestor[j].CommandList[n]);
                                                    }
                                                }
                                            }

                                            if (listInvestor[j].CommandList.Count > 0)
                                            {
                                                Business.Margin newMargin = new Margin();
                                                newMargin = listInvestor[j].CommandList[0].Symbol.CalculationTotalMargin(listInvestor[j].CommandList);
                                                listInvestor[j].Margin = newMargin.TotalMargin;
                                                listInvestor[j].FreezeMargin = newMargin.TotalFreezeMargin;
                                            }
                                            else
                                            {
                                                listInvestor[j].Margin = 0;
                                                listInvestor[j].FreezeMargin = 0;
                                            }

                                            //SEND NOTIFY TO MANAGER
                                            TradingServer.Facade.FacadeSendNotifyManagerRequest(3, listInvestor[j]);

                                            //SEND NOTIFY TO CLIENT
                                            TradingServer.Business.Market.SendNotifyToClient("IAC04332451", 3, listInvestor[j].InvestorID);
                                        }
                                    }
                                }
                                #endregion

                                #region UPDATE TRADING CONFIG TO DATABASE AND INIT TIME EVENT IN SYSTEM
                                Result = ParameterItem.DBWTradingConfigInstance.UpdateTradingConfig(listTradingConfig[a].ParameterItemID, listTradingConfig[a].SecondParameterID, -1,
                                    listTradingConfig[a].Name, listTradingConfig[a].Code, listTradingConfig[a].BoolValue, listTradingConfig[a].StringValue, listTradingConfig[a].NumValue,
                                    listTradingConfig[a].DateValue);

                                if (listTradingConfig[a].Code == "S042" || listTradingConfig[a].Code == "S043")
                                {
                                    //Call Function Init Time Event Symbol
                                    Business.Market.marketInstance.InitTimeEventInSymbol();

                                    //CALL FUNCTION INIT TIME MARKET
                                    Business.Market.marketInstance.InitTimeEventServer();
                                }

                                if (listTradingConfig[a].Code == "S044" || listTradingConfig[a].Code == "S045")
                                {
                                    Business.Market.marketInstance.InitSymbolFuture();
                                }
                                #endregion

                                break;
                            }
                            else
                            {
                                //Find In Reference Symbol
                                this.UpdateTradingConfigReference(listTradingConfig[a], Market.SymbolList[i].RefSymbol);
                            }
                        }
                    }
                }
            }

            string tempBeforeContent = beforeContent.ToString();
            if (tempBeforeContent.EndsWith(" - "))
                tempBeforeContent = tempBeforeContent.Remove(tempBeforeContent.Length - 2, 2);

            string tempAfterContent = afterContent.ToString();
            if (tempAfterContent.EndsWith(" - "))
                tempAfterContent = tempAfterContent.Remove(tempAfterContent.Length - 2, 2);

            if (!string.IsNullOrEmpty(tempAfterContent.Trim()) && !string.IsNullOrEmpty(tempBeforeContent.Trim()))
            {
                content.Append(tempBeforeContent + " -> " + tempAfterContent);
                TradingServer.Facade.FacadeAddNewSystemLog(3, content.ToString(), "[update symbol config]", ipAddress, code);
            }

            return Result;
        }
        /// <summary>
        /// DELETE ONLINE COMMAND BY COMMAND ID IN CLASS MARKET AND DATABASE. IT CALL BY MANAGER
        /// </summary>
        /// <param name="CommandID"></param>
        /// <returns></returns>
        internal bool DeleteOpenTradeByRefCommandID(int refCommandID)
        {
            bool Result = false;

            #region Find Command In Investor List Of Class Market And Delete Command
            if (Business.Market.InvestorList != null)
            {
                bool Flag = false;
                int count = Business.Market.InvestorList.Count;
                for (int i = 0; i < Business.Market.InvestorList.Count; i++)
                {
                    if (Flag == true)
                        break;

                    if (Business.Market.InvestorList[i].CommandList != null && Business.Market.InvestorList[i].CommandList.Count > 0)
                    {
                        for (int j = 0; j < Business.Market.InvestorList[i].CommandList.Count; j++)
                        {
                            if (Business.Market.InvestorList[i].CommandList[j].RefCommandID == refCommandID)
                            {
                                Business.OpenTrade temp = Business.Market.InvestorList[i].CommandList[j];

                                bool isBuy = TradingServer.Facade.FacadeGetIsBuyByTypeID(temp.Type.ID);
                                int ResultHistory = -1;
                                temp.CloseTime = DateTime.Now;
                                temp.Profit = 0;

                                #region ADD COMMAND TO HISTORY
                                //CALL FUNCTION INSERT COMMAND TO HISTORY COMMAND WITH PROFIT = 0
                                ResultHistory = TradingServer.Facade.FacadeAddNewCommandHistory(temp.Investor.InvestorID,
                                    temp.Type.ID, temp.CommandCode,
                                    temp.OpenTime, temp.OpenPrice,
                                    temp.CloseTime, temp.ClosePrice,
                                    0/*Profit*/, 0/*SWAP*/,
                                    0/*COMMISSION*/, temp.ExpTime,
                                    temp.Size, temp.StopLoss,
                                    temp.TakeProfit, temp.ClientCode,
                                    temp.Symbol.SymbolID, temp.Taxes, 0,
                                    temp.Comment, "6", 0/*TOTAL SWAP*/,
                                    temp.RefCommandID,
                                    temp.AgentRefConfig,
                                    temp.IsActivePending,
                                    temp.IsStopLossAndTakeProfit);
                                #endregion

                                //CALL FUNCTION DELETE COMMAND IN ONLINE COMMAND
                                TradingServer.Facade.FacadeDeleteOpenTradeByID(temp.ID);

                                if (ResultHistory > 0)
                                {
                                    #region MAP COMMAND SEND TO CLIENT
                                    StringBuilder Message = new StringBuilder();
                                    Message.Append("CloseCommandByManager$True,CLOSE COMMAND COMMPLETE,");
                                    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("0,0,0,Comment,");
                                    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(",Close,");
                                    Message.Append(temp.CloseTime);
                                    #endregion

                                    if (Business.Market.InvestorList[i].ClientCommandQueue == null)
                                        Business.Market.InvestorList[i].ClientCommandQueue = new List<string>();

                                    Business.Market.InvestorList[i].ClientCommandQueue.Add(Message.ToString());

                                    #region COMMENT CODE(REMOVE COMMAND IN COMMAND EXECUTOR AND SYMBOL LIST
                                    ////CALL FUNCTION REMOVE COMMAND IN SYMBOL LIST OF CLASS MAKRET
                                    //bool resultRemoveCommnadSymbol = TradingServer.Facade.FacadeRemoveOpenTradeInCommandList(CommandID);
                                    #endregion

                                    //NEW SOLUTION ADD COMMAND TO REMOVE LIST
                                    //Business.OpenTrade newOpenTrade = Business.Market.InvestorList[i].CommandList[j];
                                    Business.OpenRemove newOpenRemove = new OpenRemove();
                                    newOpenRemove.InvestorID = Business.Market.InvestorList[i].InvestorID;
                                    newOpenRemove.OpenTradeID = Business.Market.InvestorList[i].CommandList[j].ID;
                                    newOpenRemove.SymbolName = temp.Symbol.Name;
                                    newOpenRemove.IsExecutor = true;
                                    newOpenRemove.IsSymbol = true;
                                    newOpenRemove.IsInvestor = false;
                                    Business.Market.AddCommandToRemoveList(newOpenRemove);

                                    //SEND NOTIFY TO MANAGER
                                    TradingServer.Facade.FacadeSendNoticeManagerRequest(2, Business.Market.InvestorList[i].CommandList[j]);

                                    //SEND NOTIFY CHANGE ACCOUNT
                                    TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[i]);

                                    #region BLOCK OBJECT COMMAND IN INVESTOR LIST
                                    lock (Business.Market.syncObject)
                                    {
                                        //REMOVE COMMAND IN INVESTOR COMMAND LIST OF CLASS MARKET
                                        Business.Market.InvestorList[i].CommandList.RemoveAt(j);
                                    }
                                    #endregion

                                    if (Business.Market.InvestorList[i].CommandList.Count > 0)
                                    {
                                        //RECALCULATION TOTAL MARGIN OF ACCOUNT
                                        //Business.Market.InvestorList[i].ReCalculationTotalMargin();
                                        Business.Margin newMargin = new Margin();
                                        newMargin = Business.Market.InvestorList[i].CommandList[0].Symbol.CalculationTotalMargin(Business.Market.InvestorList[i].CommandList);
                                        Business.Market.InvestorList[i].Margin = newMargin.TotalMargin;
                                        Business.Market.InvestorList[i].FreezeMargin = newMargin.TotalFreezeMargin;
                                    }
                                    else
                                    {
                                        Business.Market.InvestorList[i].Margin = 0;
                                        Business.Market.InvestorList[i].FreezeMargin = 0;
                                        Business.Market.InvestorList[i].Profit = 0;
                                        Business.Market.InvestorList[i].FreeMargin = 0;
                                    }

                                    Result = true;
                                }

                                Flag = true;
                                break;
                            }
                        }
                    }
                }
            }
            #endregion

            return Result;
        }
        /// <summary>
        /// DELETE ONLINE COMMAND BY COMMAND ID IN CLASS MARKET AND DATABASE. IT CALL BY MANAGER
        /// </summary>
        /// <param name="CommandID"></param>
        /// <returns></returns>
        internal bool DeleteOpenTradeByCommandID(int CommandID)
        {
            bool Result = false;

            #region FIND COMMAND IN COMMAND EXECUTOR
            //if (Business.Market.CommandExecutor != null)
            //{
            //    int count = Business.Market.CommandExecutor.Count;
            //    for (int i = 0; i < Business.Market.CommandExecutor.Count; i++)
            //    {
            //        if (Business.Market.CommandExecutor[i].ID == CommandID)
            //        {
            //            Business.Market.CommandExecutor.RemoveAt(i);
            //            break;
            //        }
            //    }
            //}
            #endregion

            #region Find Command In Investor List Of Class Market And Delete Command
            if (Business.Market.InvestorList != null)
            {
                bool Flag = false;
                int count = Business.Market.InvestorList.Count;
                for (int i = 0; i < Business.Market.InvestorList.Count; i++)
                {
                    if (Flag == true)
                        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 < Business.Market.InvestorList[i].CommandList.Count; j++)
                        {
                            if (Business.Market.InvestorList[i].CommandList[j].ID == CommandID)
                            {
                                bool isBuy = TradingServer.Facade.FacadeGetIsBuyByTypeID(Business.Market.InvestorList[i].CommandList[j].Type.ID);
                                int ResultHistory = -1;
                                Business.Market.InvestorList[i].CommandList[j].CloseTime = DateTime.Now;
                                Business.Market.InvestorList[i].CommandList[j].Profit = 0;

                                #region ADD COMMAND TO HISTORY
                                //CALL FUNCTION INSERT COMMAND TO HISTORY COMMAND WITH PROFIT = 0
                                ResultHistory = TradingServer.Facade.FacadeAddNewCommandHistory(Business.Market.InvestorList[i].CommandList[j].Investor.InvestorID,
                                    Business.Market.InvestorList[i].CommandList[j].Type.ID, Business.Market.InvestorList[i].CommandList[j].CommandCode,
                                    Business.Market.InvestorList[i].CommandList[j].OpenTime, Business.Market.InvestorList[i].CommandList[j].OpenPrice,
                                    Business.Market.InvestorList[i].CommandList[j].CloseTime, Business.Market.InvestorList[i].CommandList[j].ClosePrice,
                                    0/*Profit*/, 0/*SWAP*/,
                                    0/*COMMISSION*/, Business.Market.InvestorList[i].CommandList[j].ExpTime,
                                    Business.Market.InvestorList[i].CommandList[j].Size, Business.Market.InvestorList[i].CommandList[j].StopLoss,
                                    Business.Market.InvestorList[i].CommandList[j].TakeProfit, Business.Market.InvestorList[i].CommandList[j].ClientCode,
                                    Business.Market.InvestorList[i].CommandList[j].Symbol.SymbolID, Business.Market.InvestorList[i].CommandList[j].Taxes, 0,
                                    Business.Market.InvestorList[i].CommandList[j].Comment, "6", 0/*TOTAL SWAP*/,
                                    Business.Market.InvestorList[i].CommandList[j].RefCommandID,
                                    Business.Market.InvestorList[i].CommandList[j].AgentRefConfig,
                                    Business.Market.InvestorList[i].CommandList[j].IsActivePending,
                                    Business.Market.InvestorList[i].CommandList[j].IsStopLossAndTakeProfit);
                                #endregion

                                //CALL FUNCTION DELETE COMMAND IN ONLINE COMMAND
                                TradingServer.Facade.FacadeDeleteOpenTradeByID(Business.Market.InvestorList[i].CommandList[j].ID);

                                if (ResultHistory > 0)
                                {
                                    #region MAP COMMAND SEND TO CLIENT
                                    string Message = "CloseCommandByManager$True,CLOSE COMMAND COMMPLETE," + Business.Market.InvestorList[i].CommandList[j].ID + "," +
                                        Business.Market.InvestorList[i].CommandList[j].Investor.InvestorID + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Symbol.Name + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Size + "," + isBuy + "," +
                                         Business.Market.InvestorList[i].CommandList[j].OpenTime + "," +
                                         Business.Market.InvestorList[i].CommandList[j].OpenPrice + "," +
                                         Business.Market.InvestorList[i].CommandList[j].StopLoss + "," +
                                         Business.Market.InvestorList[i].CommandList[j].TakeProfit + "," +
                                         Business.Market.InvestorList[i].CommandList[j].ClosePrice + "," +
                                         "0," +
                                         "0," +
                                         "0," + "Comment," +
                                         Business.Market.InvestorList[i].CommandList[j].ID + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Type.Name + "," + 1 + "," +
                                         Business.Market.InvestorList[i].CommandList[j].ExpTime + "," +
                                         Business.Market.InvestorList[i].CommandList[j].ClientCode + "," +
                                         Business.Market.InvestorList[i].CommandList[j].CommandCode + "," +
                                         Business.Market.InvestorList[i].CommandList[j].IsHedged + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Type.ID + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Margin + ",Close," +
                                         Business.Market.InvestorList[i].CommandList[j].CloseTime;
                                    #endregion

                                    if (Business.Market.InvestorList[i].ClientCommandQueue == null)
                                        Business.Market.InvestorList[i].ClientCommandQueue = new List<string>();

                                    Business.Market.InvestorList[i].ClientCommandQueue.Add(Message);

                                    string notifyAgent = "DeleteOrderByManager$True,CLOSE COMMAND COMMPLETE," + Business.Market.InvestorList[i].CommandList[j].ID + "," +
                                        Business.Market.InvestorList[i].CommandList[j].Investor.InvestorID + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Symbol.Name + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Size + "," + isBuy + "," +
                                         Business.Market.InvestorList[i].CommandList[j].OpenTime + "," +
                                         Business.Market.InvestorList[i].CommandList[j].OpenPrice + "," +
                                         Business.Market.InvestorList[i].CommandList[j].StopLoss + "," +
                                         Business.Market.InvestorList[i].CommandList[j].TakeProfit + "," +
                                         Business.Market.InvestorList[i].CommandList[j].ClosePrice + "," +
                                         "0," +
                                         "0," +
                                         "0," + "Comment," +
                                         Business.Market.InvestorList[i].CommandList[j].ID + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Type.Name + "," + 1 + "," +
                                         Business.Market.InvestorList[i].CommandList[j].ExpTime + "," +
                                         Business.Market.InvestorList[i].CommandList[j].ClientCode + "," +
                                         Business.Market.InvestorList[i].CommandList[j].CommandCode + "," +
                                         Business.Market.InvestorList[i].CommandList[j].IsHedged + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Type.ID + "," +
                                         Business.Market.InvestorList[i].CommandList[j].Margin + ",Close," +
                                         Business.Market.InvestorList[i].CommandList[j].CloseTime;

                                    Business.AgentNotify newAgentNotify = new AgentNotify();
                                    newAgentNotify.NotifyMessage = notifyAgent;
                                    TradingServer.Agent.AgentConfig.Instance.AddNotifyToAgent(newAgentNotify, Business.Market.InvestorList[i].InvestorGroupInstance);

                                    #region COMMENT CODE(REMOVE COMMAND IN COMMAND EXECUTOR AND SYMBOL LIST
                                    ////CALL FUNCTION REMOVE COMMAND IN SYMBOL LIST OF CLASS MAKRET
                                    //bool resultRemoveCommnadSymbol = TradingServer.Facade.FacadeRemoveOpenTradeInCommandList(CommandID);
                                    #endregion

                                    //NEW SOLUTION ADD COMMAND TO REMOVE LIST
                                    //Business.OpenTrade newOpenTrade = Business.Market.InvestorList[i].CommandList[j];
                                    Business.OpenRemove newOpenRemove = new OpenRemove();
                                    newOpenRemove.InvestorID = Business.Market.InvestorList[i].InvestorID;
                                    newOpenRemove.OpenTradeID = Business.Market.InvestorList[i].CommandList[j].ID;
                                    newOpenRemove.SymbolName = Business.Market.InvestorList[i].CommandList[j].Symbol.Name;
                                    newOpenRemove.IsExecutor = true;
                                    newOpenRemove.IsSymbol = true;
                                    newOpenRemove.IsInvestor = false;
                                    Business.Market.AddCommandToRemoveList(newOpenRemove);

                                    //SEND NOTIFY TO MANAGER
                                    TradingServer.Facade.FacadeSendNoticeManagerRequest(2, Business.Market.InvestorList[i].CommandList[j]);

                                    //SEND NOTIFY CHANGE ACCOUNT
                                    TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Business.Market.InvestorList[i]);

                                    #region BLOCK OBJECT COMMAND IN INVESTOR LIST
                                    lock (Business.Market.syncObject)
                                    {
                                        //REMOVE COMMAND IN INVESTOR COMMAND LIST OF CLASS MARKET
                                        Business.Market.InvestorList[i].CommandList.RemoveAt(j);
                                    }
                                    #endregion

                                    if (Business.Market.InvestorList[i].CommandList.Count > 0)
                                    {
                                        //RECALCULATION TOTAL MARGIN OF ACCOUNT
                                        //Business.Market.InvestorList[i].ReCalculationTotalMargin();
                                        Business.Margin newMargin = new Margin();
                                        newMargin = Business.Market.InvestorList[i].CommandList[0].Symbol.CalculationTotalMargin(Business.Market.InvestorList[i].CommandList);
                                        Business.Market.InvestorList[i].Margin = newMargin.TotalMargin;
                                        Business.Market.InvestorList[i].FreezeMargin = newMargin.TotalFreezeMargin;
                                    }
                                    else
                                    {
                                        Business.Market.InvestorList[i].Margin = 0;
                                        Business.Market.InvestorList[i].FreezeMargin = 0;
                                        Business.Market.InvestorList[i].Profit = 0;
                                        Business.Market.InvestorList[i].FreeMargin = 0;
                                    }

                                    Result = true;
                                }
                                Flag = true;
                                break;
                            }
                        }
                    }
                }
            }
            #endregion

            #region FIND COMMAND IN SYMBOL LIST AND DELETE
            //if (Business.Market.SymbolList != null)
            //{
            //    bool flag = false;
            //    int count = Business.Market.SymbolList.Count;
            //    for (int i = 0; i < Business.Market.SymbolList.Count; i++)
            //    {
            //        if (flag)
            //            break;

            //        if (Business.Market.SymbolList[i].CommandList != null)
            //        {
            //            int countCommand = Business.Market.SymbolList[i].CommandList.Count;
            //            for (int j = 0; j < Business.Market.SymbolList[i].CommandList.Count; j++)
            //            {
            //                if (Business.Market.SymbolList[i].CommandList[j].ID == CommandID)
            //                {
            //                    Business.Market.SymbolList[i].CommandList.RemoveAt(j);
            //                    flag = true;

            //                    break;
            //                }
            //            }
            //        }
            //    }
            //}
            #endregion

            return Result;
        }
Ejemplo n.º 12
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="Command"></param>
        public void AddCommand(OpenTrade Command)
        {
            string comment = string.Empty;
            string mode = string.Empty;
            string content = string.Empty;            

            #region Set Property IsBuy And CommandType Send To Client
            bool IsBuy = false;
            string CommandType = "SellFuture";
            switch (Command.Type.ID)
            {
                case 11:
                    IsBuy = true;
                    CommandType = "BuyFuture";
                    break;
                case 12:
                    IsBuy = false;
                    CommandType = "SellFuture";
                    break;
                case 17:
                    IsBuy = true;
                    CommandType = "BuyStopFutureCommand";
                    break;
                case 18:
                    IsBuy = false;
                    CommandType = "SellStopFutureCommand";
                    break;
                case 19:
                    IsBuy = true;
                    CommandType = "BuyLimitFutureCommand";
                    break;
                case 20:
                    IsBuy = false;
                    CommandType = "SellLimitFutureCommand";
                    break;
            }            
            #endregion

            int Result = -1;

            Command.IsClose = false;
            if (!Command.IsReOpen)
                Command.OpenTime = DateTime.Now;

            Command.CloseTime = Command.OpenTime;            
            Command.Taxes = 0;

            if (string.IsNullOrEmpty(Command.Comment))
                Command.Comment = "[future command]";

            #region Find Price Close Of Symbol
            switch (Command.Type.ID)
            {
                case 11:
                    Command.ClosePrice = Command.Symbol.TickValue.Bid;
                    comment = "[future buy]";
                    mode = "buy future";
                    break;
                case 12:
                    Command.ClosePrice = Command.Symbol.TickValue.Ask;
                    comment = "[future sell]";
                    mode = "sell future";
                    break;     
                case 17:    //BUY STOP FUTURE COMMAND
                    Command.ClosePrice = Command.Symbol.TickValue.Bid;
                    comment = "[buy stop future command]";
                    mode = "buy stop future";
                    break;
                case 18:    //SELL STOP FUTURE COMMAND
                    Command.ClosePrice = Command.Symbol.TickValue.Ask;
                    comment = "[sell stop future command]";
                    mode = "sell stop future";
                    break;
                case 19:    //BUY LIMIT FUTURE COMMAND
                    Command.ClosePrice = Command.Symbol.TickValue.Bid;
                    comment = "[buy limit future command]";
                    mode = "buy limit future";
                    break;
                case 20:    //SELL LIMIT FUTURE COMMAND
                    Command.ClosePrice = Command.Symbol.TickValue.Ask;
                    comment = "[sell limit future command]";
                    mode = "sell limit future";
                    break;
            }
            #endregion

            #region INSERT SYSTEM LOG EVENT MAKE COMMAND
            string size = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Size.ToString(), 2);
            string openPrice = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.OpenPrice.ToString(), Command.Symbol.Digit);
            string takeProfit = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.TakeProfit.ToString(), Command.Symbol.Digit);
            string stopLoss = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.StopLoss.ToString(), Command.Symbol.Digit);
            string bid = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Symbol.TickValue.Bid.ToString(), Command.Symbol.Digit);
            string ask = TradingServer.Model.TradingCalculate.Instance.BuildStringWithDigit(Command.Symbol.TickValue.Ask.ToString(), Command.Symbol.Digit);              
            #endregion

            #region CHECK ISCLOSE ONLY OF FUTURE MARKET AREA
            if (Command.Symbol.isCloseOnlyFuture)
            {
                #region INSERT SYSTEM LOG 
                content = "'" + Command.Investor.Code + "': " + mode + " " + size + " " + Command.Symbol.Name + " at " + openPrice +
                               " sl: " + stopLoss + " tp: " + takeProfit + " (" + bid + "/" + ask + ") unsuccessful [symbol close only]";
                comment = "[symbol close only]";

                TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, Command.Investor.IpAddress, Command.Investor.Code);
                #endregion

                #region CHECK SYMBOL CLOSE ONLY
                if (Command.IsServer)
                {
                    string Message = "AddCommandByManager$False,AFC00001," + 0 + "," + 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 + "," +
                               CommandType + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + 0 + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Open";

                    if (Command.Investor.ClientCommandQueue == null)
                        Command.Investor.ClientCommandQueue = new List<string>();

                    Command.Investor.ClientCommandQueue.Add(Message);

                    return;
                }
                else
                {
                    string Message = "AddCommand$False,AFC00001," + 0 + "," + 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 + "," +
                               CommandType + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + 0 + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Open";

                    if (Command.Investor.ClientCommandQueue == null)
                        Command.Investor.ClientCommandQueue = new List<string>();

                    Command.Investor.ClientCommandQueue.Add(Message);
                    return;
                }
                #endregion                
            }
            #endregion

            #region GET TIME EXP AND COMPARE WITH TIME OPEN COMMAND
            //Set Exp Time
            if (Command.Symbol.ParameterItems != null)
            {
                int countParameter = Command.Symbol.ParameterItems.Count;
                for (int i = 0; i < countParameter; i++)
                {
                    if (Command.Symbol.ParameterItems[i].Code == "S045")
                    {
                        if (Command.Symbol.ParameterItems[i].DateValue < DateTime.Now)
                        {
                            #region INSERT SYSTEM LOG IF MAKE FUTURE COMMAND UNCOMPLETE
                            content = "'" + Command.Investor.Code + "': " + mode + " " + size + " " + Command.Symbol.Name + " at " + openPrice +
                               " sl: " + stopLoss + " tp: " + takeProfit + " (" + bid + "/" + ask + ") unsuccessful [symbol exp time]";
                            comment = "[symbol exp time]";

                            TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, Command.Investor.IpAddress, Command.Investor.Code);
                            #endregion

                            #region COMPARE TIME EXP WITH TIME CURRENT
                            if (Command.IsServer)
                            {
                                string Message = "AddCommandByManager$False,AFC00002," + 0 + "," + 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 + "," +
                                           CommandType + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + 0 + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Open";

                                if (Command.Investor.ClientCommandQueue == null)
                                    Command.Investor.ClientCommandQueue = new List<string>();

                                Command.Investor.ClientCommandQueue.Add(Message);

                                return;
                            }
                            else
                            {
                                string Message = "AddCommand$False,AFC00002," + 0 + "," + 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 + "," +
                                           CommandType + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + 0 + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Open";

                                if (Command.Investor.ClientCommandQueue == null)
                                    Command.Investor.ClientCommandQueue = new List<string>();

                                Command.Investor.ClientCommandQueue.Add(Message);
                                return;
                            }
                            #endregion                            
                        }
                        else
                        {
                            Command.ExpTime = Command.Symbol.ParameterItems[i].DateValue;
                        }

                        break;
                    }
                }
            }
            #endregion            

            if (Command.Type.ID == 11 || Command.Type.ID == 12)
            {
                //Calculator Profit Of Command        
                Command.CalculatorProfitCommand(Command);
                Command.Profit = Command.Symbol.ConvertCurrencyToUSD(Command.Symbol.Currency, Command.Profit, false, Command.SpreaDifferenceInOpenTrade, Command.Symbol.Digit);

                #region CALCULATION MARGIN FOR COMMAND
                //Call Function Calculator Margin Of Command            
                Command.CalculatorMarginCommand(Command);
                #endregion

                Command.Commission = Model.CalculationFormular.Instance.CalculationCommission(Command); 
            }
 
            string CommandCode = string.Empty;

            #region REND CLIENT CODE IF CLIENT CODE == EMPTY
            if (string.IsNullOrEmpty(Command.ClientCode))
            {
                string tempCode = string.Empty;
                Random ran = new Random();
                int tempRan = ran.Next(0000000, 9999999);
                Command.ClientCode = Command.Investor.InvestorID + "_" + tempRan;
                bool isOK = false;

                while (!isOK)
                {
                    if (Command.Investor.CommandList != null && Command.Investor.CommandList.Count > 0)
                    {
                        int count = Command.Investor.CommandList.Count;
                        for (int i = 0; i < count; i++)
                        {
                            if (Command.Investor.CommandList[i].ClientCode == Command.ClientCode)
                            {
                                Command.ClientCode = Command.Investor.InvestorID + "_" + ran.Next(0000000, 9999999);
                                break;
                            }
                        }

                        isOK = true;
                    }
                    else
                    {
                        isOK = true;
                    }
                }
            }
            #endregion            

            #region Add Command To Database And Build Command Code
            //Add Command To Database
            //                
            Result = TradingServer.Facade.FacadeAddNewOpenTrade(Command);

            Command.ID = Result;

            //Call Function Update Command Code Of Command
            CommandCode = TradingServer.Model.TradingCalculate.Instance.BuildCommandCode(Result.ToString());
            TradingServer.Facade.FacadeUpdateCommandCode(Result, CommandCode);
            #endregion

            if (Result > 0)
            {
                double spreaDifferenceInCommand = Model.CommandFramework.CommandFrameworkInstance.GetSpreadDifference(Command.Symbol.SecurityID, Command.Investor.InvestorGroupInstance.InvestorGroupID);

                #region Build Command And Add Command To CommandList In Symbol And Command List In Investor
                //Build Two Instance OpenTrade
                //One Instance For Investor 
                //One Instance For Symbol And MarketArea
                #region Build Instance OpenTrade For Investor
                Business.OpenTrade newOpenTradeInvestor = new OpenTrade();
                newOpenTradeInvestor.ID = Result;
                newOpenTradeInvestor.ClientCode = Command.ClientCode;
                newOpenTradeInvestor.ClosePrice = Command.ClosePrice;
                newOpenTradeInvestor.CloseTime = Command.CloseTime;
                newOpenTradeInvestor.CommandCode = CommandCode;
                newOpenTradeInvestor.Commission = Command.Commission;
                newOpenTradeInvestor.ExpTime = Command.ExpTime;                
                newOpenTradeInvestor.Investor = Command.Investor;
                newOpenTradeInvestor.IsClose = Command.IsClose;
                newOpenTradeInvestor.OpenPrice = Command.OpenPrice;
                newOpenTradeInvestor.OpenTime = Command.OpenTime;
                newOpenTradeInvestor.Profit = Command.Profit;
                newOpenTradeInvestor.Size = Command.Size;
                newOpenTradeInvestor.StopLoss = Command.StopLoss;
                newOpenTradeInvestor.Swap = Command.Swap;
                newOpenTradeInvestor.Symbol = Command.Symbol;
                newOpenTradeInvestor.TakeProfit = Command.TakeProfit;
                newOpenTradeInvestor.Type = new TradeType();
                newOpenTradeInvestor.Type.ID = Command.Type.ID;
                newOpenTradeInvestor.Type.Name = Command.Type.Name;                
                newOpenTradeInvestor.Margin = Command.Margin;
                newOpenTradeInvestor.IGroupSecurity = Command.IGroupSecurity;
                newOpenTradeInvestor.Commission = Command.Commission;
                newOpenTradeInvestor.IsHedged = Command.IsHedged;
                newOpenTradeInvestor.SpreaDifferenceInOpenTrade = spreaDifferenceInCommand;
                newOpenTradeInvestor.AgentCommission = Command.AgentCommission;
                #endregion

                #region Find Investor In Investor List And Add Command To Investor List
                //Find Investor In Investor List And Add Command To 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 == newOpenTradeInvestor.Investor.InvestorID)
                        {
                            if (Business.Market.InvestorList[n].CommandList != null)
                            {
                                Business.Market.InvestorList[n].CommandList.Add(newOpenTradeInvestor);
                            }
                            else
                            {
                                Business.Market.InvestorList[n].CommandList = new List<OpenTrade>();
                                Business.Market.InvestorList[n].CommandList.Add(newOpenTradeInvestor);
                            }

                            break;
                        }
                    }
                }
                #endregion

                #region Build Instance Open Trade For Symbol
                Business.OpenTrade newOpenTradeSymbol = new OpenTrade();
                newOpenTradeSymbol.ID = Result;
                newOpenTradeSymbol.ClientCode = Command.ClientCode;
                newOpenTradeSymbol.ClosePrice = Command.ClosePrice;
                newOpenTradeSymbol.CloseTime = Command.CloseTime;
                newOpenTradeSymbol.CommandCode = CommandCode;
                newOpenTradeSymbol.Commission = Command.Commission;
                newOpenTradeSymbol.ExpTime = Command.ExpTime;                
                newOpenTradeSymbol.Investor = Command.Investor;
                newOpenTradeSymbol.IsClose = false;
                newOpenTradeSymbol.OpenPrice = Command.OpenPrice;
                newOpenTradeSymbol.OpenTime = Command.OpenTime;
                newOpenTradeSymbol.Profit = Command.Profit;
                newOpenTradeSymbol.Size = Command.Size;
                newOpenTradeSymbol.StopLoss = Command.StopLoss;
                newOpenTradeSymbol.Swap = Command.Swap;
                newOpenTradeSymbol.Symbol = Command.Symbol;
                newOpenTradeSymbol.TakeProfit = Command.TakeProfit;
                newOpenTradeSymbol.Type = new TradeType();
                newOpenTradeSymbol.Type.ID = Command.Type.ID;
                newOpenTradeSymbol.Type.Name = Command.Type.Name;                
                newOpenTradeSymbol.Margin = Command.Margin;
                newOpenTradeSymbol.IGroupSecurity = Command.IGroupSecurity;
                newOpenTradeSymbol.Commission = Command.Commission;
                newOpenTradeSymbol.IsHedged = Command.IsHedged;
                newOpenTradeSymbol.SpreaDifferenceInOpenTrade = spreaDifferenceInCommand;
                newOpenTradeSymbol.AgentCommission = Command.AgentCommission;
                #endregion

                #region Find Symbol In Market And Add Command To Market Area And List Symbol
                //Find Symbol In Market And Add Command To Market Area And List Symbol
                if (Business.Market.SymbolList != null)
                {
                    int countSymbol = Business.Market.SymbolList.Count;
                    for (int i = 0; i < countSymbol; i++)
                    {
                        if (Business.Market.SymbolList[i].SymbolID == newOpenTradeSymbol.Symbol.SymbolID)
                        {
                            if (Business.Market.SymbolList[i].CommandList != null)
                            {
                                Business.Market.SymbolList[i].CommandList.Add(newOpenTradeSymbol);
                            }
                            else
                            {
                                Business.Market.SymbolList[i].CommandList = new List<OpenTrade>();
                                Business.Market.SymbolList[i].CommandList.Add(newOpenTradeSymbol);
                            }
                            break;
                        }
                    }
                }
                #endregion

                #region Build Instance Open Trade For Command Executor
                Business.OpenTrade newOpenTradeExe = new OpenTrade();
                newOpenTradeExe.ID = Result;
                newOpenTradeExe.ClientCode = Command.ClientCode;
                newOpenTradeExe.ClosePrice = Command.ClosePrice;
                newOpenTradeExe.CloseTime = Command.CloseTime;
                newOpenTradeExe.CommandCode = CommandCode;
                newOpenTradeExe.Commission = Command.Commission;
                newOpenTradeExe.ExpTime = Command.ExpTime;                
                newOpenTradeExe.Investor = Command.Investor;
                newOpenTradeExe.IsClose = false;
                newOpenTradeExe.OpenPrice = Command.OpenPrice;
                newOpenTradeExe.OpenTime = Command.OpenTime;
                newOpenTradeExe.Profit = Command.Profit;
                newOpenTradeExe.Size = Command.Size;
                newOpenTradeExe.StopLoss = Command.StopLoss;
                newOpenTradeExe.Swap = Command.Swap;
                newOpenTradeExe.Symbol = Command.Symbol;
                newOpenTradeExe.TakeProfit = Command.TakeProfit;
                newOpenTradeExe.Type = new TradeType();
                newOpenTradeExe.Type.ID = Command.Type.ID;
                newOpenTradeExe.Type.Name = Command.Type.Name;                
                newOpenTradeExe.Margin = Command.Margin;
                newOpenTradeExe.IGroupSecurity = Command.IGroupSecurity;
                newOpenTradeExe.Commission = Command.Commission;
                newOpenTradeExe.IsHedged = Command.IsHedged;
                newOpenTradeExe.SpreaDifferenceInOpenTrade = spreaDifferenceInCommand;
                newOpenTradeExe.AgentCommission = Command.AgentCommission;
                #endregion

                Business.Market.CommandExecutor.Add(newOpenTradeExe);

                //If Client Add New Command Complete Then Add Message To Client Queue
                if (Command.Investor.ClientCommandQueue == null)
                    Command.Investor.ClientCommandQueue = new List<string>();

                #region Map Command Server To Client
                if (Command.IsServer)
                {
                    string Message = "AddCommandByManager$True,Add New Command Complete," + Result + "," + 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 + "," +
                           CommandType + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + CommandCode + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Open";

                    if (Command.Investor.ClientCommandQueue == null)
                        Command.Investor.ClientCommandQueue = new List<string>();

                    Command.Investor.ClientCommandQueue.Add(Message);
                }
                else
                {
                    string Message = "AddCommand$True,Add New Command Complete," + Result + "," + 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 + "," +
                            CommandType + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + CommandCode + "," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Open";

                    if (Command.Investor.ClientCommandQueue == null)
                        Command.Investor.ClientCommandQueue = new List<string>();

                    Command.Investor.ClientCommandQueue.Add(Message);
                }
                #endregion

                Command.IsHedged = Command.Symbol.IsHedged;

                //Command.Investor.UpdateCommand(Command);
                Business.Margin newMargin = new Margin();
                newMargin = Command.Symbol.CalculationTotalMargin(Command.Investor.CommandList);
                Command.Investor.Margin = newMargin.TotalMargin;
                Command.Investor.FreezeMargin = newMargin.TotalFreezeMargin;

                //Business.RequestDealer Request = new RequestDealer();
                //NOTIFY INVESTOR TO MANAGER
                TradingServer.Facade.FacadeSendNotifyManagerRequest(3, Command.Investor);

                //SEND NOTIFY TO MANAGER THEN ADD NEW ACCOUNT
                TradingServer.Facade.FacadeSendNoticeManagerRequest(1, Command);
                #endregion

                #region INSERT SYSTEM LOG IF MAKE FUTURE COMMAND COMPLETE
                content = "'" + Command.Investor.Code + "': future order #" + CommandCode + " " + mode + " " + size + " " + Command.Symbol.Name + " at " + openPrice + " commission: " + Command.Commission;
                TradingServer.Facade.FacadeAddNewSystemLog(5, content, comment, Command.Investor.IpAddress, Command.Investor.Code);
                #endregion                
            }
            else
            {
                #region Return Error Can't Insert Command To Database For Client
                //Add Result To Client Command Queue Of Investor
                string Message = "AddCommand$False,Can't Insert Database," + Result + "," + 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 + "," +
                        CommandType + "," + 1 + "," + Command.ExpTime + "," + Command.ClientCode + "," + "0000000," + Command.IsHedged + "," + Command.Type.ID + "," + Command.Margin + ",Open";

                if (Command.Investor.ClientCommandQueue == null)
                    Command.Investor.ClientCommandQueue = new List<string>();

                Command.Investor.ClientCommandQueue.Add(Message);
                #endregion
            }   
        }