public static void CalculateCpiDifferenceQuaterly()
        {
            using (ForexModel context = new ForexModel())
            {
                var ukRates = context.CpiQuaterlyRates.Where(c => c.Country == "\"GBR\"").OrderBy(y => y.Date).ToList();
                var usRates = context.CpiQuaterlyRates.Where(c => c.Country == "\"USA\"").OrderBy(y => y.Date).ToList();

                for (int i = 0; i < ukRates.Count; i++)
                {
                    CpiQuaterlyRate ukRate = ukRates[i];
                    CpiQuaterlyRate usRate = usRates[i];

                    var year   = Int32.Parse(ukRate.Date.Substring(1, 4));
                    var quater = Int32.Parse(ukRate.Date.Substring(7, 1));

                    CpiQuaterlyDifference difference = new CpiQuaterlyDifference
                    {
                        Id         = i,
                        Year       = year,
                        Quarter    = quater,
                        Difference = ukRate.Rate - usRate.Rate
                    };

                    context.CpiQuaterlyDifferences.Add(difference);
                }

                context.SaveChanges();
            }
        }
        public static void UploadAnalyticQuarterlyRecords()
        {
            using (ForexModel context = new ForexModel())
            {
                var cpiQuarterly          = context.CpiQuaterlyDifferences.ToList();
                var interestRateQuarterly = context.InterestRateQuaterlyDifferences.ToList();

                for (int i = 4; i < interestRateQuarterly.Count; i++)
                {
                    int year          = interestRateQuarterly[i].Year;
                    int quarter       = interestRateQuarterly[i].Quarter;
                    int eligibleMonth = DetermineEligibleStartMonth(quarter);
                    AnalyticQuarterlyRecord record = new AnalyticQuarterlyRecord
                    {
                        Id                     = i,
                        Year                   = year,
                        Quarter                = quarter,
                        CpiDifference          = cpiQuarterly[i].Difference,
                        CpiTendency            = CalculateTendencyForQuarterly(cpiQuarterly, year, quarter),
                        InterestRateDifference = interestRateQuarterly
                                                 .Where(c => c.Year == year && c.Quarter == quarter).Select(v => v.Difference).Single(),
                        InterestRateTendency = CalculateTendencyForQuarterly(interestRateQuarterly, year + 1, quarter),
                        TradeBalanceByUk     = context.TradeBalances.Where(c => c.Country == "UK" && c.Year == year)
                                               .Select(v => v.Balance).Single(),
                        TradeBalanceByUs = context.TradeBalances.Where(c => c.Country == "USA" && c.Year == year)
                                           .Select(v => v.Balance).Single(),
                        DebtGrowthUk = context.DebtGrowths.Where(c => c.Country == "UK" && c.Year == year)
                                       .Select(v => v.Growth)
                                       .Single(),
                        DebtGrowthUs = context.DebtGrowths.Where(c => c.Country == "USA" && c.Year == year)
                                       .Select(v => v.Growth)
                                       .Single(),
                        ForexTendency = context.GbpUsdGrowthQuaterlies
                                        .Where(y => y.Date.Year == year - 1 ||
                                               (y.Date.Year == year && y.Date.Month <= eligibleMonth))
                                        .Select(v => v.CloseGrowth).Average(),
                        Outcome = GetOutcomeLabel(context.GbpUsdGrowthQuaterlies
                                                  .Where(y => y.Date.Year == year && y.Date.Month == eligibleMonth)
                                                  .Select(v => v.CloseGrowth).Single())
                    };


                    context.AnalyticQuarterlyRecords.Add(record);
                }
                context.SaveChanges();
            }
        }
        public static void UploadAnalyticDailyRecords()
        {
            using (ForexModel context = new ForexModel())
            {
                var forexGrowths = context.GbpUsdGrowth.ToList();

                for (int i = 260; i < forexGrowths.Count; i++)
                {
                    var date    = forexGrowths[i].Date;
                    var recDate = date.AddMonths(-3);
                    AnalyticDailyRecord record = new AnalyticDailyRecord();
                    record.Id            = i;
                    record.Date          = date;
                    record.CpiDifference = context.CpiYearlyDifferences.Where(d => d.Year == date.Year)
                                           .Select(v => v.Difference).Single();
                    record.CpiTendency            = CalculateTendency(context.CpiQuaterlyDifferences.ToList(), date.Year);
                    record.InterestRateDifference = context.InterestRateYearlyDifferences.Where(c => c.Year == date.Year)
                                                    .Select(v => v.Difference).Single();
                    record.InterestRateTendency = CalculateTendency(context.InterestRateQuaterlyDifferences.ToList(), date.Year);
                    record.TradeBalanceByUk     = context.TradeBalances.Where(c => c.Country == "UK" && c.Year == date.Year)
                                                  .Select(v => v.Balance).Single();
                    record.TradeBalanceByUs = context.TradeBalances.Where(c => c.Country == "USA" && c.Year == date.Year)
                                              .Select(v => v.Balance).Single();
                    record.DebtGrowthUk = context.DebtGrowths.Where(c => c.Country == "UK" && c.Year == date.Year)
                                          .Select(v => v.Growth)
                                          .Single();
                    record.DebtGrowthUs = context.DebtGrowths.Where(c => c.Country == "USA" && c.Year == date.Year)
                                          .Select(v => v.Growth)
                                          .Single();
                    record.ForexTendency = context.GbpUsdGrowth.Where(y => y.Date <date && y.Date> recDate)
                                           .Select(v => v.CloseGrowth).Average();
                    record.Outcome = GetOutcomeLabel(forexGrowths.Where(d => d.Date == date).Select(v => v.CloseGrowth)
                                                     .Single());

                    context.AnalyticDailyRecords.Add(record);
                }
                context.SaveChanges();
            }
        }
        public static void CalculateTradeBalance(string country)
        {
            using (ForexModel context = new ForexModel())
            {
                var data    = context.Trades.Where(c => c.Country == country);
                var exports = data.Where(f => f.Flow == 2).OrderBy(y => y.Year).ToList();
                var imports = data.Where(f => f.Flow == 1).OrderBy(y => y.Year).ToList();

                for (int i = 0; i < exports.Count; i++)
                {
                    TradeBalance balance = new TradeBalance
                    {
                        Country = country,
                        Year    = exports[i].Year,
                        Balance = exports[i].Value - imports[i].Value
                    };

                    context.TradeBalances.Add(balance);
                }

                context.SaveChanges();
            }
        }
Пример #5
0
        public static void CalculateDebtGrowth(string country)
        {
            using (ForexModel context = new ForexModel())
            {
                var data = context.Debts.Where(c => c.Country == country).ToList();
                for (int i = 1; i < data.Count; i++)
                {
                    double currentValue  = data[i].PercentageDebt;
                    double previousValue = data[i - 1].PercentageDebt;

                    var item = new DebtGrowth
                    {
                        Country = country,
                        Year    = data[i].Year,
                        Growth  = CalculateGrowth(previousValue, currentValue)
                    };

                    context.DebtGrowths.Add(item);
                }

                context.SaveChanges();
            }
        }
        public static void UploadAnalyticRecords()
        {
            using (ForexModel context = new ForexModel())
            {
                var cpiYearly = context.CpiYearlyDifferences.ToList();
                for (int i = 1; i < cpiYearly.Count; i++)
                {
                    int            year   = cpiYearly[i].Year;
                    AnalyticRecord record = new AnalyticRecord();
                    record.Id                     = i;
                    record.Year                   = year;
                    record.CpiDifference          = cpiYearly[i].Difference;
                    record.CpiTendency            = CalculateTendency(context.CpiQuaterlyDifferences.ToList(), year);
                    record.InterestRateDifference = context.InterestRateYearlyDifferences.Where(c => c.Year == year)
                                                    .Select(v => v.Difference).Single();
                    record.InterestRateTendency =
                        CalculateTendency(context.InterestRateQuaterlyDifferences.ToList(), year);
                    record.TradeBalanceByUk = context.TradeBalances.Where(c => c.Country == "UK" && c.Year == year)
                                              .Select(v => v.Balance).Single();
                    record.TradeBalanceByUs = context.TradeBalances.Where(c => c.Country == "USA" && c.Year == year)
                                              .Select(v => v.Balance).Single();
                    record.DebtGrowthUk = context.DebtGrowths.Where(c => c.Country == "UK" && c.Year == year)
                                          .Select(v => v.Growth)
                                          .Single();
                    record.DebtGrowthUs = context.DebtGrowths.Where(c => c.Country == "USA" && c.Year == year)
                                          .Select(v => v.Growth)
                                          .Single();
                    record.ForexTendency = context.GbpUsdGrowthQuaterlies.Where(y => y.Date.Year == year - 1)
                                           .Select(v => v.CloseGrowth).Average();
                    record.Outcome = GetOutcomeLabel(context.GbpUsdGrowth.Where(y => y.Date.Year == year)
                                                     .Select(v => v.CloseGrowth).First());

                    context.AnalyticRecords.Add(record);
                }
                context.SaveChanges();
            }
        }
        public static void CalculateInterestRateDifference(Period period)
        {
            using (ForexModel context = new ForexModel())
            {
                var ukDataRaw = context.UkInterestRates.ToList();

                var ukData = ukDataRaw.Select(v => new InterestRate
                {
                    Country = "UK",
                    Rate    = v.Rate,
                    Date    = ParseDate(v.Date)
                }).OrderBy(d => d.Date)
                             .ToList();

                var usData = context.UsMonthlyInterestRates.Select(v => new InterestRate
                {
                    Country = "USA",
                    Rate    = v.Rate,
                    Date    = v.Date
                }).ToList();

                int ukMinYear = ukData.Select(y => y.Date.Year).Min();
                int usMinYear = usData.Select(y => y.Date.Year).Min();
                int minYear   = ukMinYear >= usMinYear ? ukMinYear : usMinYear;

                int ukMaxYear = ukData.Select(y => y.Date.Year).Max();
                int usMaxYear = usData.Select(y => y.Date.Year).Max();
                int maxYear   = ukMaxYear <= usMaxYear ? ukMaxYear : usMaxYear;

                for (int i = minYear; i <= maxYear; i++)
                {
                    if (period == Period.Quaterly)
                    {
                        int month = 1;
                        for (int j = 1; j <= 4; j++)
                        {
                            if (!(i == 2017 && j > 1))
                            {
                                DateTime ukDate = DateHelpers.GetFirstAvailableDay(ukData, i, month);
                                DateTime usDate = DateHelpers.GetFirstAvailableDay(usData, i, month);

                                double ukRate = ukData.Where(d => d.Date == ukDate).Select(r => r.Rate).First();
                                double usRate = usData.Where(d => d.Date == usDate).Select(r => r.Rate).First();

                                InterestRateQuaterlyDifference difference = new InterestRateQuaterlyDifference
                                {
                                    Year       = i,
                                    Quarter    = j,
                                    Difference = ukRate - usRate
                                };

                                context.InterestRateQuaterlyDifferences.Add(difference);
                                month += 3;
                            }
                        }
                    }
                    else if (period == Period.Yearly)
                    {
                        DateTime ukDate = DateHelpers.GetFirstAvailableDay(ukData, i, 1);
                        DateTime usDate = DateHelpers.GetFirstAvailableDay(usData, i, 1);

                        double ukRate = ukData.Where(d => d.Date == ukDate).Select(r => r.Rate).First();
                        double usRate = usData.Where(d => d.Date == usDate).Select(r => r.Rate).First();

                        InterestRateYearlyDifference difference = new InterestRateYearlyDifference
                        {
                            Year       = i,
                            Difference = ukRate - usRate
                        };

                        context.InterestRateYearlyDifferences.Add(difference);
                    }
                }

                context.SaveChanges();
            }
        }