All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.2.9 - 2024-10-27
- All variants of Generalised BSM model impl'd for vanilla option.
0.2.8 - 2024-10-16
- BarrierOption Payoff and Monte-Carlo
- fix discount factor for Bachelier backend
- (#271) temp fix for Polars/hashbrown issue
- Merge pull request #268 from broadhed/267-bachelier-options-pricer-issue
- Merge pull request #266 from avhz/dependabot/cargo/plotly-0.10.0
- Merge pull request #265 from avhz/dependabot/cargo/polars-0.43.1
- Merge pull request #261 from avhz/dependabot/cargo/ndarray-0.16.1
- add tests, fix impl
- Add Netherlands calendar
- monte-carlo example
- vanilla option monte-carlo
- vanilla option monte-carlo
- market data
- fix some comments
0.2.7 - 2024-08-05
SpotCurve
,DiscountCurve
,ForwardCurve
- underscored whitespace between badges
curves
module progress #96curves
module progress #96- adjust currencies macro
- Update README.md
- Add license scan report and status
- update module table and fix badge whitespaces, resolves #249
- Update README.md
Curve
struct and impl, with placeholder modules for various curves.- Merge remote-tracking branch 'MeetThePatel/strongly-typed-currencies' into strongly-typed-currencies
- Merge branch 'avhz:main' into strongly-typed-currencies
- re-working Curve and Surface. Again..
- re-working Curve and Surface. Again..
0.2.6 - 2024-07-04
- Merge pull request #221 from yfnaji/finite_difference_pricer_adjustments
- Amend function name from matrix_multiply_vector to general_matrix_multiply_vector
- Amend tridiagonal_matrix_multiply_vector() by removing match statement and manually add first and final entries outside loop
- Amend schemes to incorporate newly created tridiagonal_matrix_multiply_vector() and amendment in invert_tridiagonal_matrix()
- Introduce function exclusively for multiplication between tridiagonal matrix and vector + amend invert_tridiagonal_matrix() to return matrix representation using only diagonal and sub/super diagonals arguments
- Amend error threshold and target values for unit tests
- Remove now obsolete time_structure()
- Remove obsolete diagonal functions + amend condition functions
- Amend schemes to approximate transformed Black-Scholes equation
- Amend argument datatype from functions to f64 and amending create_tridiagonal_matrix() accordingly
- Adjustments in crank_nicolson()
- Adjustments in implicit()
- Adjustments in explicit()
- Refactor in create_tridiagonal_matrix()
- Correct error in implementation for call/put boundary conditions + remove unnecessary argument for boundary_condition_at_time_n()
- Remove unnecessary parameter from create_tridiagonal_matrix()
0.2.5 - 2024-06-28
- Cleanup from the exponential interpolation commit.
- Fixed exponential interpolator.
- minor clippy lints.
- Merge branch 'main' into fix/remove_warnings
- Fixing tests.
- Merge pull request #223 from avhz/dependabot/cargo/statrs-0.17.1
- Update README.md (expired Discord link)
- Finite-Difference Pricer unit tests: ITM and OTM options
- Finite-Difference Pricer unit tests: ATM options
- Finite-Difference Pricer unit tests: ATM options
- Merge pull request #211 from yfnaji/finite_difference_pricer_with_vec
- Take variable declaration outside of loop
- Separate unit tests for each method and amend according to previous changes on the branch
- Interpolate for odd number price_steps + encapsulate some functions
- Ignore clippy's "too_many_arguments" warning
- Remove rounding to 2 decimal places
- Formatting + add data type annotation
- Formatting in invert_tridiagonal_matrix()
- Amend logic for the construction for the inverse of a tridiagonal matrix to use match + avoid indexing
- Amend for loop in matrix_multiply_vector() to avoid indexing
- Change match to if statement for american time stop step
- Amend matrix_multiply_vector to use slice as data type of argument
- Minor amendment to unit test
- Amend Unit tests
- Reformat TypeFlag match
- Rewrite constructor to use assert macros
- Amend explicit(), implicit() and crank_nicolson() to utilise time_steps and price_steps attribute + import Duration for unit tests
- Remove time_steps() and price_steps()
- Set time_steps and price_steps attributes in constructor
- Add two attributes: time_steps and price_steps
- Use T variable in implicit()
- Introduce T variable to represent time to maturity and amend call/put_boundary functions + minor formatting
- Introduce year_fraction() function + amend time steps calculation to use Date objects
- Utilise new arguments in constructor
- Replace time_to_maturity argument with evaluation_date and expiration_date
- Import relevant time structs + functions
- Refactor method names
- Condense matrix multiplication methods into one method + only have one method to produce tridiagonal matrix
- Rewrite invert_tridiagonal_matrix() to take "trimmed" tridiagonal matrix data structure
- Amend function names create_tridiagonal_matrix_without_zeros -> create_trimmed_tridiagonal_matrix and tridiagonal_matrix_multiply_vector -> trimmed_tridiagonal_matrix_multiply_vector + formatting
- Amend explicit() and crank_nicolson() to utilise create_tridiagonal_matrix_without_zeros()
- Amend tridiagonal_matrix_multiply_vector() to handle new "no-outer zeros" representation of matrix
- Create new method to represent tridiagonal matrix without storing outer zeros
- Remove 'get' from function names
- Add finite_difference_pricer_mod
- Code for FiniteDifferencePricer struct + tests
0.2.4 - 2024-04-24
- Update dependencies.
- Merge pull request #205 from y5/portfolio_getweights
- GitHub actions (fix failing tests)
- GitHub actions (split test actions: unit, doc, examples)
- GitHub actions (test)
0.2.3 - 2024-03-15
- update plotters dep to GitHub repo (attempt to fix docs building issue #191)
- fix some tests
- minor book edit, CI edits.
- cargo_build, cargo_test
- deploy book, again.
- deploy book, again.
- deploy book
- cargo_test
- Create mdbook.yml
0.2.2 - 2024-03-13
- fix exponential distribution constructor doc comment
0.2.1 - 2024-03-13
- started an mdBook
0.2.0 - 2024-03-12
- Rootfinding routines (Bisection, Brent, Newton-Raphson) and fixed unit/doc-test failures.
- restructure
Money
module intoInstruments
andCashflows
- minor doc edits
0.1.1 - 2024-03-04
- clippy lints.
0.0.49 - 2024-02-25
- Merge branch 'main' of github.com:avhz/RustQuant
- remove more unused dependencies.
0.0.48 - 2024-02-24
- remove unused dependencies.
0.0.46 - 2024-02-24
- added
derive_builder
crate.
- remove feature flags, move
curves
intodata
module. - day counting submodule split into files.
OffsetDateTime
refactored toDate
- Merge branch 'main' of github.com:avhz/RustQuant
- working progress: exponential interpolator
0.0.45 - 2024-02-04
- moved references to separate .md file
- Merge pull request #181 from maacl/patch-1
- moved stochastic process models to
models
module.
0.0.44 - 2024-02-01
- Implied Volatility implementation (Let's Be Rational - Peter Jaeckel)
- Merge remote-tracking branch 'refs/remotes/origin/main'
0.0.43 - 2024-01-31
- improve fft fbm generator
- fix naming THRESHOLD
- fix Gaussian cdf test, values as sympy and mpmath fix
- missing docs
- build error
- resolve timedependent issues
- Slight re-factor of IV module.
- Merge pull request #174 from lukaskiss222/feature/implied_volatility
- separators
- remove neg before comparator + new test case
- solve most clippy issues
- errorfunctions erfc for cdf
- small fixes
- must use
- apply clippy
- remove dbg
- Add middle box test
- documentation fix
- documentation
- extreme case precision 1e-13
- ITM + extreme case price ~ 1e-19
- OTM passed
- sync merton jump
- Merge pull request #171 from lukaskiss222/fix-inverse-gaussian-cdf
- Merge pull request #146 from dancixx/main
- Merge remote-tracking branch 'upstream'
0.0.42 - 2023-12-21
- update barrier pricing
0.0.41 - 2023-12-16
- implemented get quote for yahoo finance api
0.0.40 - 2023-12-13
- Merge branch 'main' into interpolation
0.0.39 - 2023-11-26
- denmark calender: general prayer day is no longer a public holiday from 2024
- Merge pull request #159 from robertchristensen/docs/fix-warnings
- #142 - tests for denmark calendar
- #142 - tests for calendars & update Hong Kong calendar
- #142 - tests for calendars
0.0.38 - 2023-11-14
- #142 - Add more calendars (Czech Rep., Denmark, Finland, France, Germany, Hong Kong)
- Fix some clippy lints.
- Add ISO code implementations (ISO-4217, ISO-3166, ISO-10383)
- #142 - Add calendar boilerplate
- #142 - Add calendars (Argentina, Botswana, Brazil, Chile, China)
0.0.37 - 2023-11-12
- (#150) Fix gitignore problem.
- (#150) Re-added correct logo.
- (#150) Added
Release-plz
workflow. - (#150) Added
Release-plz
workflow.
- @avhz: Added Constant Elasticity of Variance (CEV) model process generator.
- @kinrezC: Added Merton Jump Diffusion and Brownian Bridge process generators.
- @autoparallel: Added
TimeDependent
parameters for all stochastic processes.
- @dancixx: Fractional Ornstein-Uhlenbeck process generator.
- @aatmunbaxi: KNN classifier.
- @avhz: Added 5% padding to the y-axis in the
plot_vector
macro. - @avhz: Updated the
curves
module. - @avhz: Included a yield curve interpolation example here with a plot output here
- @avhz: Added
curves
module for rate curves (work in progress).- Currently only supports linear interpolation, but will add more interpolation methods soon.
- @avhz: Added basic
Portfolio
interface. Work in progress. - @avhz: Added power option contract pricer.
- @avhz: More Greeks for BSM model: theta, rho, phi, zeta, strike-delta, strike-gamma.
- @avhz: More Greeks for BSM model: vega, vomma, ultima, vega bleed (adding more soon).
- @avhz: Greeks for BSM model: delta, vanna, charm, lambda, gamma, zomma, speed, colour (adding more soon).
- @avhz: Clean up year fraction computation for some options.
- Generalised Black-Scholes-Merton option pricer by @avhz.
- Bachelier and Modified Bachelier option pricers by @avhz.
- Added
Result
wrapping forstatistics
module.
- Re-licensing from GPL3 to dual Apache2/MIT licenses.
plotting
mod deprecated,plot_vector
is now a macro.Statistic
trait for computing statistics onVec<f64>
objects.- Remove
utilities
module (macros and plotting are in root module now).
Cashflow
s can now be added, subtracted, multiplied, and divided.Leg
s are now available, which are collections ofCashflow
s.
- 150+ currencies added (definitions according to ISO 4217).
- Basic arithmetic operations (addition, subtraction, multiplication, division) on
Money
objects. - Fractional Brownian Motion generator.
- Compute returns (simple, arithmetic, absolute) on Yahoo! Finance timeseries downloaded into Polars
DataFrame
s.
- Moved
options
andbonds
modules to the parent moduleinstruments
. - Moved
cashflows
,quotes
andcurrencies
modules to the parent modulemoney
.
- Updated regression to use QR or SVD decomposition.
- Simple linear regression using
nalgebra
.
- Gradient descent optimizer for functions
$f: \mathbb{R}^n \rightarrow \mathbb{R}$ .
- Additional stochastic process generators
- Ho-Lee model
- Hull-White model
- Black-Derman-Toy model
- Download time series data from Yahoo! Finance.
- Read (write) from (to)
.csv
,.json
, and.parquet
files, using PolarsDataFrames
.
- Arithmetic Brownian Motion generator.
- Gamma, exponential, and chi-squared distributions.
- Forward start option pricer (Rubinstein 1990 formula).
- Gap option and cash-or-nothing option pricers (currently adding more binary options).
- Asian option pricer (closed-form solution for continuous geometric average).
- Heston Model option pricer (uses the tanh-sinh quadrature numerical integrator).
- Tanh-sinh (double exponential) quadrature for evaluating integrals.
- Plus other basic numerical integrators (midpoint, trapezoid, Simpson's 3/8).
- Characteristic functions and density functions for common distributions:
- Gaussian, Bernoulli, Binomial, Poisson, Uniform, Chi-Squared, Gamma, and Exponential.