public void BuildReport(StringBuilder sb) { sb.AppendLine(" <br/> <h3>Торговля</h3>"); sb.AppendLine(" <br/> <table class=\"lightTable\">"); sb.AppendLine(AccountTrades.RenderCaption()); // получить количество открытых / закрытых по счетам сделок за указанное количество дней var records = new List<AccountTrades>(); foreach (var account in RobotFarm.Instance.Accounts.OrderBy(a => a.AccountId)) { var record = MakeAccountTradesRecord(account); records.Add(record); sb.AppendLine(record.ToString()); } var sumRecord = new AccountTrades { AccountTitle = "- Суммарно -", ClosedTrades = records.Sum(r => r.ClosedTrades), OpenedTrades = records.Sum(r => r.OpenedTrades), ClosedVolumeDepo = records.Sum(r => r.ClosedVolumeDepo), Exposure = records.Sum(r => r.Exposure), OpenProfit = records.Sum(r => r.OpenProfit), }; sumRecord.LastOpen = records.Count == 0 ? DateTime.MinValue : records.Max(r => r.LastOpen ?? DateTime.MinValue); if (sumRecord.LastOpen == DateTime.MinValue) sumRecord.LastOpen = null; sb.AppendLine(sumRecord.ToString()); sb.AppendLine(" </table>"); }
private AccountTrades MakeAccountTradesRecord(FarmAccount account) { var record = new AccountTrades { AccountTitle = "#" + account.AccountId + " / " + account.UserLogin }; var context = account.GetContext(); if (context == null) { return new AccountTrades { ErrorMessage = "контекст не создан" } } ; var ordersClosed = GetAccountHistoryOrders(account) ?? new List <MarketOrder>(); record.ClosedTrades = ordersClosed.Count; var errors = new List <string>(); var quotes = QuoteStorage.Instance.ReceiveAllData(); record.ClosedVolumeDepo = DalSpot.Instance.CalculateExposure(ordersClosed, quotes, context.AccountInfo.Currency, errors); var ordersOpened = GetAccountOpenedOrders(account); record.OpenedTrades = ordersOpened.Count; record.Exposure = DalSpot.Instance.CalculateExposure(ordersOpened, quotes, context.AccountInfo.Currency, errors); record.OpenProfit = (decimal)DalSpot.Instance.CalculateOpenedPositionsCurrentResult(ordersOpened, quotes, context.AccountInfo.Currency); var lastClosedEnter = ordersClosed.Count > 0 ? ordersClosed.Max(o => o.TimeEnter) : DateTime.MinValue; var lastOpenEnter = ordersOpened.Count > 0 ? ordersOpened.Max(o => o.TimeEnter) : DateTime.MinValue; var maxEnterTime = lastClosedEnter > lastOpenEnter ? lastClosedEnter : lastOpenEnter; record.LastOpen = maxEnterTime == DateTime.MinValue ? (DateTime?)null : maxEnterTime; return(record); }
public void BuildReport(StringBuilder sb) { sb.AppendLine(" <br/> <h3>Торговля</h3>"); sb.AppendLine(" <br/> <table class=\"lightTable\">"); sb.AppendLine(AccountTrades.RenderCaption()); // получить количество открытых / закрытых по счетам сделок за указанное количество дней var records = new List <AccountTrades>(); foreach (var account in RobotFarm.Instance.Accounts.OrderBy(a => a.AccountId)) { var record = MakeAccountTradesRecord(account); records.Add(record); sb.AppendLine(record.ToString()); } var sumRecord = new AccountTrades { AccountTitle = "- Суммарно -", ClosedTrades = records.Sum(r => r.ClosedTrades), OpenedTrades = records.Sum(r => r.OpenedTrades), ClosedVolumeDepo = records.Sum(r => r.ClosedVolumeDepo), Exposure = records.Sum(r => r.Exposure), OpenProfit = records.Sum(r => r.OpenProfit), }; sumRecord.LastOpen = records.Count == 0 ? DateTime.MinValue : records.Max(r => r.LastOpen ?? DateTime.MinValue); if (sumRecord.LastOpen == DateTime.MinValue) { sumRecord.LastOpen = null; } sb.AppendLine(sumRecord.ToString()); sb.AppendLine(" </table>"); }
private AccountTrades MakeAccountTradesRecord(FarmAccount account) { var record = new AccountTrades { AccountTitle = "#" + account.AccountId + " / " + account.UserLogin }; var context = account.GetContext(); if (context == null) return new AccountTrades { ErrorMessage = "контекст не создан" }; var ordersClosed = GetAccountHistoryOrders(account) ?? new List<MarketOrder>(); record.ClosedTrades = ordersClosed.Count; var errors = new List<string>(); var quotes = QuoteStorage.Instance.ReceiveAllData(); record.ClosedVolumeDepo = DalSpot.Instance.CalculateExposure(ordersClosed, quotes, context.AccountInfo.Currency, errors); var ordersOpened = GetAccountOpenedOrders(account); record.OpenedTrades = ordersOpened.Count; record.Exposure = DalSpot.Instance.CalculateExposure(ordersOpened, quotes, context.AccountInfo.Currency, errors); record.OpenProfit = (decimal) DalSpot.Instance.CalculateOpenedPositionsCurrentResult(ordersOpened, quotes, context.AccountInfo.Currency); var lastClosedEnter = ordersClosed.Count > 0 ? ordersClosed.Max(o => o.TimeEnter) : DateTime.MinValue; var lastOpenEnter = ordersOpened.Count > 0 ? ordersOpened.Max(o => o.TimeEnter) : DateTime.MinValue; var maxEnterTime = lastClosedEnter > lastOpenEnter ? lastClosedEnter : lastOpenEnter; record.LastOpen = maxEnterTime == DateTime.MinValue ? (DateTime?) null : maxEnterTime; return record; }