public void CreateDisplayPortfolioTests(string newPort, string oldPort, string cusipChanged, double change, string cusipNew, string cusipSold) { var baseDir = AppContext.BaseDirectory; var filePath = Path.Combine(baseDir, @"TestData\"); var txtStream1 = File.OpenRead(Path.Combine(filePath, newPort)); var port1 = GuruLoader.ParseSubmissionFile(txtStream1); var txtStream2 = File.OpenRead(Path.Combine(filePath, oldPort)); var port2 = GuruLoader.ParseSubmissionFile(txtStream2); var dp = GuruLoader.CreateDisplayPortfolio("name", port1, port2); if (cusipChanged != null) { Assert.True(isSimilar(change, dp.Positions.First(p => p.Cusip == cusipChanged).Change)); } if (cusipNew != null) { Assert.True(dp.Positions.First(p => p.Cusip == cusipNew).IsNew); } if (cusipSold != null) { Assert.True(dp.Positions.First(p => p.Cusip == cusipSold).IsSold); } }
// Try with the following ciks: 0001553733, 0001568820, 0001484148, 0001112520 // or go to https://www.sec.gov/edgar/searchedgar/companysearch.html and put the name of the investor you are interested in // TODO: clean up cmd line definition and code to manage it. public static void Main(string[] args) { if (args.Count() > 2 || args.Count() == 0) { Banner(); } if (args.Count() == 2 && (args[1] != "-Hist" && args[1] != "-Hyper")) { Banner(); } if (args.Count() == 1) { var result = GuruLoader.FetchDisplayPortfolioAsync(args[0]).Result; Console.WriteLine(DisplayPortToString(result)); } else if (args[1] == "-Hist") { // Printing Portfolio summary at both start and bottom var result = GuruLoader.FetchFullPortfolioDataAsync(args[0]).Result; Console.WriteLine(DisplayPortToString(result.Portfolio)); Console.WriteLine(DisplayHistory(result.CompaniesHistory)); } else { var cw = LoadCIKWeightFile(args[0]); var result = GuruLoader.FetchHyperPortfolioAsync(cw).Result; Console.WriteLine(DisplayHyperPortToString(result)); } }
public void ParseHtmFileTests(string fileFullName) { var htmStream = File.OpenRead(fileFullName); var link = GuruLoader.ParseHtmFile(htmStream); Assert.False(String.IsNullOrEmpty(link)); Assert.Equal(Path.GetExtension(link), ".txt"); }
public async static Task <HyperPortfolio> FetchHyperPortfolioAsync(IEnumerable <Tuple <string, double> > cikAndWeights) { var displayPortsTasks = cikAndWeights.Select(cw => FetchDisplayPortfolioAsync(cw.Item1)).ToArray(); var displayPorts = await Task.WhenAll(displayPortsTasks); var portsAndWeights = displayPorts.Zip(cikAndWeights, (dp, cw) => Tuple.Create(dp, cw.Item2)); return(GuruLoader.CreateHyperPortfolio(portsAndWeights)); }
public void ParseRssTextTest(string fileFullName) { var rssStream = File.OpenRead(fileFullName); var res = GuruLoader.ParseRssText(rssStream); Assert.NotNull(res); Assert.False(String.IsNullOrEmpty(res.DisplayName)); Assert.NotEmpty(res.Links); Assert.All(res.Links, link => Assert.True(Path.GetExtension(link) == ".htm" || Path.GetExtension(link) == ".html")); }
public void ParseSubmissionFileTests(string fileFullName) { var txtStream = File.OpenRead(fileFullName); var port = GuruLoader.ParseSubmissionFile(txtStream); Assert.NotNull(port); Assert.True(port.PositionsNumber > 0); Assert.True(port.TotalValue > 0); Assert.NotEmpty(port.Positions); Assert.All(port.Positions, pos => { Assert.False(String.IsNullOrEmpty(pos.Cusip)); Assert.False(String.IsNullOrEmpty(pos.Name)); Assert.True(pos.Shares > 0); Assert.True(pos.Value > 0); }); }