Skip to content

Releases: MadeInPierre/finalynx

v1.23.1

21 Jan 14:48
Compare
Choose a tag to compare

v1.23.1 (2024-01-21)

Chore

Ci

  • ci: manual bump to v1.23.0 (0daa0cc)

Fix

  • fix: update finary-uapi to 0.2.0 (a547db0)

v1.23.0

15 Jan 16:33
Compare
Choose a tag to compare

v1.23.0 (2024-01-15)

Feature

  • feat(dashboard): add layered evolution graphs (#150) by @gcoue

More graphs available in the dashboard with view per classification (envelopes, asset classes, line by line, ...) by @gcoue (6f0d1b3)

v1.22.4

13 Jan 15:53
Compare
Choose a tag to compare

v1.22.4 (2024-01-13)

Chore

  • chore: update full example (00138dd)

Fix

  • fix(fetch): change credit card to negative amount (#147) by @gcoue

  • feat(simu): Add a flag to render portfolio state for each simulation step (#147) by @gcoue

v1.22.3

18 Sep 14:48
Compare
Choose a tag to compare

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: update readme french (#141) by @Adamou02

  • docs: add simulation tutorial, fix typos (8c6ab9a)

Style

  • style: minor improvements (57b2424)

v1.22.2

10 Aug 14:17
Compare
Choose a tag to compare

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

10 Aug 12:50
Compare
Choose a tag to compare

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

31 Jul 20:53
Compare
Choose a tag to compare

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 specified LinePerf 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 each Line. 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

Features

  • feat(simulation): simulate your portfolio's future (#136)

    • feat: create timeline structure, display worth evolution

    • feat: add default event to apply yearly performance

    • feat: add autobalance default quarterly event

  • fix: ask before fetching from N26

  • docs: add docstrings (3349f66)

v1.21.0

15 Jul 16:53
Compare
Choose a tag to compare

Feature

  • budget: Manage your daily expenses (N26 only) (#135) (6209b40)

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:

image

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.

image

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

  • Visual tweaks, update screenshots (efaa8b8)
  • Add envelopes and sources tutorials (20a9a82)
  • Organize tutorials, add awesome badge (62b249d)
  • Improve installation guide readability (a57f996)
  • Create tutorials table of contents online (e690ab0)

v1.20.3

07 Jun 15:48
Compare
Choose a tag to compare

Fix

  • Import error caused crash in v1.20.2 (bcd0171)

Documentation

  • Write tutorial for targets, tweaks (3dd0883)
  • Update readme tutorial links (c4beabf)

v1.20.2

06 Jun 21:33
Compare
Choose a tag to compare

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"