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>");
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }