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