diff --git a/MarketDataUnitTests/.gitignore b/MarketDataUnitTests/.gitignore
new file mode 100644
index 0000000..cbc1d6a
--- /dev/null
+++ b/MarketDataUnitTests/.gitignore
@@ -0,0 +1,4 @@
+/TestResults
+/bin
+/obj
+/packages
diff --git a/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/.suo b/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/.suo
new file mode 100644
index 0000000..ae80e60
Binary files /dev/null and b/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/.suo differ
diff --git a/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/TestStore/0/015.testlog b/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/TestStore/0/015.testlog
new file mode 100644
index 0000000..206d7ef
Binary files /dev/null and b/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/TestStore/0/015.testlog differ
diff --git a/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/TestStore/0/testlog.manifest b/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/TestStore/0/testlog.manifest
new file mode 100644
index 0000000..f55640a
Binary files /dev/null and b/MarketDataUnitTests/.vs/MarketDataUnitTests/v16/TestStore/0/testlog.manifest differ
diff --git a/MarketDataUnitTests/App.config b/MarketDataUnitTests/App.config
new file mode 100644
index 0000000..cb59fb9
--- /dev/null
+++ b/MarketDataUnitTests/App.config
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/MarketDataUnitTests/MarketDataFeedTests.cs b/MarketDataUnitTests/MarketDataFeedTests.cs
new file mode 100644
index 0000000..c0da91b
--- /dev/null
+++ b/MarketDataUnitTests/MarketDataFeedTests.cs
@@ -0,0 +1,373 @@
+using MarketData;
+using MarketData.DataAccess;
+using MarketData.Helper;
+using MarketData.MarketDataModel;
+using MarketData.Utils;
+using Microsoft.VisualStudio.TestTools.UnitTesting;
+using System;
+using System.Collections.Generic;
+
+namespace MarketDataUnitTests
+{
+ [TestClass]
+ public class MarketDataFeedTests
+ {
+
+ [TestMethod]
+// [Ignore]
+ public void ETFHoldsingsYahooRetrieval() // The feed layout has chnaged
+ {
+ String etfSymbol="ACWX";
+ ETFHoldings etfHoldings=MarketDataHelper.GetETFHoldings(etfSymbol);
+ Assert.IsTrue(null!=etfHoldings && etfHoldings.Count>0);
+ }
+
+ [TestMethod]
+ public void LatestPriceYahoo2Retrieval() // The feed layout has changed
+ {
+// String symbol="AAPL";
+// String symbol="JFNNX";
+ String symbol="1234";
+ Price price=MarketDataHelper.GetLatestPriceYahoo2(symbol);
+ Assert.IsTrue(null!=price,"No Price");
+ Assert.IsTrue(price.IsValid,"Invalid Price");
+ }
+
+ [TestMethod]
+ [Ignore]
+ public void LatestPriceYahooRetrieval() // The feed layout has changed
+ {
+ String symbol="AAPL";
+ Price price=MarketDataHelper.GetLatestPriceYahoo(symbol);
+ Assert.IsTrue(null!=price,"No Price");
+ Assert.IsTrue(price.IsValid,"Invalid Price");
+ }
+
+ // This test only passes when the web proxy is bypassed
+ [TestMethod]
+ public void FundamentalYahooRetrieval()
+ {
+ String symbol = "MIDD";
+ Fundamental fundamental=MarketDataHelper.GetFundamental(symbol);
+ Assert.IsTrue(null!=fundamental);
+// Assert.IsTrue(!Utility.IsEpoch(fundamental.NextEarningsDate),"NextEarningsDate");
+// Assert.IsTrue(!double.IsNaN(fundamental.Beta),"Beta");
+ Assert.IsTrue(!double.IsNaN(fundamental.Low52),"Low52");
+ Assert.IsTrue(!double.IsNaN(fundamental.High52),"High52");
+ Assert.IsTrue(!double.IsNaN(fundamental.Volume),"Volume");
+// Assert.IsTrue(!double.IsNaN(fundamental.MarketCap),"MarketCap");
+ Assert.IsTrue(!double.IsNaN(fundamental.PE),"PE");
+ Assert.IsTrue(!double.IsNaN(fundamental.EPS),"EPS");
+// Assert.IsTrue(!double.IsNaN(fundamental.PEG),"PEG");
+ Assert.IsTrue(!double.IsNaN(fundamental.ReturnOnAssets),"ReturnOnAssets");
+ Assert.IsTrue(!double.IsNaN(fundamental.ReturnOnEquity),"ReturnOnEquity");
+ Assert.IsTrue(!double.IsNaN(fundamental.TotalCash),"TotalCash");
+ Assert.IsTrue(!double.IsNaN(fundamental.TotalDebt),"TotalDebt");
+// Assert.IsTrue(!double.IsNaN(fundamental.SharesOutstanding),"SharesOutstanding");
+ Assert.IsTrue(!double.IsNaN(fundamental.Revenue),"Revenue");
+ Assert.IsTrue(!double.IsNaN(fundamental.RevenuePerShare),"RevenuePerShare");
+ Assert.IsTrue(!double.IsNaN(fundamental.QtrlyRevenueGrowth),"QtrlyRevenueGrowth");
+// Assert.IsTrue(!double.IsNaN(fundamental.GrossProfit),"GrossProfit");
+ Assert.IsTrue(!double.IsNaN(fundamental.EBITDA),"EBITDA");
+ Assert.IsTrue(!double.IsNaN(fundamental.NetIncomeAvailableToCommon),"NetIncomeAvailableToCommon");
+ Assert.IsTrue(!double.IsNaN(fundamental.BookValuePerShare),"BookValuePerShare");
+ Assert.IsTrue(!double.IsNaN(fundamental.OperatingCashflow),"OperatingCashflow");
+ Assert.IsTrue(!double.IsNaN(fundamental.LeveragedFreeCashflow),"LeveragedFreeCashflow");
+ Assert.IsTrue(!double.IsNaN(fundamental.Equity),"Equity");
+ Assert.IsTrue(!double.IsNaN(fundamental.TrailingPE),"TrailingPE");
+ Assert.IsTrue(!double.IsNaN(fundamental.EnterpriseValue),"EnterpriseValue");
+// Assert.IsTrue(!double.IsNaN(fundamental.EBIT),"EBIT");
+ Assert.IsTrue(!double.IsNaN(fundamental.DebtToEquity),"DebtToEquity");
+ }
+
+ [TestMethod]
+ public void DividendHistoryRetrieval()
+ {
+ Dictionary items=new Dictionary();
+ String dividendSymbol="AAPL";
+ DividendHistory dividendHistory=MarketDataHelper.GetDividendHistory(dividendSymbol);
+ Assert.IsTrue(null!=dividendHistory && dividendHistory.Count>0);
+ }
+
+ [TestMethod]
+ public void PremarketRetrieval()
+ {
+ PremarketElements premarketElements = MarketDataHelper.GetPremarketData();
+ Assert.IsTrue(null!=premarketElements && premarketElements.Count>0);
+ }
+
+ [TestMethod]
+ public void EarningsAnnouncementsaRetrieval()
+ {
+ String symbol="MIDD";
+ EarningsAnnouncements earningsAnnouncements=MarketDataHelper.GetEarningsAnnouncements(symbol);
+ Assert.IsTrue(null!=earningsAnnouncements && earningsAnnouncements.Count>0);
+ }
+
+ [TestMethod]
+ public void ZacksRankRetrieval()
+ {
+ String symbol="MIDD";
+ ZacksRank zacksRank=MarketDataHelper.GetZacksRank(symbol);
+ Assert.IsTrue(null!=zacksRank && null!=zacksRank.Rank);
+ }
+
+ [TestMethod]
+ public void GetSplitsRetrieval()
+ {
+ Splits splits=MarketDataHelper.GetSplits();
+ Assert.IsTrue(null!=splits && splits.Count>0);
+ }
+
+ [TestMethod]
+ public void GDPPerCapitaRetrieval()
+ {
+ EconomicIndicators economicIndicators=MarketDataHelper.GetGDPPerCapita();
+ Assert.IsTrue(null!=economicIndicators && economicIndicators.Count>0);
+ }
+
+ [TestMethod]
+ public void LatestAnalystRatingsRetrieval()
+ {
+ AnalystRatings analystRatings=MarketDataHelper.GetLatestAnalystRatings();
+ Assert.IsTrue(null!=analystRatings && analystRatings.Count>0);
+ }
+
+ [TestMethod]
+ public void AnalystRatingsMarketBeatRetrieval()
+ {
+ String symbol="AAPL";
+ AnalystRatings analystRatings=MarketDataHelper.GetAnalystRatingsMarketBeat(symbol);
+ Assert.IsTrue(null!=analystRatings && analystRatings.Count>0);
+ }
+
+ [TestMethod]
+ public void SECCIKRetrieval()
+ {
+ String symbol="AAPL";
+ String strCik=MarketDataHelper.GetCIK(symbol);
+ Assert.IsTrue(null!=strCik);
+ }
+
+ [TestMethod]
+ public void SECFilingsRetrieval()
+ {
+ String symbol="AAPL";
+ String strCik=MarketDataHelper.GetCIK(symbol);
+ Assert.IsTrue(null!=strCik);
+ SECFilings secFilings=MarketDataHelper.GetSECFilings(symbol,strCik,1);
+ Assert.IsTrue(null!=secFilings && secFilings.Count>0);
+ }
+
+ [TestMethod]
+ public void YieldCurveRetrieval()
+ {
+ DateGenerator dateGenerator= new DateGenerator();
+ DateTime analysisDate=dateGenerator.FindPrevBusinessDay(DateTime.Now);
+ YieldCurve yieldCurve=MarketDataHelper.GetYieldCurve(analysisDate.Year);
+ Assert.IsTrue(null!=yieldCurve && yieldCurve.Count>0);
+ Assert.IsTrue(yieldCurve[yieldCurve.Count-1].Date.Month.Equals(analysisDate.Month));
+ }
+
+ [TestMethod]
+ public void InsiderTransactionRetrieval()
+ {
+ DateTime now = DateTime.Now;
+ DateGenerator dateGenerator = new DateGenerator();
+ InsiderTransactions insiderTransactions = InsiderTransactionDA.GetLatestInsiderTransactions();
+ Assert.IsTrue(null!=insiderTransactions && insiderTransactions.Count>0);
+ InsiderTransaction insiderTransaction = insiderTransactions[0];
+ int daysBetween = dateGenerator.DaysBetween(now, insiderTransaction.TransactionDate)+1;
+ Assert.IsTrue(daysBetween<10);
+ InsiderTransactions latestTransactions=MarketDataHelper.GetInsiderTransactions(insiderTransaction.Symbol,daysBetween);
+ Assert.IsTrue(null!=latestTransactions && latestTransactions.Count>0);
+ }
+
+ [TestMethod]
+ public void CompanyProfileRetrieval()
+ {
+ String symbol="MIDD";
+ CompanyProfile companyProfile=MarketDataHelper.GetCompanyProfile(symbol);
+ Assert.IsTrue(null!=companyProfile);
+ }
+
+ [TestMethod]
+ public void HeadlinesRetrieval()
+ {
+ String symbol="MIDD";
+ Headlines headlines = HeadlinesDA.GetLatestHeadlines();
+ Assert.IsTrue(null!=headlines && headlines.Count>0);
+ Headline headline = headlines[0];
+ Headlines companyHeadlines = HeadlinesMarketDataHelper.GetHeadlinesEx(headline.Symbol);
+ Assert.IsTrue(null!=companyHeadlines && companyHeadlines.Count>0);
+ }
+
+ [TestMethod]
+ public void AnalystPriceTargetMarketBeatRetrieval()
+ {
+ String symbol="MGPI";
+ AnalystPriceTarget analystPriceTarget=MarketDataHelper.GetAnalystPriceTargetMarketBeat(symbol);
+ Assert.IsTrue(null!=analystPriceTarget);
+ Assert.IsTrue(!Double.IsNaN(analystPriceTarget.HighTargetPrice));
+ Assert.IsTrue(!Double.IsNaN(analystPriceTarget.LowTargetPrice));
+ Assert.IsTrue(!Double.IsNaN(analystPriceTarget.MeanTargetPrice));
+ Assert.IsTrue(!Double.IsNaN(analystPriceTarget.MedianTargetPrice));
+ }
+
+ [TestMethod]
+ public void HistoricalRetrieval()
+ {
+ String symbol="AAPL";
+ Dictionary timeSeries=MarketDataHelper.GetHistoricalValues(symbol);
+ Assert.IsTrue(null!=timeSeries);
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.ROA),"Missing ROA");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.ROIC),"Missing ROIC");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.BVPS),"Missing BVPS");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.Inventory),"Missing Inventory");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.AccountsReceivable),"Missing AccountsReceivable");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.COGS),"Missing COGS");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.OperatingIncome),"Missing OperatingIncome");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.InterestExpense),"Missing InterestExpense");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.TaxRate),"Missing TaxRate");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.Revenue),"Missing Revenue");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.NetIncomeAvailableToCommonShareholders),"Missing NetIncomeAvailableToCommonShareholders");
+ Assert.IsTrue(timeSeries.ContainsKey(TimeSeriesElement.ElementType.OperatingCashflow),"Missing OperatingCashflow");
+ }
+
+ [TestMethod]
+ public void IncomeStatementNASDAQRetrievsl()
+ {
+ String symbol="MIDD";
+ List incomeStatements=MarketDataHelper.GetIncomeStatementNASDAQ(symbol,IncomeStatement.PeriodType.Annual);
+ Assert.IsTrue(null!=incomeStatements && incomeStatements.Count>0);
+ }
+
+ [TestMethod]
+ public void IncomeStatementFinVizRetrievsl()
+ {
+ String symbol="MIDD";
+ List incomeStatements=MarketDataHelper.GetIncomeStatementFinViz(symbol,IncomeStatement.PeriodType.Annual);
+ Assert.IsTrue(null!=incomeStatements && incomeStatements.Count>0);
+ }
+
+ [TestMethod]
+ public void BalanceSheetNASDAQRetrieval()
+ {
+ String symbol="MIDD";
+ List balanceSheets = MarketDataHelper.GetBalanceSheetNASDAQ(symbol, BalanceSheet.PeriodType.Annual);
+ Assert.IsTrue(null != balanceSheets && balanceSheets.Count > 0);
+ BalanceSheet balanceSheet = balanceSheets[0];
+ Assert.IsTrue(!double.IsNaN(balanceSheet.CashAndCashEquivalents),"CashAndCashEquivalents");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.DeferredLongTermLiabilities),"DeferredLongTermLiabilities");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.IntangibleAssets),"IntangibleAssets");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.Inventory),"Inventory");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.LongTermDebt),"LongTermDebt");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.NetCurrentAssetValue),"NetCurrentAssetValue");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.NetFixedAssets),"NetFixedAssets");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.OtherLiabilities),"OtherLiabilities");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.PropertyPlantAndEquipment),"PropertyPlantAndEquipment");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.TotalAssets),"TotalAssets");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.TotalCurrentAssets),"TotalCurrentAssets");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.TotalCurrentLiabilities),"TotalCurrentLiabilities");
+ Assert.IsTrue(!double.IsNaN(balanceSheet.TotalLiabilities),"TotalLiabilities");
+ }
+
+ [TestMethod]
+ public void CashflowStatementMorningStarRetrieval()
+ {
+ String symbol="MIDD";
+ List cashflowStatements = MarketDataHelper.GetCashflowStatement(symbol, CashflowStatement.PeriodType.Annual);
+ Assert.IsTrue(null != cashflowStatements && cashflowStatements.Count > 0);
+ CashflowStatement cashflowStatement = cashflowStatements[0];
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.DepreciationAndAmortization),"DepreciationAndAmortization");
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.DeferredIncomeTaxes),"DeferredIncomeTaxes");
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.StockBasedCompensation),"StockBasedCompensation");
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.AccountsReceivable),"AccountsReceivable");
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.Inventory),"Inventory");
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.AccountsPayable),"AccountsPayable");
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.AccruedLiabilities),"AccruedLiabilities");
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.OperatingCashflow),"OperatingCashflow");
+ Assert.IsTrue(!double.IsNaN(cashflowStatement.FreeCashflow),"FreeCashflow");
+ }
+
+ [TestMethod]
+ public void CurrencyConversionXERetrieval()
+ {
+ DateGenerator dateGenerator = new DateGenerator();
+ String sourceCurrency="USD";
+ DateTime analysisDate = DateTime.Now;
+ analysisDate = dateGenerator.GetPrevBusinessDay(analysisDate);
+ CurrencyConversionCollection currencyConversionCollection = MarketDataHelper.GetCurrencyConversion(sourceCurrency,analysisDate);
+ Assert.IsTrue(null!=currencyConversionCollection && currencyConversionCollection.Count>0);
+ }
+
+ [TestMethod]
+ public void FundamentalFinVizRetrieval()
+ {
+ String symbol = "MIDD";
+ Fundamental fundamental=MarketDataHelper.GetFundamentalFinViz(symbol);
+ Assert.IsTrue(null!=fundamental);
+ Assert.IsTrue(!Utility.IsEpoch(fundamental.NextEarningsDate),"NextEarningsDate");
+ Assert.IsTrue(!double.IsNaN(fundamental.Beta),"Beta");
+ Assert.IsTrue(!double.IsNaN(fundamental.Low52),"Low52");
+ Assert.IsTrue(!double.IsNaN(fundamental.High52),"High52");
+ Assert.IsTrue(!double.IsNaN(fundamental.Volume),"Volume");
+ Assert.IsTrue(!double.IsNaN(fundamental.MarketCap),"MarketCap");
+ Assert.IsTrue(!double.IsNaN(fundamental.PE),"PE");
+ Assert.IsTrue(!double.IsNaN(fundamental.EPS),"EPS");
+ Assert.IsTrue(!double.IsNaN(fundamental.PEG),"PEG");
+ Assert.IsTrue(!double.IsNaN(fundamental.ReturnOnAssets),"ReturnOnAssets");
+ Assert.IsTrue(!double.IsNaN(fundamental.ReturnOnEquity),"ReturnOnEquity");
+ Assert.IsTrue(!double.IsNaN(fundamental.TotalCash),"TotalCash");
+ Assert.IsTrue(!double.IsNaN(fundamental.TotalDebt),"TotalDebt");
+ Assert.IsTrue(!double.IsNaN(fundamental.SharesOutstanding),"SharesOutstanding");
+ Assert.IsTrue(!double.IsNaN(fundamental.Revenue),"Revenue");
+ Assert.IsTrue(!double.IsNaN(fundamental.RevenuePerShare),"RevenuePerShare");
+ Assert.IsTrue(!double.IsNaN(fundamental.QtrlyRevenueGrowth),"QtrlyRevenueGrowth");
+ Assert.IsTrue(!double.IsNaN(fundamental.GrossProfit),"GrossProfit");
+ Assert.IsTrue(!double.IsNaN(fundamental.EBITDA),"EBITDA");
+ Assert.IsTrue(!double.IsNaN(fundamental.NetIncomeAvailableToCommon),"NetIncomeAvailableToCommon");
+ Assert.IsTrue(!double.IsNaN(fundamental.BookValuePerShare),"BookValuePerShare");
+ Assert.IsTrue(!double.IsNaN(fundamental.OperatingCashflow),"OperatingCashflow");
+ Assert.IsTrue(!double.IsNaN(fundamental.LeveragedFreeCashflow),"LeveragedFreeCashflow");
+ Assert.IsTrue(!double.IsNaN(fundamental.Equity),"Equity");
+ Assert.IsTrue(!double.IsNaN(fundamental.TrailingPE),"TrailingPE");
+ Assert.IsTrue(!double.IsNaN(fundamental.EnterpriseValue),"EnterpriseValue");
+ Assert.IsTrue(!double.IsNaN(fundamental.EBIT),"EBIT");
+ Assert.IsTrue(!double.IsNaN(fundamental.DebtToEquity),"DebtToEquity");
+ }
+
+ [TestMethod]
+ public void LatestPriceBigChartsRetrieval()
+ {
+ String symbol="MIDD";
+ Price price=MarketDataHelper.GetLatestPriceBigCharts(symbol);
+ Assert.IsTrue(null!=price,"No Price");
+ Assert.IsTrue(price.IsValid,"Invalid Price");
+ }
+
+ [TestMethod]
+ public void GetPriceAsOfBigChartsRetrieval()
+ {
+ String symbol="MIDD";
+ DateTime analysisDate=DateTime.Now;
+ DateGenerator dateGenerator = new DateGenerator();
+ analysisDate=dateGenerator.GetPrevBusinessDay(analysisDate);
+ Price price=MarketDataHelper.GetPriceAsOf(symbol,analysisDate);
+ Assert.IsTrue(null!=price,"No Price");
+ Assert.IsTrue(price.IsValid,"Invalid Price");
+ }
+
+ [TestMethod]
+ public void GetDailyPricesYahooRetrieval()
+ {
+ String symbol="MIDD";
+ DateTime analysisDate=DateTime.Now;
+ DateGenerator dateGenerator = new DateGenerator();
+ analysisDate=dateGenerator.GetPrevBusinessDay(analysisDate);
+ Prices prices=MarketDataHelper.GetDailyPrices(symbol,analysisDate,analysisDate);
+ Assert.IsTrue(null!=prices && prices.Count>0,"No Price");
+ }
+
+ }
+}
diff --git a/MarketDataUnitTests/MarketDataUnitTests.csproj b/MarketDataUnitTests/MarketDataUnitTests.csproj
new file mode 100644
index 0000000..e60c383
--- /dev/null
+++ b/MarketDataUnitTests/MarketDataUnitTests.csproj
@@ -0,0 +1,75 @@
+
+
+
+
+
+ Debug
+ AnyCPU
+ {FB4261E1-0A5D-4A36-8550-0D19AB180E15}
+ Library
+ Properties
+ MarketDataUnitTests
+ MarketDataUnitTests
+ v4.6.2
+ 512
+ {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 15.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+ $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages
+ False
+ UnitTest
+
+
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ packages\MSTest.TestFramework.2.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll
+
+
+ packages\MSTest.TestFramework.2.1.2\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {e807f1ca-9d9c-484a-8e83-269d57707b4b}
+ MarketDataLib
+
+
+
+
+
+
+ This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MarketDataUnitTests/MarketDataUnitTests.sln b/MarketDataUnitTests/MarketDataUnitTests.sln
new file mode 100644
index 0000000..253ba90
--- /dev/null
+++ b/MarketDataUnitTests/MarketDataUnitTests.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.32126.315
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarketDataUnitTests", "MarketDataUnitTests.csproj", "{FB4261E1-0A5D-4A36-8550-0D19AB180E15}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MarketDataLib", "..\MarketDataLib\MarketDataLib.csproj", "{E807F1CA-9D9C-484A-8E83-269D57707B4B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {FB4261E1-0A5D-4A36-8550-0D19AB180E15}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FB4261E1-0A5D-4A36-8550-0D19AB180E15}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FB4261E1-0A5D-4A36-8550-0D19AB180E15}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FB4261E1-0A5D-4A36-8550-0D19AB180E15}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E807F1CA-9D9C-484A-8E83-269D57707B4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E807F1CA-9D9C-484A-8E83-269D57707B4B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E807F1CA-9D9C-484A-8E83-269D57707B4B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E807F1CA-9D9C-484A-8E83-269D57707B4B}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {05DC6CA7-0B19-4FD8-83C4-7602F080A624}
+ EndGlobalSection
+EndGlobal
diff --git a/MarketDataUnitTests/Properties/AssemblyInfo.cs b/MarketDataUnitTests/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..08011dc
--- /dev/null
+++ b/MarketDataUnitTests/Properties/AssemblyInfo.cs
@@ -0,0 +1,20 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("MarketDataUnitTests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("MarketDataUnitTests")]
+[assembly: AssemblyCopyright("Copyright © 2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+
+[assembly: Guid("fb4261e1-0a5d-4a36-8550-0d19ab180e15")]
+
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/MarketDataUnitTests/packages.config b/MarketDataUnitTests/packages.config
new file mode 100644
index 0000000..0b00b86
--- /dev/null
+++ b/MarketDataUnitTests/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file