Naar de inhoud

NAV, koers en vergoedingen

De engine die uitrekent wat alles waard is

Dit is het deel dat een spreadsheet met duizenden gekopieerde formules doet, zonder enige manier om ze te controleren. In FundFlow is het één berekening, in de database, in exacte decimale rekenkunde, over invoer die je kunt aanwijzen.

Geen creditcard nodig. Er wordt niets in rekening gebracht voordat je eerste 30 dagen voorbij zijn.

Wat de berekening precies doet

Elke maand dezelfde volgorde, per serie, per deelnemer. Er wordt niets afgerond voordat het moet.

  1. Brutorendement op fondsniveau

    Eindvermogen minus beginvermogen minus de nettomutaties, gedeeld door het beginvermogen. Stortingen die voor de maand zijn bevestigd tellen vanaf het begin van die maand, en dat is de conventie die een maandelijkse NAV-cyclus gebruikt.

  2. Waarde na rendement, per belang

    De beginwaarde van elke deelnemer groeit met het brutorendement voordat er een vergoeding af gaat, zodat de vergoeding over de winst wordt berekend en niet over de winst plus zichzelf.

  3. Beheervergoeding

    Het serietarief gedeeld door twaalf, over de waarde aan het begin van de maand. In basispunten op de serie ingesteld, nergens anders herhaald.

  4. Performancevergoeding boven de high-water mark

    Berekend over wat er na de beheervergoeding boven de mark van de deelnemer overblijft, tegen het serietarief. Is de mark niet gehaald, dan is er geen vergoeding.

  5. Nieuwe high-water mark

    De hoogste van de oude mark en de eindwaarde, per unit op het belang bewaard en meegenomen naar volgende maand.

  6. Koers per serie

    De som van de eindwaarden gedeeld door de uitstaande units. Nieuwe units worden tegen die koers uitgegeven, en dat maakt de instapkoers van volgende maand verdedigbaar.

De controlestap van de maandafsluiting, met de berekende koers per serie

Waarom het in de database draait

  • Exact decimaal, geen binaire drijvende komma

    Een spreadsheettotaal van 99.994,26 wordt 99.994,26000000001 en die rest stapelt zich op in de kolom. Postgres NUMERIC kent dat artefact niet, en TypeScript rekent in dit product nooit met geld: het formatteert alleen.

  • Eén implementatie, geen duizenden kopieën

    De waterval bestaat één keer en wordt identiek toegepast op elke deelnemer en serie. Er is geen regel waar iemand de formule één cel te ver heeft doorgetrokken.

  • Deterministisch en veilig te herhalen

    De berekening leidt alles af uit opgeslagen invoer en overschrijft haar eigen uitkomst volledig. Opnieuw draaien op een open maand met dezelfde invoer kan geen ander antwoord geven.

  • Getest tegen een echte administratie

    De engine heeft een testsuite op databaseniveau, inclusief golden-mastervergelijkingen: vaste invoer waarvan de verwachte uitkomsten tot op de cent tegen de eigen cijfers van een echt fonds zijn gelegd.

  • Verouderde uitkomsten worden gemarkeerd, niet bewaard

    Wijzig je een saldo na het berekenen, dan wordt de periode gemarkeerd als opnieuw te berekenen in plaats van stil het antwoord van gisteren te tonen.

  • Elk bedrag bewaart zijn invoer

    En juist daardoor kan elk getal op elk scherm een uitleg openen met de formule, de werkelijke invoer en de periode.

Waar dit echt over gaat

Bijna elk geschil in fondsadministratie is een meningsverschil over rekenwerk, en bijna elk daarvan komt uit de volgorde waarin is gerekend en niet uit de tarieven. Een performancefee vóór de beheerfee rekenen, of over een winst waar de fee zelf in zit, of tegen een high-water mark op fondsniveau in plaats van per houder: elk daarvan geeft een getal dat er goed uitziet en dat niet is. Geen van die fouten meldt zich.

De waterval bestaat hier één keer, loopt in de database, en wordt op elke serie en elke deelnemer identiek toegepast. Rekenen met geld gebeurt in exacte decimalen en niet in binaire floating point, dus een totaal bouwt geen restje op door de kolom. De berekening leidt alles af uit opgeslagen invoer en vervangt zijn eigen uitkomst volledig, en juist daardoor is opnieuw rekenen veilig: dezelfde invoer geeft elke keer hetzelfde antwoord, tot op de cent.

Vragen hierover

Waarom is het van belang dat het rekenwerk in de database gebeurt?

Om twee redenen. Postgres NUMERIC is exact decimaal, dus een totaal van 99.994,26 blijft 99.994,26 in plaats van 99.994,26000000001 te worden en verder op te lopen door de kolom. En de waterval bestaat als één implementatie in plaats van als duizenden gekopieerde cellen, dus er is geen regel waar iemand een formule één cel te ver heeft doorgetrokken. TypeScript rekent in dit product nooit met geld, het formatteert alleen.

Kan ik zien hoe een bepaald getal tot stand is gekomen?

Ja, voor elk berekend getal op elk scherm. Elk getal houdt zijn invoer en zijn formule vast, dus je kunt het openklappen en de cijfers zien die er echt in gingen en de periode waar ze bij horen. Datzelfde maakt de engine toetsbaar: er hoort een testsuite op databaseniveau bij, met golden-mastervergelijkingen tegen de eigen cijfers van een echt fonds.

Alle vragen en antwoorden

Reken het na op je eigen maand

Anker een fonds op de laatste maand die je met de hand afsloot, sluit de volgende in beide af en vergelijk. Dat is de enige proef die telt.

In je eerste sessie

  1. Maak een fonds aan en zet elke serie op met de echte beheer- en performancetarieven.
  2. Anker een openingspositie met de units van iedere deelnemer en hun huidige high-water mark.
  3. Sluit een maand hier en met de hand af, en vergelijk daarna de koers, beide feeregels en elke nieuwe mark.

Geen creditcard nodig. Er wordt niets in rekening gebracht voordat je eerste 30 dagen voorbij zijn.