public void Initialize(Action closeHandler,
            TradeSharpServerTrade serverProxyAccount,
            Action<TradeSignalUpdate> signalUpdateSelected,
            Func<Account> getActualAccountData,
            Func<string> getUserLogin,
            Action<PerformerStat> investInPAMM,
            SavePerformersGridSelectedColumnsDel savePerformersGridSelectedColumns,
            LoadPerformersGridSelectedColumnsDel loadPerformersGridSelectedColumns,
            Func<ActionOnSignal> getActionOnSignal,
            Action<ActionOnSignal> setActionOnSignal,
            ChatControlBackEnd chat)
        {
            var gr = CreateGraphics();

            this.closeHandler = closeHandler;
            this.chat = chat;
            AccountModel.Instance.Initialize(getActualAccountData, getUserLogin, investInPAMM, serverProxyAccount.proxy, chat);
            SubscriptionModel.Instance.getActionOnSignal = getActionOnSignal;
            SubscriptionModel.Instance.setActionOnSignal = setActionOnSignal;
            subscriptionGrid.ShowTopPortfolio += portfolio =>
                {
                    LoadPortfolioSubscribers(portfolio);
                    Page = ActivePage.Performers;
                };

            // strategies
            var criterias = PerformerCriteriaFunctionCollection.Instance.criterias;
            var criteriaTitles = criterias.Select(c => c.Description).ToList();
            criteriaComboBox.Items.AddRange(criteriaTitles.Select(c => c as object).ToArray());
            criteriaComboBox.DropDownWidth = criteriaTitles.Max(c => gr.MeasureString(c, Font).ToSize().Width);
            criteriaComboBox.Width = criteriaComboBox.DropDownWidth + SystemInformation.VerticalScrollBarWidth;

            var indexInCombo = countComboBox.Items.Cast<string>().IndexOf("50");
            countComboBox.SelectedIndex = indexInCombo < 0 ? 0 : indexInCombo;

            sortOrderComboBox.Items.AddRange(EnumItem<PerformerSortOrder>.items.Cast<object>().ToArray());

            SetupSortCombos(gr);

            criteriaComboBox.SelectedIndex = criterias.IndexOf(PerformerCriteriaFunctionCollection.Instance.SelectedFunction);

            //topFilterControl.SortOrder = sortOrderComboBox.SelectedIndex == 0 ? SortOrder.Ascending : SortOrder.Descending;
            topFilterControl.PerformerCriteriaFunctionCollectionChanged += OnPerformerCriteriaFunctionCollectionChanged;
            topFilterControl.PerformerCriteriaFunctionChanged += OnPerformerCriteriaFunctionChanged;
            topFilterControl.CollapseButtonClicked += CollapseTopFilterControlButtonClick;
            topFilterControl.RefreshButtonClicked += RefreshButtonClick;
            topFilterControl.CreatePortfolioButtonClicked += CreatePortfolioButtonClick;

            IsExtendedPanelVisible = false;

            performersWorker.DoWork += GetPerformers;
            performersWorker.RunWorkerCompleted += GetPerformersCompleted;

            performerFilterWorker.DoWork += GetPerformersByFilters;
            performerFilterWorker.RunWorkerCompleted += GetPerformersByFiltersCompleted;

            // 4 refresh button
            refreshButtonColors = new[]
                {
                    refreshButton.BackColor,
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.8f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                    refreshButton.BackColor,
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.2f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                    HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f)
                };
            topFilterControl.RefreshButtonEnabled = false;
            refreshButton.Enabled = false;

            performerGridCtrl.LoadPerformersGridSelectedColumns = loadPerformersGridSelectedColumns;
            performerGridCtrl.SavePerformersGridSelectedColumns = savePerformersGridSelectedColumns;
            performerGridCtrl.EnterRoomRequested += OnEnterRoomRequested;
            performerGridCtrl.PageTargeted += page => Page = page;
            performerGridCtrl.SetupGrid();

            signalFastGrid.SignalUpdateSelected += signalUpdateSelected;

            // company top portfolios
            portfoliosWorker.DoWork += GetPortfoloios;
            portfoliosWorker.RunWorkerCompleted += GetPortfoloiosCompleted;

            // my top
            myPortfoliosWorker.DoWork += GetMyPortfolio;
            myPortfoliosWorker.RunWorkerCompleted += GetMyPortfolioCompleted;

            signalsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
            pammsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
        }
        public void Initialize(Action closeHandler,
                               TradeSharpServerTrade serverProxyAccount,
                               Action <TradeSignalUpdate> signalUpdateSelected,
                               Func <Account> getActualAccountData,
                               Func <string> getUserLogin,
                               Action <PerformerStat> investInPAMM,
                               SavePerformersGridSelectedColumnsDel savePerformersGridSelectedColumns,
                               LoadPerformersGridSelectedColumnsDel loadPerformersGridSelectedColumns,
                               Func <ActionOnSignal> getActionOnSignal,
                               Action <ActionOnSignal> setActionOnSignal,
                               ChatControlBackEnd chat)
        {
            var gr = CreateGraphics();

            this.closeHandler = closeHandler;
            this.chat         = chat;
            AccountModel.Instance.Initialize(getActualAccountData, getUserLogin, investInPAMM, serverProxyAccount.proxy, chat);
            SubscriptionModel.Instance.getActionOnSignal = getActionOnSignal;
            SubscriptionModel.Instance.setActionOnSignal = setActionOnSignal;
            subscriptionGrid.ShowTopPortfolio           += portfolio =>
            {
                LoadPortfolioSubscribers(portfolio);
                Page = ActivePage.Performers;
            };

            // strategies
            var criterias      = PerformerCriteriaFunctionCollection.Instance.criterias;
            var criteriaTitles = criterias.Select(c => c.Description).ToList();

            criteriaComboBox.Items.AddRange(criteriaTitles.Select(c => c as object).ToArray());
            criteriaComboBox.DropDownWidth = criteriaTitles.Max(c => gr.MeasureString(c, Font).ToSize().Width);
            criteriaComboBox.Width         = criteriaComboBox.DropDownWidth + SystemInformation.VerticalScrollBarWidth;

            var indexInCombo = countComboBox.Items.Cast <string>().IndexOf("50");

            countComboBox.SelectedIndex = indexInCombo < 0 ? 0 : indexInCombo;

            sortOrderComboBox.Items.AddRange(EnumItem <PerformerSortOrder> .items.Cast <object>().ToArray());

            SetupSortCombos(gr);

            criteriaComboBox.SelectedIndex = criterias.IndexOf(PerformerCriteriaFunctionCollection.Instance.SelectedFunction);

            //topFilterControl.SortOrder = sortOrderComboBox.SelectedIndex == 0 ? SortOrder.Ascending : SortOrder.Descending;
            topFilterControl.PerformerCriteriaFunctionCollectionChanged += OnPerformerCriteriaFunctionCollectionChanged;
            topFilterControl.PerformerCriteriaFunctionChanged           += OnPerformerCriteriaFunctionChanged;
            topFilterControl.CollapseButtonClicked        += CollapseTopFilterControlButtonClick;
            topFilterControl.RefreshButtonClicked         += RefreshButtonClick;
            topFilterControl.CreatePortfolioButtonClicked += CreatePortfolioButtonClick;

            IsExtendedPanelVisible = false;

            performersWorker.DoWork             += GetPerformers;
            performersWorker.RunWorkerCompleted += GetPerformersCompleted;

            performerFilterWorker.DoWork             += GetPerformersByFilters;
            performerFilterWorker.RunWorkerCompleted += GetPerformersByFiltersCompleted;

            // 4 refresh button
            refreshButtonColors = new[]
            {
                refreshButton.BackColor,
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.8f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.85f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 0.9f),
                refreshButton.BackColor,
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.2f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.15f),
                HslColor.AdjuctBrightness(refreshButton.BackColor, 1.1f)
            };
            topFilterControl.RefreshButtonEnabled = false;
            refreshButton.Enabled = false;

            performerGridCtrl.LoadPerformersGridSelectedColumns = loadPerformersGridSelectedColumns;
            performerGridCtrl.SavePerformersGridSelectedColumns = savePerformersGridSelectedColumns;
            performerGridCtrl.EnterRoomRequested += OnEnterRoomRequested;
            performerGridCtrl.PageTargeted       += page => Page = page;
            performerGridCtrl.SetupGrid();

            signalFastGrid.SignalUpdateSelected += signalUpdateSelected;

            // company top portfolios
            portfoliosWorker.DoWork             += GetPortfoloios;
            portfoliosWorker.RunWorkerCompleted += GetPortfoloiosCompleted;

            // my top
            myPortfoliosWorker.DoWork             += GetMyPortfolio;
            myPortfoliosWorker.RunWorkerCompleted += GetMyPortfolioCompleted;

            signalsToolStripMenuItem.CheckedChanged += ParametersContextMenuStripItemClicked;
            pammsToolStripMenuItem.CheckedChanged   += ParametersContextMenuStripItemClicked;
        }