/// <summary> /// Metoda zwracająca listę okresów notowań połączonych, jeżeli mają ten sam kierunek trendu. Metoda ta rozpoczyna wyznaczanie od parametru periodsStartDate i zmierza ku teraźniejszości. /// </summary> /// <param name="DesiredNumberOfPeriods">Oczekiwana liczba okresów.</param> /// <param name="periodsEndDate">Data będąda granicą wyznaczania kolejnych okresów.</param> /// <param name="periodsStartDate">Data początku okresów.</param> /// <param name="daysInterval">Liczba określająca długość okresu w dniach.</param> /// <returns>Lista okresów notowań połaczonych, jeżeli mają ten sam kierunek trendu.</returns> public List<ExchangePeriod> GetExchangePeriodsMergedByMovementDirectoryFromStartDate(int DesiredNumberOfPeriods, DateTime periodsEndDate, DateTime periodsStartDate, int daysInterval) { DateTime iterationDate = periodsStartDate.Date; string dataPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\data\\"; List<ExchangePeriod> periodList = new List<ExchangePeriod>(); while (periodList.Count <= DesiredNumberOfPeriods && iterationDate <= periodsEndDate) { DateTime periodEnd; if (iterationDate.AddDays(daysInterval) < periodsEndDate) { periodEnd = iterationDate.AddDays(daysInterval); } else { periodEnd = periodsEndDate.Date; } ExchangePeriod period = GetExchangePeriod(iterationDate, periodEnd); if (period != null) { if (periodList.Count != 0) { if (period.PeriodStart == periodList.Last().PeriodEnd) { period.PublicTrading -= GetExchangeDay(periodList.Last().PeriodEnd).PublicTrading; } //If percentage changes have the same sign. if ((periodList.Last().PercentageChange * period.PercentageChange) >= 0) { periodList.Last().PeriodEnd = period.PeriodEnd; periodList.Last().PublicTrading += period.PublicTrading; periodList.Last().CloseRate = period.CloseRate; } else { period.OpenRate = periodList.Last().CloseRate; periodList.Add(period); } } else { period.PublicTrading -= GetExchangeDay(period.PeriodStart).PublicTrading; periodList.Add(period); } } iterationDate = iterationDate.AddDays(daysInterval); } while (periodList.Count > DesiredNumberOfPeriods) { periodList.Remove(periodList.Last()); } return periodList; }