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(); }
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); }