public AccountSummary[] ProvideAccountSummaries()
        {
            List <AccountSummary> accountSummaries = new List <AccountSummary>();

            AccountPortfolio[] portfolios = m_positionMonitor.GetAllAccountPortfolios();
            if (portfolios != null)
            {
                foreach (AccountPortfolio positionMonitorPortfolio in portfolios)
                {
                    Portfolio      portfolio      = BuildPortfolio(positionMonitorPortfolio, false);
                    AccountSummary accountSummary = new AccountSummary()
                    {
                        AccountName     = portfolio.AccountName,
                        MinDelta        = portfolio.AccountData.MinDelta,
                        MaxDelta        = portfolio.AccountData.MaxDelta,
                        TargetDelta     = portfolio.AccountData.TargetDelta,
                        NextTradeTime   = portfolio.AccountData.NextTradeTime,
                        OptionPandL     = portfolio.AccountData.OptionPandL,
                        StockPandL      = portfolio.AccountData.StockPandL,
                        FuturesPandL    = portfolio.AccountData.FuturesPandL,
                        TotalPandL      = portfolio.AccountData.TotalPandL,
                        Benchmark       = portfolio.AccountData.Benchmark,
                        PutsOutOfBounds = portfolio.AccountData.PutsOutOfBounds,
                        TradingComplete = portfolio.AccountData.TradingComplete,
                    };
                    if (portfolio.AccountData.StartOfDayEquity > 0)
                    {
                        accountSummary.ReturnOnEquity = accountSummary.TotalPandL / portfolio.AccountData.StartOfDayEquity;
                        accountSummary.GrossReturnMTD = Math.Exp(positionMonitorPortfolio.Data.LogGrossReturn_MTD + Math.Log(accountSummary.ReturnOnEquity + 1)) - 1;
                        accountSummary.NetReturnMTD   = Math.Exp(positionMonitorPortfolio.Data.LogNetReturn_MTD + Math.Log(accountSummary.ReturnOnEquity + 1)) - 1;
                    }
                    if (portfolio.Benchmark != null)
                    {
                        if (portfolio.Benchmark.PrevClose != 0)
                        {
                            accountSummary.BenchmarkReturn    = portfolio.Benchmark.LastPrice / portfolio.Benchmark.PrevClose - 1;
                            accountSummary.BenchmarkReturnMTD = Math.Exp(positionMonitorPortfolio.Data.BenchmarkLogReturn_MTD + Math.Log(accountSummary.BenchmarkReturn.Value + 1)) - 1;
                        }
                    }

                    if (portfolio.Indices.Length > 0)
                    {
                        Index totalRow = portfolio.Indices[portfolio.Indices.Length - 1];
                        accountSummary.TotalDeltaPct = totalRow.TotalDeltaPct;
                        accountSummary.PutsToTrade   = totalRow.PutsToTrade;
                        if (totalRow.PrevClose != 0)
                        {
                            accountSummary.TargetReturn = totalRow.LastPrice / totalRow.PrevClose - 1;
                        }
                    }

                    accountSummaries.Add(accountSummary);
                }
            }

            return(accountSummaries.ToArray());
        }
        private void buttonStart_Click(object sender, EventArgs e)
        {
            buttonStart.Enabled = false;

            if (m_utilities.StartMonitor())
            {
                comboBoxAccount.DataSource    = m_utilities.GetAllAccountPortfolios();
                comboBoxAccount.DisplayMember = "AccountName";

                foreach (AccountPortfolio account in comboBoxAccount.Items)
                {
                    account.OnRefresh += Account_OnRefresh;
                }
            }

            EnableControls();
        }
Beispiel #3
0
        public bool Run()
        {
            m_bTaskFailed = true;
            try
            {
                // initialize logging
                log4net.Config.XmlConfigurator.Configure();
                TaskUtilities.OnInfo               += new LoggingEventHandler(Utilities_OnInfo);
                TaskUtilities.OnError              += new LoggingEventHandler(Utilities_OnError);
                LoggingUtilities.OnInfo            += new LoggingEventHandler(Utilities_OnDebug); // SQL Commands go to Debug log
                LoggingUtilities.OnError           += new LoggingEventHandler(Utilities_OnError);
                m_positionMonitor.OnInfo           += new LoggingEventHandler(Utilities_OnInfo);
                m_positionMonitor.OnError          += new LoggingEventHandler(Utilities_OnError);
                m_positionMonitor.OnDebug          += new LoggingEventHandler(Utilities_OnDebug);
                m_positionMonitor.OnMonitorStopped += new ServiceStoppedEventHandler(Utilities_OnMonitorStopped);

                if (Initialize())
                {
                    using (var serviceHost = new ServiceHost(typeof(SentoniService)))
                    {
                        m_positionMonitor.QuoteServerHost = m_parms.QuoteServerHost.Trim();
                        m_positionMonitor.QuoteServerPort = m_parms.QuoteServerPort;
                        m_positionMonitor.RefreshMs       = m_parms.RefreshMs;
                        m_positionMonitor.AccountLimit    = m_parms.AccountLimit;

                        if (m_positionMonitor.StartMonitor())
                        {
                            bool quoteServerIsUp = m_positionMonitor.IsUsingQuoteFeed;
                            foreach (AccountPortfolio account in m_positionMonitor.GetAllAccountPortfolios())
                            {
                                OnInfo("Starting account " + account.AccountName);
                                account.Start();

                                // connect to quote server - if is down, don't bother trying with subsequent accounts
                                if (quoteServerIsUp)
                                {
                                    quoteServerIsUp = account.StartSubscriber();
                                }
                            }

                            var dataProvider = new DataProvider(m_positionMonitor, this);
                            SentoniService.Provider            = dataProvider;
                            m_positionMonitor.SnapshotProvider = dataProvider;
                            serviceHost.Open();
                            OnInfo("Host started");

                            m_bTaskFailed = false;  // set up was successful - we now wait for the timer to expire or for a post from an event handler
                            m_bWaiting    = true;
                            bool timedOut = WaitForCompletion();
                            m_bWaiting = false;

                            serviceHost.Close();
                            OnInfo("Host closed");
                            m_bTaskFailed = false;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                m_bTaskFailed = true;
                OnError("Error in Run method", ex, true);
            }
            finally
            {
                m_positionMonitor.StopMonitor();

                if (m_bTaskStarted)
                {
                    m_bTaskStarted = !EndTask(m_parms.TaskName, !m_bTaskFailed);
                }
            }
            return(!m_bTaskFailed);
        }