public TickerExchangeWebInfo Clone()
        {
            TickerExchangeWebInfo info = (TickerExchangeWebInfo)MemberwiseClone();

            info.Reader   = null;
            info.Document = null;
            return(info);
        }
        protected void UpdateTickers()
        {
            Exchange ex = Exchange.Get(ExchangeType.Tinkoff);

            if (!ex.Connect())
            {
                return;
            }
            if (!ex.IsInitialized)
            {
                ex.InitializedChanged += OnExchangeInitialized;
                return;
            }

            if (WebTickers == null)
            {
                return;
            }
            try {
                Tickers.Clear();
                ex.Tickers.ForEach(t => {
                    TickerExchangeWebInfo nyse = WebTickers.Tickers.FirstOrDefault(n => (n.Exchange == "NYSE" || n.Exchange == "NASDAQ") && n.Ticker == t.Name);
                    if (nyse != null)
                    {
                        TickerExchangeWebInfo xetra = WebTickers.Tickers.FirstOrDefault(n => n.Exchange == "Xetra" && n.Ticker == t.Name);
                        TinkoffGapScannerInfo info  = new TinkoffGapScannerInfo();
                        info.NyseTicker             = nyse;
                        info.XetraTicker            = xetra;
                        info.TinkoffTicker          = (TinknoffInvestTicker)t;
                        Tickers.Add(info);
                        info.Updated += TickerUpdated;
                    }
                });
            }
            catch (Exception) {
            }
            finally {
                BeginInvoke(new MethodInvoker(() => {
                    this.gridControl1.DataSource = Tickers;
                    this.gridControl1.RefreshDataSource();
                }));
            }
        }
        public void AssignFrom(TickerExchangeWebInfo info)
        {
            this.Marked             = info.Marked;
            this.Exchange           = info.Exchange;
            this.WebPage            = info.WebPage;
            this.XpTicker           = info.XpTicker;
            this.XpClosePrice       = info.XpClosePrice;
            this.XpPreMarketPrice   = info.XpPreMarketPrice;
            this.XpAfterMarketPrice = info.XpAfterMarketPrice;
            this.XpCurrentPrice     = info.XpCurrentPrice;

            this.Ticker           = info.Ticker;
            this.ClosePrice       = info.ClosePrice;
            this.PreMarketPrice   = info.PreMarketPrice;
            this.AfterMarketPrice = info.AfterMarketPrice;
            this.CurrentPrice     = info.CurrentPrice;

            this.Error          = info.Error;
            this.LastUpdateTime = info.LastUpdateTime;
            this.Text           = info.Text;
        }