Skip to content

Commit 6b3f95a

Browse files
committed
Add unit test for RandomDataGenerator
1 parent 4093e7e commit 6b3f95a

File tree

1 file changed

+97
-0
lines changed

1 file changed

+97
-0
lines changed

Tests/ToolBox/RandomDataGenerator/RandomDataGeneratorTests.cs

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
using static QuantConnect.ToolBox.RandomDataGenerator.RandomDataGenerator;
3030
using QuantConnect.Algorithm;
3131
using System.Linq;
32+
using System.IO;
3233

3334
namespace QuantConnect.Tests.ToolBox.RandomDataGenerator
3435
{
@@ -193,6 +194,102 @@ public void SecurityServiceShouldNotThrowWhenAlgorithmIsNull()
193194
});
194195
}
195196

197+
[Test]
198+
public void RandomDataGeneratorGeneratesDataSuccessfully()
199+
{
200+
var tempFolder = Path.Combine(Path.GetTempPath(), $"LeanTest_{Guid.NewGuid()}");
201+
var originalDataFolder = Config.Get("data-folder");
202+
try
203+
{
204+
Directory.CreateDirectory(tempFolder);
205+
Config.Set("data-folder", tempFolder);
206+
Globals.Reset();
207+
208+
var hourPath = Path.Combine(tempFolder, "equity", "usa", "hour");
209+
var dailyPath = Path.Combine(tempFolder, "equity", "usa", "daily");
210+
var factorFilesPath = Path.Combine(tempFolder, "equity", "usa", "factor_files");
211+
var mapFilesPath = Path.Combine(tempFolder, "equity", "usa", "map_files");
212+
213+
// Create the required folders
214+
Directory.CreateDirectory(hourPath);
215+
Directory.CreateDirectory(dailyPath);
216+
Directory.CreateDirectory(factorFilesPath);
217+
Directory.CreateDirectory(mapFilesPath);
218+
219+
var settings = new RandomDataGeneratorSettings
220+
{
221+
Start = new DateTime(2024, 1, 1, 9, 30, 0),
222+
End = new DateTime(2024, 1, 2, 16, 0, 0),
223+
SymbolCount = 1,
224+
Market = "usa",
225+
SecurityType = SecurityType.Equity,
226+
Resolution = Resolution.Hour,
227+
DataDensity = DataDensity.Dense,
228+
IncludeCoarse = false,
229+
QuoteTradeRatio = 1.0,
230+
RandomSeed = 123456,
231+
HasDividendsPercentage = 0,
232+
HasSplitsPercentage = 0,
233+
HasIpoPercentage = 0,
234+
HasRenamePercentage = 0,
235+
Tickers = new List<string>() { "AAPL" }
236+
};
237+
238+
var generator = GetGenerator(settings);
239+
240+
Assert.DoesNotThrow(() => generator.Run());
241+
242+
var allFiles = Directory.GetFiles(tempFolder, "*", SearchOption.AllDirectories);
243+
Assert.Greater(allFiles.Length, 0);
244+
245+
var hourFiles = Directory.GetFiles(hourPath, "*.zip");
246+
Assert.Greater(hourFiles.Length, 0);
247+
}
248+
finally
249+
{
250+
Config.Set("data-folder", originalDataFolder);
251+
Globals.Reset();
252+
Directory.Delete(tempFolder, true);
253+
}
254+
}
255+
256+
private static QuantConnect.ToolBox.RandomDataGenerator.RandomDataGenerator GetGenerator(RandomDataGeneratorSettings settings)
257+
{
258+
var securityManager = new SecurityManager(new TimeKeeper(settings.Start, new[] { TimeZones.Utc }));
259+
260+
var securityService = new SecurityService(
261+
new CashBook(),
262+
MarketHoursDatabase.FromDataFolder(),
263+
SymbolPropertiesDatabase.FromDataFolder(),
264+
new SecurityInitializerProvider(new FuncSecurityInitializer(security =>
265+
{
266+
// init price
267+
security.SetMarketPrice(new Tick(settings.Start, security.Symbol, 100, 100));
268+
security.SetMarketPrice(new OpenInterest(settings.Start, security.Symbol, 10000));
269+
270+
// from settings
271+
security.VolatilityModel = new StandardDeviationOfReturnsVolatilityModel(settings.VolatilityModelResolution);
272+
273+
// from settings
274+
if (security is Option option)
275+
{
276+
option.PriceModel = OptionPriceModels.Create(settings.OptionPriceEngineName,
277+
_interestRateProvider.GetRiskFreeRate(settings.Start, settings.End));
278+
}
279+
})),
280+
RegisteredSecurityDataTypesProvider.Null,
281+
new SecurityCacheProvider(
282+
new SecurityPortfolioManager(securityManager, new SecurityTransactionManager(null, securityManager), new AlgorithmSettings())),
283+
new MapFilePrimaryExchangeProvider(Composer.Instance.GetExportedValueByTypeName<IMapFileProvider>(Config.Get("map-file-provider", "LocalDiskMapFileProvider")))
284+
);
285+
286+
securityManager.SetSecurityService(securityService);
287+
288+
var generator = new QuantConnect.ToolBox.RandomDataGenerator.RandomDataGenerator();
289+
generator.Init(settings, securityManager);
290+
return generator;
291+
}
292+
196293
private static readonly IRiskFreeInterestRateModel _interestRateProvider = new InterestRateProvider();
197294

198295
private static SecurityService GetSecurityService(RandomDataGeneratorSettings settings, SecurityManager securityManager)

0 commit comments

Comments
 (0)