Releases: MadeInPierre/finalynx
v1.23.1
v1.23.0
v1.22.4
v1.22.3
v1.22.3 (2023-09-18)
Fix
- fix: clarify signup for 2FA, simulation progress bar (
3b5c9c4
)
Documentation
-
docs: add simulation template tutorial (
c15b97c
) -
docs: add full example (
de11f6e
) -
docs: add budget tutorial (
0fe1513
) -
docs: add simulation tutorial, fix typos (
8c6ab9a
)
Style
- style: minor improvements (
57b2424
)
v1.22.2
v1.22.2 (2023-08-10)
Minor feature
- fix(simulation): add salary income & expense growth (
84e6524
)
You can now set the growth rate of your salary and expenses. For example, if you earn 1000€/month
and your salary grows by 3% every year, you can set the income_growth
to 3% and the salary will
be updated every year (1/12th every month in reality).
You can also set the expenses_follow
to 100% to follow the income growth:
- If your salary grows by 3%, your expenses will grow of the same amount (100% of the income growth).
- If you set
expenses_follow
to 0%, your expenses will stay the same (0% of the income growth). - If you set
expenses_follow
to 50%, your expenses will grow by half of the income growth (50% of the income growth).
To use this new feature, you can use the new Salary
event:
livreta = Line("Livret A", ...)
...
assistant = Assistant(
...,
simulation = Simulation(
events=[
Salary(
livreta,
income=3000,
expenses=2000,
income_growth=1, # <- 1% growth every year (net of inflation)
expenses_follow=75, # <- Save 25% of the income growth
name="My Job",
),
...
]
)
)
v1.22.1
v1.22.1 (2023-08-10)
Minor feature
- fix(simulator): show portfolio evolution in dashboard, cleanup (
78c1782
)
Nothing to change in your config, simply launch the dashboard (with a simulation config even if it's only Simulation()
) to see your portfolio's evolution based on your events! See the previous release for more information about the simulator.
v1.22.0
v1.22.0 (2023-07-31)
Tutorial to use the new simulator
The simulator can apply Actions
wrapped around an Event
instance. Events define when to perform the action, and can define an optional Recurrence
to perform the action regularly (e.g. every month, at the end of each year, ...).
There are currently three supported actions for now:
- ApplyPerformance: Change the amounts of each
Line
depending on the specifiedLinePerf
expected investment performance. By default, this action is already added in the list of events in the configuration and executes on each December 31st. - AutoBalance: For folders and lines that use
TargetRatio
targets, Finalynx will automatically apply the ideal amounts for eachLine
. This corresponds to following the Finalynx recommendations. By default, this event is automatically added and executed every 3 months. - Salary: Specify which
Line
in the portfolio should receive a specific amount each month. This class is simply a shortcut to:
Event(AddLineAmount(your_account, 2500), recurrence=MonthlyRecurrence(day_of_the_month, until=end_date))
To activate the simulator with the default events, add the following to your config :
from finalynx import Portfolio, Assistant, Simulation
portfolio = Portfolio()
Assistant(portfolio, ..., simulation=Simulation()).run() # activate the simulation (with default behavior)
Some other parameters can be set:
livreta = Line("Livret A", ...)
portfolio = Portfolio(children=[..., livreta, ...])
buckets = [...] # Create a list with the references to your buckets (if any)
envelopes = [...] # Create a list with the references to your envelopes (if any)
assistant = Assistant(
portfolio,
buckets,
envelopes,
..., # Other options
simulation=Simulation(
events=[ # Your personal config of events (salaries for now, more coming soon!)
Salary(livreta, income=2300, expenses=1400, end_date=date(2024, 11, 30)),
Event(AddLineAmount(livreta, 3500), planned_date=date(2024, 4, 10), name="Prime"),
Event(AddLineAmount(livreta, 3500), planned_date=date(2025, 4, 10), name="Prime"),
Salary(livreta, income=3000, expenses=2000, start_date=date(2025, 1, 1), name="Futur Job"),
],
inflation=3.0, # Percentage of inflation, will reduce each line's performance by this much
end_date=date(2063, 4, 5), # Defaults to 100 years after today
step_years=5, # Show a summary of the portfolio's total worth every X years in the console
default_events=True, # Add default events to the ones specified above, defaults to True
),
).run()
Please open a discussion topic if you're interested for more information!
Build
- build: bump finary_uapi to 0.1.4 (
dc4bab6
)
Documentation
- docs: add readme french (#137) by @Strawbang
Features
v1.21.0
Feature
I recently discovered that there is an open Python API to access N26 accounts, so of course I had to make a daily expense manager based on it:
The idea is to ask a few questions about each expense :
- If you pay all/part of the expense for someone else, how much did you actually pay for yourself?
- Have they paid you back yet?
- Was this expense necessary? It could be fixed, variable, for hobbies, purely optional, for fun, ...
- etc.
Then, we could show simple statistics for each month (and cumulative yearly expenses) about how much you spent on each category/necessity.
Everything is stored on a Google Sheets on our personal account which acts as a database and is accessed through a Python API.
➡️ Since this feature is probably pretty niche, I won't write documentation about it yet. If you're interested, please open a new discussion topic on GitHub!
Documentation
v1.20.3
v1.20.2
Fix
- sidecar: Add option to hide renders for expanded folders (
560d4fa
) - recommendations: Sort by total delta (
5e686ef
)
Documentation
⚠️ SMALL BREAKING CHANGE ⚠️
If you were using the (very recent) sidecar feature introduced in v1.20.0 by setting them in your Assistant
parameters :
Assistant(..., sidecars=[
"[ideal],[delta]",
"[delta]",
])
You must now use the new Sidecar
class:
from finalynx import Sidecar # Add this line on the top of your config file
...
Assistant(..., sidecars=[
Sidecar("[ideal]", "[delta]", "MY TITLE", render_folders=False),
Sidecar("[delta]"),
])
Here are the explanations for this feature. Setting sidecars from the command line options remains identical:
python your_config.py --sidecar="[ideal],[delta],MY TITLE,False"