1.Model for data ingestion
The project has been given an extensive set of test data. Each file is a snapshot of data for a particular options series. This task requires building an object model and deserialization logic for this data from JSON.
2.Design and implement metrics for assessing input data quality
The provided test data is quite diverse, covering different markets, and within each market, many underlying assets. Underlying assets and markets differ greatly in options liquidity, ranging from a super-dense strike grid with tight spreads, to underlyings with just one expiration, ten strikes, and near-zero liquidity.
The quality (in the general sense) of options data strongly affects how well naive volatility-curve-building algorithms perform. On good data (the happy path), even the simplest implementation works well. But on sparse, illiquid data, simple algorithms will produce results just as inadequate as the input data itself.
This task is to design and implement metrics that let us assess the quality of the input data. Based on the metric values, we can then branch the algorithms accordingly.
3.Enumerate all combinations of options properties
The project comes with a large test dataset covering several markets, each with many underlying assets. It includes European and American options on stocks, ETFs, indices, and futures, dividend-paying stocks and non-dividend-paying ones. We need to write logic that goes through all the test data and collects statistics on combinations of options parameters. The combination determines which pricing model to choose.
It's important to go through every single file, not just one file per underlying. A single underlying can have both American- and European-style options; this is common for options on futures.
4.Implement all the pricing models we need(later)
The task of enumerating all possible combinations of options parameters is addressed elsewhere. Once that's done, it will become clear exactly which models we need for pricing the test data we have on hand.
These models need to be implemented. This task can be split into subtasks.
5.Implement logic for computing the implied dividend rate
Implement logic for computing the implied dividend rate for those assets expected to pay dividends.
6.Write visualization logic for the source data
Debugging such a heavily mathematical project is impossible without good visualization at every stage of the algorithm. This task lays a solid foundation for that visualization. Specifically, it proposes visualizing the source data, some functionality, for example a CLI command, where you point it at a file and get an image (at minimum a PNG) as output.
7.Implement logic for approximating the raw option price(later)
The idea is that with poor data, when there are few option quotes and the ones available have wide spreads, it will be nearly impossible to approximate them directly in volatility space. The proposal is to first approximate the source data in price space, and only afterward convert that approximated price into volatility space.