Files
quantconnect--lean/Tests/Common/Data/Custom/EstimizeTests.cs
2019-07-26 12:46:02 -03:00

244 lines
9.5 KiB
C#

/*
* QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals.
* Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using Newtonsoft.Json;
using NUnit.Framework;
using QuantConnect.Data.Custom.Estimize;
using QuantConnect.ToolBox.EstimizeDataDownloader;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using NodaTime;
using QuantConnect.Data;
using QuantConnect.Lean.Engine.DataFeeds;
namespace QuantConnect.Tests.Common.Data.Custom
{
[TestFixture]
public class EstimizeTests
{
[Test, Ignore]
public void EstimizeDownloadDoesNotThrow()
{
var tickers = new List<EstimizeDataDownloader.Company>();
var destinationFolder = Path.Combine(Globals.DataFolder, "alternative", "estimize");
var downloader = new EstimizeReleaseDataDownloader(destinationFolder);
Assert.DoesNotThrow(() => tickers = downloader.GetCompanies().Result);
Assert.IsTrue(tickers.Count > 0);
}
[Test]
public void DeserializeEstimizeReleaseSuccessfully()
{
var content = "{" +
"\"fiscal_year\":2020," +
"\"fiscal_quarter\":1," +
"\"eps\":null," +
"\"revenue\":null," +
"\"consensus_eps_estimate\":1.20507936507937," +
"\"consensus_revenue_estimate\":31872.2258064516," +
"\"wallstreet_revenue_estimate\":31966.964," +
"\"wallstreet_eps_estimate\":1.188," +
"\"consensus_weighted_revenue_estimate\":31966.6230263867," +
"\"consensus_weighted_eps_estimate\":1.21545656570188," +
"\"release_date\":\"2019-10-23T16:00:00-04:00\"," +
"\"id\":\"155842\"}";
var data = JsonConvert.DeserializeObject<EstimizeRelease>(content);
Assert.NotNull(data);
Assert.AreEqual(data.Id, "155842");
Assert.AreEqual(data.FiscalYear, 2020);
Assert.AreEqual(data.FiscalQuarter, 1);
Assert.IsFalse(data.Eps.HasValue);
Assert.AreEqual(data.WallStreetEpsEstimate, 1.188);
Assert.AreEqual(data.ConsensusEpsEstimate, 1.20507936507937);
Assert.AreEqual(data.ConsensusWeightedEpsEstimate, 1.21545656570188);
Assert.IsFalse(data.Revenue.HasValue);
Assert.AreEqual(data.WallStreetRevenueEstimate, 31966.964);
Assert.AreEqual(data.ConsensusRevenueEstimate, 31872.2258064516);
Assert.AreEqual(data.ConsensusWeightedRevenueEstimate, 31966.6230263867);
Assert.AreEqual(data.ReleaseDate, new DateTime(2019, 10, 23, 20, 0, 0).ToLocalTime());
Assert.AreEqual(data.ReleaseDate, data.EndTime);
content = content.Replace("\"eps\":null,", "\"eps\":1.2,");
data = JsonConvert.DeserializeObject<EstimizeRelease>(content);
Assert.NotNull(data);
Assert.AreEqual(data.Eps, 1.2);
Assert.AreEqual(data.Value, 1.2);
}
[Test]
public void SerializeEstimizeReleaseSuccessfully()
{
var data = new EstimizeRelease()
{
Id = "0",
ReleaseDate = new DateTime(2019,6,10)
};
var content = JsonConvert.SerializeObject(data);
Assert.IsTrue(content.Contains("\"id\":\"0\""));
Assert.IsTrue(content.Contains("\"release_date\":\"2019-06-10T00:00:00\""));
Assert.IsTrue(content.Contains("\"eps\":null"));
data.Eps = 1.2m;
content = JsonConvert.SerializeObject(data);
Assert.IsTrue(content.Contains("\"eps\":1.2"));
}
[Test, Ignore("Requires Estimize data")]
public void EstimizeReleaseReaderTest()
{
var dataCacheProvider = new SingleEntryDataCacheProvider(new DefaultDataProvider());
var config = new SubscriptionDataConfig(
typeof(EstimizeRelease),
Symbol.Create("AAPL.R", SecurityType.Base, QuantConnect.Market.USA),
Resolution.Daily,
DateTimeZone.Utc,
DateTimeZone.Utc,
false,
false,
false,
true
);
var data = new EstimizeRelease();
var date = new DateTime(2019, 6, 10);
var source = data.GetSource(config, date, false);
var factory = SubscriptionDataSourceReader.ForSource(source, dataCacheProvider, config, date, false);
var rows = factory.Read(source).ToList();
Assert.IsTrue(rows.Count > 0);
}
[Test]
public void DeserializeEstimateReleaseSuccessfully()
{
var content = "{" +
"\"ticker\":\"AAPL\"," +
"\"fiscal_year\":2020," +
"\"fiscal_quarter\":2," +
"\"eps\":2.81," +
"\"revenue\":61413.0," +
"\"username\":\"Dominantstock\"," +
"\"created_at\":\"2019-06-07T10:40:36-04:00\"," +
"\"id\":\"2857028\"," +
"\"analyst_id\":\"657836\"," +
"\"flagged\":false}";
var data = JsonConvert.DeserializeObject<EstimizeEstimate>(content);
Assert.NotNull(data);
Assert.AreEqual(data.Id, "2857028");
Assert.AreEqual(data.Ticker, "AAPL");
Assert.AreEqual(data.FiscalYear, 2020);
Assert.AreEqual(data.FiscalQuarter, 2);
Assert.AreEqual(data.CreatedAt, new DateTime(2019, 6, 7, 14, 40, 36).ToLocalTime());
Assert.AreEqual(data.CreatedAt, data.EndTime);
Assert.AreEqual(data.Eps, 2.81);
Assert.AreEqual(data.Revenue, 61413.0);
Assert.AreEqual(data.UserName, "Dominantstock");
Assert.AreEqual(data.AnalystId, "657836");
Assert.IsFalse(data.Flagged);
content = content.Replace("\"eps\":2.81,", "\"eps\":null,");
data = JsonConvert.DeserializeObject<EstimizeEstimate>(content);
Assert.NotNull(data);
Assert.IsFalse(data.Eps.HasValue);
Assert.AreEqual(data.Value, 0);
}
[Test]
public void SerializeEstimizeEstimateSuccessfully()
{
var data = new EstimizeEstimate()
{
Id = "0",
CreatedAt = new DateTime(2019, 6, 10)
};
var content = JsonConvert.SerializeObject(data);
Assert.IsTrue(content.Contains("\"id\":\"0\""));
Assert.IsTrue(content.Contains("\"created_at\":\"2019-06-10T00:00:00\""));
Assert.IsTrue(content.Contains("\"eps\":null"));
data.Eps = 1.2m;
content = JsonConvert.SerializeObject(data);
Assert.IsTrue(content.Contains("\"eps\":1.2"));
}
[Test, Ignore("Requires Estimize data")]
public void EstimizeEstimateReaderTest()
{
var dataCacheProvider = new SingleEntryDataCacheProvider(new DefaultDataProvider());
var config = new SubscriptionDataConfig(
typeof(EstimizeEstimate),
Symbol.Create("AAPL.E", SecurityType.Base, QuantConnect.Market.USA),
Resolution.Daily,
DateTimeZone.Utc,
DateTimeZone.Utc,
false,
false,
false,
true
);
var data = new EstimizeEstimate();
var date = new DateTime(2019, 6, 10);
var source = data.GetSource(config, date, false);
var factory = SubscriptionDataSourceReader.ForSource(source, dataCacheProvider, config, date, false);
var rows = factory.Read(source).ToList();
Assert.IsTrue(rows.Count > 0);
}
[Test, Ignore("Requires Estimize data")]
public void EstimizeConsensusReaderTest()
{
var dataCacheProvider = new SingleEntryDataCacheProvider(new DefaultDataProvider());
var config = new SubscriptionDataConfig(
typeof(EstimizeConsensus),
Symbol.Create("AAPL.C", SecurityType.Base, QuantConnect.Market.USA),
Resolution.Daily,
DateTimeZone.Utc,
DateTimeZone.Utc,
false,
false,
false,
true
);
var data = new EstimizeConsensus();
var date = new DateTime(2019, 6, 10);
var source = data.GetSource(config, date, false);
var factory = SubscriptionDataSourceReader.ForSource(source, dataCacheProvider, config, date, false);
var rows = factory.Read(source).ToList();
Assert.IsTrue(rows.Count > 0);
}
}
}