-
Notifications
You must be signed in to change notification settings - Fork 10
/
Release_History.txt
249 lines (221 loc) · 13.1 KB
/
Release_History.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
Version 0.13
* Market refactoring: Using the interior mutability pattern, Market can now be used
as a regular, cloneable struct. Using mut is no longer required.
* Extension of Market with method for fetching/creating currencies and implicit
CachePolicy setting
Version 0.12
* Breaking change Market extensions:
- price cache with intrinsic mutability
- Market::new() is now async, since it reads currency list from database
- FX quote conventions consistent with market convention using
* new struct AssetSelector type to generate asset choice lists
* Module calendar is now a crate of its own: cal-calc
* Breaking change: change `id` members of assets to `i32` to align with postgresql
datatype `SERIAL`
Version 0.11
* Breaking change: A new enum `Asset` has been introduced. `Stock` and `Currency` are
the first two asset classes that could be the underlying of a transaction. On database
level it is ensured that each asset regardless of its class has a unique id. In most
cases, a `Currency` needs to be stored in the database to get its unique id before it
could used in any meaningful way.
* Breaking change: Sqlite3 is no longer supported, leaving PostgreSQL as the sole supported
database. As a consequence, sub-crates `finql-data` and `finql-postgres` have been
reintegrated into the main (and again single) crate as separate modules.
* Breaking change: Switch to Local time zone. Originally, internally Utc has been used
for all DateTime values (mainly related to quote times). On the other hand, input values
have been assumed to be in local time, resulting in a lot of conversions which (some
of them implicitly, e.g. when storing in database). In turned out to be difficult to
maintain consistency here. Therefore, we use now internally TimeZone Local. To make this
consistent with inputs form external sources (e.g. market data providers like yahoo,
alphavantage, etc.), the ticker struct has been extended by an (optional) TimeZone and
(optional) Calendar (to handle days where no quote is expected). In general, the TimeZone
should be set to the TimeZone of the market data source (e.g. the exchange) and the
valid business day calendar for this source (e.g. again the exchange calendar, which
may differ in one country for different exchanges or markets). As default, TimeZone
Local and the Calendar with only Saturdays and Sundays as bank holidays will be used.
* A new object handler has been added to allow storing arbitrary objects which implement
the Serialize and DeserializeOwned traits (e.g Calendar definitions).
* Implementation of a investment strategy simulation framework: Simulate the effects of
specified trading strategies by simulating the buying and selling assets, receive
dividends or interests, pay taxes and fees, etc. The simulation can be run for a
historical period, using the history of asset prices and fx rates to calculated the
performance. An example has been added that demonstrates the effects of different
total return strategies with or without assumptions about fees and taxes to be paid.
The resulting performance is plotted using the plotter crate. To support this new module,
to calculation of postions and performance have been improved and the concept of a
TimeSeries has been introduced.
Version 0.10
* Ordering for quotes: Implementation of traits Ord, PartialOrd, PartialEq and Eq. Quotes
are ordered by time and than by ticker id. This allows to use standard methods to sort
quotes for time series analysis.
* Improved async support: QuoteHandler, MarketQuoteProvider and CurrencyConverter are now
Send+Sync. Since is a breaking change (e.g. some functions expecting now Arc<QuoteHandler>
instead of &QuoteHandler), the version number is increased to 0.10.
Version 0.9
* Move to sqlx as database access abstraction layer. With sqlx, database access is now fully
async. Also, database connections are made via a pool of connections. Thanks to using
the query! macro of sqlx, SQL queries are now checkt for correct syntax and types used
at compile time. Database instances no longer need to be of mutable.
* Sqlite and PostgreSQL are still supported, but could no longer be used in the same
build. The (mis-)use of an in-memory sqlite database as cache for fx rates or the like is
no longer required due to the CurrencyConverter trait, therefore, using both sqlite
and PostgreSQL in the same build has lost much of its appeal.
* Due to compile-time checks of SQL queries the build process has become more complex. See
the Readme.md files of finql, finql-sqlite and finql-postgres for advice
Version 0.8
* major refactoring of data handler: data handler has been moved to separate sub crate,
same for sqlite and postgres adaptors. Therefore, it's up to the user if she wants to include
sqlite or postgres or both databases (or none, using a custom implementations of AssetHandler,
TransactionHandler, etc.)
* New trait CurrencyConverter for calculating fx rates, e.g. while adding cash flows in different
currencies. The database adaptors implement this trait (so databases could still be used to
get fx exchange rates), but there is also a SimpleCurrencyConverter which can be initialized by
a set of fixed fx rates, without the need to push some external fx rates in an ad hoc database to
use them for conversion
Version 0.7.5-0.7.7
* In total: no change (I was just to fast with publishing and later reverted all changes
after I realized my fatal error, sorry)
Version 0.7.4
* In database handlers, store reference to database connections instead of owning
the connection to allow (external) database pooling
* extensions of AssetHandler and TransactionHandler traits by additional methods
* bug fix in Transaction update query
Version 0.7.3
* New market data source: comdirect (via scraping http web pages)
Version 0.7.2
* Support for alpha vantage as additional market data provider
* `Ticker` has been extend by a `factor` for scaling quotes (e.g.
scale quotes in British pence to British pounds)
* Utility functions for converting various date formats into DateTime<Utc> has
been moved to a separate crates
* Updated unit tests and examples.
* Replacement dependency on `yahoo-finance` by `yahoo_finance_api`, since the
latter does not panic.
Version 0.7.1
* `Market` holds now a market quote data base (implementing trait QuoteHandler)
* `Market` holds now list of support market data quote providers
* Added method for updating quotes to `Market`
Version 0.7.0
* `MarketDataSource` is now en `enum` instead of a `struct`. In the database, it is no
longer stored in a separate table, but as `TEXT` field in `ticker`. The number of
supported market data sources will hopefully increase over time. On the other hand,
the method how to fetch quotes differs for each market data source. Therefore, it is
in the responsibility of the application to maintain the supported market data sources,
i.e. a market data source is not just data, but requires appropriate implementations
of specific functionality.
Version 0.6.2
* Support for eodhistoricaldata as third market data provider added
Version 0.6.1
* Fetching market data quotes from yahoo finance or gurufocus.com (requires a API token)
* Storage of fetched market data in database
Version 0.6.0
* Support of InMemoryDB has been dropped in favor of Sqlite's feature of in-memory database
Since the supported database feature grew in complexity it is unlikely that a naive
in-memory database will have the same flexibility and performance as an in-memory Sqlite database.
All examples and test have been updated.
Version 0.5.4
* Insert asset in database with optional name override (attaching ' (NEW)')
* Extract asset by ISIN from database
* Negative operator added to CashAmount
* Rounding methods by convention added to CashAmount
* Storing rounding conventions by currency in database
* Improvements for easier handling of FX rates
* Unit tests for CashAmount added
* Some improvements in handling databases
Version 0.5.0
* Support for fx quotes, simplified insertion and request of quotes
* Addition and substraction (optional) CashAmount entities with
automatic lookup of fx rates
* Tests and example extended for testing the new features
* Ticker include now a reference to Asset and extended by a priority field
* DataHandler trait has been split in to separate traits, AssetHandler
and TransactionHandler
* Traits TransactionHandler and TickerHandler require AssetHandler to
be implemented, too
* The form Amount has been renamed to CashAmount
* Some commonly used structs are re-exported on library level
Version 0.4.4
* DataHandler for PostgreSQL implemented (including update of
example transaction_db)
Version 0.4.3
* As an alternative to sqlite3 a simple In-Memory DB handler has been
added (currently without guarantee of referential integrity; if this
is required, an sqlite in-memory db could be used). This
made some changes to the underlying data structures necessary.
* The sqlite examples have been renamed and generalized to support
different databases as storage devices.
Version 0.4.2
* New QuoteHandler trait for handling data related to market quotes
* Implementation of QuoteHandler for sqlite3
* Example for QuoteHandler with sqlite3 added.
Version 0.4.1
* DataHandler extended for transactions
* Sqlite data handler implemented for transactions and refactoring
* Refactoring of Transaction struct
* sqlitedb example extended
Version 0.4.0
* DataHandler trait for abstraction of data storage facility added
* Sqlite handler as example of DataHandler implementation added
* Basic containers for assets, transactions and market quotes added
Version 0.3.3
* Calculation of yield-to-maturity for fixed income products added.
This needs to be optimized, since currently the cash flow vector is
copied instead for borrowed.
* More elaborate bond comparison example
* Assert macro for fuzzy comparison of floats
* Test cases for discounting added
* New struct `CashAmount`
Version 0.3.2
* CompoundingMethod added
* New trait Discounter for discounting future cash flows
* Operator overloads for TimePeriod add
Version 0.3.1
* CashFlow moved to new module fixed_income
* New trait FixedIncome which provides cash flow rollout method
* Re-exports of selected traits, types and functions removed from lib.rs
Version 0.3.0
* Calculation of cash flow rollout is now completed, including payment day
adjustments. The example and unit tests have also been updated.
* Business day adjustment rules have been moved to separate module and
adjustment rules have been implemented
* New struct Market, which will serve as provider for market data, either as
in-memory container or adapter to some external storage facility. The current
implementation is only a stub.
* EasterHoliday accepts now also first and last year (required for TARGET calendar)
Version 0.2.3
* Implementation of Act/Act ICMA added. This had some wider consequence.
Application of Act/Act ICMA requires additional parameters for calculating
year fractions (time period and rolling date), which have been added as optional
parameters to the year fraction method. Since Act/Act ICMA is only applicable
under certain conditions, the year fraction method can fail. Therefore, a
Result is returned instead of float. In turn, cash flow rollout may also
fail.
* Since the year fraction method returns now a Result it is also flagged
as an error, if some 30/x method is applied to the period of 30th to 31st
of the same month, in which case the method is also not applicable.
Version 0.2.2
* Cash flow type added
* Currency type added
* TimePeriodError and CouponDate Error are now enums rather than structs
* DayCountConv moved to a separate module
* Implementation of day count methods (except for act/act ICMA) with many test cases
* New utility module
* First simple version of cash flow rollout (without adjustments)
Version 0.2.1
* Data structure for bonds added with example reading data from JSON
* New types for day count conventions and business day adjustments
* NthWeedDay has been renamed to NthWeek (of month), which seems to be more appropriate
* Implementation of Serialization/Deserialization of TimePeriod
Version 0.2.0
* Replacement the SimpleCalendar and the Calendar trait by one Calendar struct. At
initialization, the holiday calendar is computed for a range of year by specifying
a set of holiday rules. A very broad range of holiday calendars could be generated
this way. The method `is_holiday` returns true only for holidays, but not for
weekends. There is another method `is_weekend` to check for that. The new
method `is_business_day` checks wether the given date is neither a weekend nor
a holiday.
Version 0.1.3
* Implementation of TimerPeriod is no longer a trait, but a struct. The calendar
required for BusinessDaily time period is now an external parameter. This seems
to be a better choice, since a calendar is more a parameter than part of a method.
Calendars may also be subject to chance, though only rarely.