/// <summary>
        /// Завершение асинхронной загрузки данных статистики с сервера
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void WorkerRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (Parent == null) return;

            var userInfoExSource = new UserInfoExCache(TradeSharpAccountStatistics.Instance.proxy);
            var userInfo = userInfoExSource.GetUserInfo(Performer.UserId);
            if (userInfo != null)
            {
                photoPanel.BackgroundImageLayout = ImageLayout.Center;
                photoPanel.BackgroundImage = userInfo.AvatarBig;
                ContactListUtils.UnpackContacts(userInfo.Contacts, contactsList);
                aboutRichTextBox.Text = userInfo.About;
            }

            if (Efficiency == null)
            {
                profit1000tabPage.Enabled = false;
                profitTabPage.Enabled = false;
                openedDealsTabPage.Enabled = false;
                currenciesTabPage.Enabled = false;
                if (DataBindCompleted != null)
                    DataBindCompleted();
                return;
            }

            // суммарная статистика
            BindSummaryStatistics(gridSummaryStat, Performer, Efficiency, true);
            gridSummaryStat.CheckSize(true);
            var height = gridSummaryStat.CellHeight * gridSummaryStat.rows.Count + 1;
            gridSummaryStat.Height = height;
            summaryStatPanel.MinimumSize = new Size(0, (IsSubscribed ? 30 : 60) + height);

            // обычная статистика
            RebindStatisticsFastGrid(singleParametersFastGrid, Performer, null);
            singleParametersFastGrid.CheckSize(true);

            // подписать стоимость сигналов
            lblFee.Text = Performer.FeeUSD <= 0
                              ? Localizer.GetString("TitleFree")
                              : Performer.FeeUSD.ToStringUniformMoneyFormat() + " / " +
                                PaidService.GetMonthFeeFromDailyFee(Performer.FeeUSD).ToStringUniformMoneyFormat() +
                                " USD";
            lblFee.ForeColor = Performer.FeeUSD <= 0 ? SystemColors.ControlText : Color.Blue;

            // график доходности
            chartProfit.Graphs[0].Series[0].Clear();
            chartProfit.Graphs[0].Series[1].Clear();
            if (Efficiency.listEquity != null)
            {
                foreach (var pt in Efficiency.listEquity)
                    chartProfit.Graphs[0].Series[0].Add(new TimeBalans(pt.time, pt.equity));
                var hwm = GetHighWaterMarks(Efficiency.listEquity, Efficiency.listTransaction);
                foreach (var pt in hwm)
                    chartProfit.Graphs[0].Series[1].Add(new TimeBalans(pt.time, pt.equity));
            }
            chartProfit.Initialize();

            // график доходности на 1000
            chartProfit1000.Graphs[0].Series[0].Clear();
            chartProfit1000.Graphs[0].Series[1].Clear();
            if (Efficiency.listProfit1000 != null)
            {
                foreach (var pt in Efficiency.listProfit1000)
                    chartProfit1000.Graphs[0].Series[0].Add(new TimeBalans(pt.time, pt.equity));
                var hwm = GetHighWaterMarks(Efficiency.listProfit1000);
                foreach (var pt in hwm)
                    chartProfit1000.Graphs[0].Series[1].Add(new TimeBalans(pt.time, pt.equity));
            }
            chartProfit1000.Initialize();

            // таблицы сделок
            if (Efficiency != null && Efficiency.openedDeals != null)
                BindDeals(true);

            if (Parent == null) return;
            try
            {
                var blank = new DealCountBySymbol();
                chartCountByTicker.Series[0].Points.DataBind(GetDealCountBySymbol(Efficiency),
                                                             blank.Property(p => p.Title),
                                                             blank.Property(p => p.DealCount), null);
            }
            catch (Exception ex)
            {
                Logger.Info("PerformerStatistics.WorkerRunWorkerCompleted: error binding GetDealCountBySymbol to chart", ex);
                return;
            }

            // "Совокупные позиции"
            if (Efficiency != null)
                BindSummaryPositions(Efficiency, tickersAndVolumesBarControl);

            // прочие визуальные параметры
            txtSignalTitle.Text = SignalTitle;
            subscribeButton.Text = SubscriptionButtonTitle;
            btnInvest.Visible = !IsSubscribed;

            if (DataBindCompleted != null)
                DataBindCompleted();
        }
        private void ClosedOrdersWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            efficiency.closedDeals = (List<MarketOrder>) e.Result;
            if (efficiency.closedDeals == null)
                return;
            var closedDeals = efficiency.closedDeals.ToList();
            // суммарная закрытая сделка
            MarketOrder sumClosed = null;
            if (closedDeals.Count > 0)
            {
                var sumVolume = closedDeals.Sum(d => d.Volume * d.Side);
                sumClosed = new MarketOrder
                {
                    Symbol = "Сумм",
                    Volume = Math.Abs(sumVolume),
                    Side = Math.Sign(sumVolume),
                    ResultDepo = closedDeals.Sum(d => d.ResultDepo),
                    TimeEnter = closedDeals.Min(d => d.TimeEnter)
                };
                closedDeals.Add(sumClosed);
            }
            closedOrdersFastGrid.DataBind(closedDeals);
            if (sumClosed != null)
            {
                var lastRow = closedOrdersFastGrid.rows.First(r => r.ValueObject == sumClosed);
                lastRow.anchor = FastRow.AnchorPosition.AnchorBottom;
            }

            closedOrdersLoaded = true;
            closedOrdersStandByControl.IsShown = false;
            closedOrdersStandByControl.Hide();
            closedOrdersFastGrid.Show();

            // обновляем статистику
            RebindStatisticsGrid();

            // статистика по валютам
            try
            {
                // ReSharper disable AssignNullToNotNullAttribute
                var blank = new DealCountBySymbol();
                countByTickerChart.Series[0].Points.DataBind(PerformerStatistic.GetDealCountBySymbol(efficiency),
                                                             blank.Property(p => p.Title),
                                                             blank.Property(p => p.DealCount), null);
                // ReSharper restore AssignNullToNotNullAttribute
            }
            catch
            {
            }
            countByTickerStandByControl.IsShown = false;
            countByTickerStandByControl.Hide();
            countByTickerChart.Show();

            // строим диаграмму
            CreateDiagram();

            profitByMonthStandByControl.IsShown = false;
            profitByMonthStandByControl.Hide();
            profitByMonthChart.Show();

            if (ClosedDealsLoaded != null)
                ClosedDealsLoaded(this, new EventArgs());
        }