Previously, map files were generated with multiple rename events
and only one symbol was output. Now, data files are created for
each map file entry.
Fixed wrong formatting for IPO date
first entry
Changed behavior of dividend generation. Some symbols may now be excluded
from having dividends completely.
Fix bug where we would generate the same dividend entry due to the way
the variable used to calculate the next dividend was placed.
Changed initial starting value for dividends and splits for symbols with
no splits or dividends
Remove `NormalizeMonth` method in FinancialCalendar
Fixed bug where factor file reference price output had very high
precision
Fixed bug where map file had a useless entry before the final line if
the asset was not delisted
Fixed bug where program would crash because of NextPrice reaching its
maximum attempts. Fixed by removing call to NextPrice and using another
generation method.
Created random-seed argument for rdg in order to let the user get deterministic output
Update documentation in 'FactorFileRow.cs' to accurately reflect factor
file structure
Update CSV generation for FactorFile so that it uses FactorFileRow's CSV
generator
Add FinancialCalendar to make it easier to implement logic regarding
financial quarters
Add mapping events to RandomDataGenerator
Update MapFileRow ToCsv method to correctly emit the ticker as lowercase
Fix bug in FactorFile where we would get the same initial data point twice
when we converted it to CSV
Create new method to convert a MapFile to CSV
Create new method to write MapFile to disk as CSV
Add unit test to test for successful CSV generation in MapFile
Add new files to project
Add FinancialCalendar unit tests
Create new class to handle generation of dividends, splits, and maps
This commit removes start date in the coarse generator. This option was used in the previous version, in order to process only the newest dates.
The reason is the fact that coarse files now contains factors to estimate adjusted prices. In turn, factors are updated backward with a new corporate event (split, dividends, etc); the new coarse generator should *always* process the full symbol historical data, for all symbols.
This side steps the issue reported in #2840 by removing the desire to pass
zero for the maximum deviation. The previous issue was that we were leaning
on the trade ticks to produce the series variation and then trying to fit
quote ticks around a previously generated trade tick. This solution permits
both quote and trade ticks to produce variations and prevents the generator
from emitting both at the same time step.
A new parameter, --quote-trade-ratio, determines the relative density of each.
For example, a quote trade ratio of 1 means equal trade and quote ticks, whereas
a value of 2 means twice as many quote ticks as trade ticks.
This change also removes special treatment regarding the downsizing of the
requested deviation for quote ticks. If the consumer wants to limit the
deviation of quote ticks than the consumer can make that decision, but the
random value generator should simply follow instructions like a good little
boy.
Fixes#2840
Higher resolution means more frequent whereas lower resolution
means less frequent. This piece of logic is picking the next
time using a higher frequency resolution to guarantee we get a
time within market hours
The existing IdentityDataConsolidator consumes all ticks, completely ignoring
the tick type. I doubt this is ever the desired behavior, but given my
reluctance to break existing regression and unit tests as well as perhaps
user algorithms, I've added a layer on top to provide the proper filtering.
Removed the stub type which mirrored the TickAggregator and also expanded
the TickAggregator implementations to provide full coverage of the possible
ticktype/resolution cases: OpenInterestTickAggregator and IdentityTickAggregator
Invoke from toolbox cli using --app=rdg or --app=randomdatagenerator
Produces random data over the requested time frame in the desired resolution,
security type and density.
Here's a few sample command line invocations:
--app=rdg --start=20190101 --end=20200101 --symbol-count=1 --resolution=Daily --data-density=Dense --include-coarse=false
--app=rdg --start=20190101 --end=20200101 --symbol-count=10 --security-type=Future --resolution=Hour --data-density=VerySparse
--app=rdg --start=20190101 --end=20200101 --symbol-count=5 --security-type=Option --resolution=Minute --data-density=Sparse
The random value generator aims to abstract away the generation of the
key bits of data from the toolbox project. This provides a baseline
implementation for anyone who wishes to customize their data randomizaton.
Simply subclass and override the desired methods. A full test suite is
included to ensure the data generated meets specifications.