/// <summary>
 /// Add Group, Update Group, Add Symbol, Update Symbol
 /// </summary>
 internal void UpdateGroupVirtualDealerOnline()
 {
     List<IVirtualDealer> iVirtualDealers = new List<Business.IVirtualDealer>();
     List<int> itemGroup = TradingServer.Facade.FacadeMakeListIAgentGroupManager(this.GroupCondition);
     for (int i = 0; i < itemGroup.Count; i++)
     {
         IVirtualDealer iVirtualDealer = new IVirtualDealer();
         iVirtualDealer.SymbolID = -1;
         iVirtualDealer.InvestorGroupID = itemGroup[i];
         iVirtualDealers.Add(iVirtualDealer);
     }
     List<int> itemSymbol = TradingServer.Facade.FacadeMakeListSymbolIDManager(this.SymbolCondition);
     for (int i = 0; i < itemSymbol.Count; i++)
     {
         IVirtualDealer iVirtualDealer = new IVirtualDealer();
         iVirtualDealer.SymbolID = itemSymbol[i];
         iVirtualDealer.InvestorGroupID = -1;
         iVirtualDealers.Add(iVirtualDealer);
     }
     bool check = false;
     if (this.IVirtualDealer.Count != iVirtualDealers.Count)
     {
         check = true;
     }
     else
     {
         for (int i = this.IVirtualDealer.Count - 1; i >= 0; i--)
         {
             if (iVirtualDealers[i].InvestorGroupID != this.IVirtualDealer[i].InvestorGroupID ||
                 iVirtualDealers[i].SymbolID != this.IVirtualDealer[i].SymbolID)
             {
                 check = true;
                 break;
             }
         }
     }
     if (check)
     {
         this.IVirtualDealer = iVirtualDealers;
         string result = VirtualDealer.DBWAgentInstance.UpdateVirtualSymbol(this);
         int id;
         int.TryParse(result, out id);
         if (id <= 0)
         {
             TradingServer.Facade.FacadeAddNewSystemLog(1, "Robot Dealer update filter Group or Symbol failed", "Error", "123", "");
         }
     }
 }
        /// <summary>
        /// map virtual dealer object from string
        /// </summary>
        /// <param name="para">ID}Name}Description}Delay}BeginVolume}EndVolume}ProfitMaxVolume}ProfitMaxPip}LossMaxVolume}LossMaxPip}groupID]syID1[syID2[syID3|groupID]syID1[syID2[syID3</param>
        /// <returns></returns>
        internal string MapDealer(string para)
        {
            int numInt;
            double numDouble;
            bool checkIs;
            string[] value = para.Split('}');
            if (value.Length != 15)
            {
                return "parameter wrong";
            }

            if (!int.TryParse(value[0], out numInt))
            {
                return "ID invalid";
            }
            this.ID = numInt;

            if (string.IsNullOrEmpty(value[1]))
            {
                return "Name invalid";
            }
            this.Name = value[1];

            if (!int.TryParse(value[2], out numInt))
            {
                return "Delay value invalid";
            }
            this.Delay = numInt;

            if (!double.TryParse(value[3], out numDouble))
            {
                return "Begin volume value invalid";
            }
            this.StartVolume = numDouble;

            if (!double.TryParse(value[4], out numDouble))
            {
                return "End volume value invalid";
            }
            this.EndVolume = numDouble;

            if (!int.TryParse(value[5], out numInt))
            {
                return "Mode invalid";
            }
            this.Mode = numInt;

            if (!double.TryParse(value[6], out numDouble))
            {
                return "Profit max pip valud invalid";
            }
            this.ProfitMaxPip = numDouble;

            if (!double.TryParse(value[7], out numDouble))
            {
                return "Loss max pip invalid";
            }
            this.LossMaxPip = numDouble;

            if (!double.TryParse(value[8], out numDouble))
            {
                return "Additional pip invalid";
            }
            this.AdditionalPip = numDouble;

            if (!bool.TryParse(value[9], out checkIs))
            {
                return "IsEnable invalid";
            }
            this.IsEnable = checkIs;

            if (!bool.TryParse(value[10], out checkIs))
            {
                return "IsStopSlippage invalid";
            }
            this.IsStopSlippage = checkIs;

            if (!bool.TryParse(value[11], out checkIs))
            {
                return "IsLimitAuto invalid";
            }
            this.IsLimitAuto = checkIs;

            if (!bool.TryParse(value[12], out checkIs))
            {
                return "IsStopAuto invalid";
            }
            this.IsStopAuto = checkIs;
            this.GroupCondition = value[13];
            List<int> itemGroup = TradingServer.Facade.FacadeMakeListIAgentGroupManager(this.GroupCondition);
            for (int i = 0; i < itemGroup.Count; i++)
            {
                IVirtualDealer iVirtualDealer = new IVirtualDealer();
                iVirtualDealer.SymbolID = -1;
                iVirtualDealer.InvestorGroupID = itemGroup[i];
                this.IVirtualDealer.Add(iVirtualDealer);
            }

            this.SymbolCondition = value[14];
            List<int> itemSymbol = TradingServer.Facade.FacadeMakeListSymbolIDManager(this.SymbolCondition);
            for (int i = 0; i < itemSymbol.Count; i++)
            {
                IVirtualDealer iVirtualDealer = new IVirtualDealer();
                iVirtualDealer.SymbolID = itemSymbol[i];
                iVirtualDealer.InvestorGroupID = -1;
                this.IVirtualDealer.Add(iVirtualDealer);
            }

            return "1";
        }