Пример #1
0
        /// <summary>
        /// Starts calculation and uses all transactions
        /// </summary>
        /// <param name="timeRange">The time slice which represents a time range.</param>
        /// <returns></returns>
        public IStatistic Calculate(ITimeSlice timeRange)
        {
            if (_transactions == null)
            {
                return(null);
            }

            if (!_transactions.Any())
            {
                return(null);
            }

            var result = new Statistic(timeRange);

            var transactions            = FilterTransactions(_transactions, timeRange);
            var transactionPerformances = FilterPerformances(_transactionPerformances, transactions);

            if (!transactions.Any())
            {
                return(null);
            }

            if (!transactionPerformances.Any())
            {
                return(null);
            }

            result.CalculateCosts(transactions);
            result.CalculateAmounts(transactionPerformances);
            result.CalculateFeedback(transactions);
            result.CalculateProfits(transactionPerformances, _mathCalculatorService);
            result.CalculateLosses(transactionPerformances, _mathCalculatorService);
            result.CalculateAssetClass(transactionPerformances, transactions);
            result.CalculateDailyBasis(transactions, transactionPerformances);
            result.CalculateEfficiency(transactionPerformances, transactions, _mathCalculatorService);

            return(result);
        }
Пример #2
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Statistic" /> class.
 /// </summary>
 /// <param name="slice">The slice.</param>
 public Statistic(ITimeSlice slice)
 {
     TimeSlice = slice;
     AbsoluteProfitPerWeekDay = new Dictionary <string, decimal>();
 }
Пример #3
0
 /// <summary>
 /// Equalses the specified other.
 /// </summary>
 /// <param name="other">The other.</param>
 /// <returns></returns>
 protected bool Equals(ITimeSlice other)
 {
     return(Start.Equals(other.Start) && End.Equals(other.End));
 }
Пример #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StatisticsByTimeSliceQuery"/> class.
 /// </summary>
 /// <param name="timeRange">The time range.</param>
 public StatisticsByTimeSliceQuery(ITimeSlice timeRange)
 {
     TimeRange = timeRange;
 }
Пример #5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="StatisticsByTimeSliceQuery"/> class.
 /// </summary>
 /// <param name="timeRange">The time range.</param>
 /// <param name="timeSliceTypeFilter">The slice type which should be used to filter.</param>
 public StatisticsByTimeSliceQuery(ITimeSlice timeRange, TimeSliceType timeSliceTypeFilter)
 {
     TimeRange       = timeRange;
     TimeSliceFilter = timeSliceTypeFilter;
 }
Пример #6
0
 /// <summary>
 /// Filters the transactions.
 /// </summary>
 /// <param name="transactions">The transactions.</param>
 /// <param name="timeRange">The time range.</param>
 /// <returns></returns>
 private static IReadOnlyList <ITransaction> FilterTransactions(IEnumerable <ITransaction> transactions, ITimeSlice timeRange)
 {
     return(transactions.Where(t => t.OrderDate >= timeRange.Start && t.OrderDate <= timeRange.End).ToList());
 }