Importing only monthly quotes

I’m a new user - well, potentially. Or - probably.

(Ich spreche auch Deutsch, also deutschsprachige Antworten sinds völlig in Ordnung.)

I’m moving from Windows 10 (my old computer) to Linux (my new computer). At first I was looking for ways to convert my set of financial spreadsheets from Excel to LibreOffice Calc. Then I discovered PP.

I will ask several questions before trying to make the switch.

This first question is about quotes. If I understand correctly, PP imports daily quotes. My spreadsheet does not. It only contains quotes for the days on which I buy or sell shares. Reason: quotes on other days are not relevant. In addition, it contains quotes for the first bank day of the month. Reason: I track my performance on a monthly basis.

Is it possible to do the same in PP?

If I import historical quotes from my spreadsheet, then use automatic quote retrieval in PP, will PP then fill in all missing quotes? Will it even overwrite the quotes I imported manually from my spreadsheet?

Last quote-related question is about stock splits. If I bought 25 shares for $30 per share, and after a few years the stock price is $40. Then there was a 1:5 stock split. One way to model this is as if I bought 125 shares for $6 per share. So the historical quote has to be changed. I DO NOT DO THIS. Reason: I paid $30, not $6, and I bought 25 shares, not 125. My modeling is to keep all historical data unchanged. On the day of the split, I “buy” 100 shares for $0, and the stock price immediately changes from $40 to $8. Just before the split I own 25 shares of $40, or $1000 in total. Just after the split I own 125 shares of $8, or still $1000 in total. I think this is cleaner. My question is: how does PP model a stock split?

Thanks in advance.

By the way, if this is not an acceptable way to ask questions, please be gentle on me. I’m a new user, and I’m willing and happy to learn.

Our preferred recommendation is reading in the forum and manual :smiley:

Correct

Not in the way PP is built. Technically you could turn off the quotes update and enter the ones you like manually.

csv, please!

Yes

No

PP is using the same model. Destruktiv. This is needed because many quote provider only offers splitt clean quotes.

Whatever you like. But performance-wise, this:

is a neckbreaker performance-wise!

No worries, bth all your questions could have been answered within 10min of trying and playing around with PP.

1 Like

Thanks for your elaborate answers. And no, I’m currently not (yet) able to try PP for myself.

Could you please clarify why my way of handling a stock split is “a neckbreaker performance-wise”?

Let’s compare the two methods (Tx is a point in time):

  • T1: I buy 25 shares for $30 per share.
  • T2: The stock price is $40. The stock splits 1:5. I now have 125 shares of $8 per share.
  • T3: The stock price is $9.

Now let’s do the standard modelling:

  • T1: I buy (split-corrected) 125 shares for (split-corrected) $6 per share.
    Influx into portfolio: $750
  • T2: The stock price is (split-corrected) $8. The stock splits 1:5, but that’s not relevant because everything is already split-corrected.
    Portfolio value: $1000 (before and after the split).
  • T3: The stock price is $9.
    Portfolio value: $1125.

Compare this to my way of modelling:

  • T1: I buy (historically correct) 25 shares for (historically correct) $30 per share.
    Influx into portfolio: $750
  • T2: The stock price is $40. Portfolio value: $1000. The stock splits 1:5, so I now have (historically correct) 125 shares of $8 per share.
    Portfolio value: $1000 (unchanged).
  • T3: The stock price is $9.
    Portfolio value: $1125

The bold text indicates that everything is identical in both ways of modelling. This holds for the influx, the portfolio value at any time, and the outflux if relevant (not mentioned in this example).

If everything is identical, how can one method be “a neckbreaker performance-wise” and the other be correct?

Why? You could easily work with the sample file, or create your own samples!

It’s been answered multiple times.

In a nutshell. Performance wise 0 value stocks do not exists. Just do the math.

  • Date of buy → 0€
  • Next day(s) what ever value → performance nearly infinity

Because you are not considering performance. You are looking at amounts, not performance.
Again, create an example, play around, read in the forum, and in case you still face issues in understanding, do the simple math with a stock being worth 0,01€ (because PP won’t let you enter 0,00€) and put a quote on it at a later point in time.

I still do not understand.

Let’s modify the example to “close” it: at T3, we will sell the entire position for $1125.

The performance can now be calculated:

  • At T1, the influx into the portfolio is $750.
    Both with standard modelling and with my way of modelling.
  • Just before the split at T2, the portfolio is worth $1000. Unrealised performance is $250/$750 (+1 if you like) over the time period from T1 to T2.
    Both with standard modelling and with my way of modelling.
  • Just after the split at T2, the portfolio is still worth $1000. Unrealised performance is $250/$750 (+1 if you like) over the time period from T1 to T2.
    Both with standard modelling and with my way of modelling.
  • At T3, the stock price is $9. We sell the portfolio for $1125. Realised performance is $375/$750 (+1 if you like) over the time period from T1 to T3.
    Both with standard modelling and with my way of modelling.

As you see, the way of modelling is irrelevant. The performance is identical in both cases.

The reason is that we view the portfolio as a kind of black box. What happens inside (stock split, in this case) is not relevant. The only relevant parameters are the influx and the outflux, and of course their timings. That’s for the realised performance. The unrealised performance can be calculated in the same way, not by using the real outflux (because that doesn’t exist), but by using the theoretical outflux if we were to liquidate the portfolio at that moment.

The black-box principle allows us to be oblivious to what’s inside. Whether it’s a single stock, a collection of stocks (that’s a portfolio), a savings account, an options or futures position, a leveraged product, bitcoins, South African Rands, or whatever… we don’t care.

The only things that matter are

  • For realised performance:
    Real influxes, real outfluxes, and their timings
  • For unrealised performance:
    Real influxes, potential outflux (“if I were to liquidate now”), and their timings
  • For compound performance:
    Real influxes, real outfluxes, and the potential outflux (“if I were to liquidate now”), and their timings

(where the timing of the potential outflux is always ‘now’).

The way of modelling does not occur in the above three points. Because it is irrelevant. Why is it irrelevant? Because we use the black-box approach. What counts are real influxes, real outfluxes, and the potential outflux if we were to liquidate - nothing else.

In short because we start turning in circles.

You wrote:

I answered:

Further I said:

That’s all I can say.
Please carry on with your preferred way and do it the way you like, but performance calculation is way more than in and out.

It’s a pity you do not explain, or at least provide an example of, what you describe as “way more”. I don’t see anything more. Only influx, outflux (realised or unrealised), and their timings.

Whether it’s a stock position or a savings account.

Or even a plant grower. Whether he buys n small plants, grows them o n large plants, then sells them - or he buys n small plants, lets them grow a bit, splits each of them into 5 smaller plants, lets them grow, then sells 5n plants - it doesn’t matter. Only influx, outflux, and their timings.

Unless, of course, you can prove otherwise. Which I’d like, because that would grow my knowledge.

I did. Did you do the math? Did you played around to gain your own intel? Did you read the forum and the manual?

Yes in your world this fits. In the economic world: Water, work-time, fertilizer, pesticides, and others are taken into billing and accounting.

I’m off this discussion now. At least to me, it doesn’t appear you’d like to grow knowledge, rather than finding someone telling you your way is right.

SOLVED

I decided to ask two randomly selected AIs by entering my question in https://arena.ai/ . Note that the numbers are slightly different because I entered my question from memory.

This is what I asked:


I want to calculate the money-weighted rate of return (MWRR, also called IRR) of my investments. I find it difficult to model a stock split.

Assume the following sequence of events, where tx denotes a point in time:
t1: I buy 25 shares for $30 per share.
t2: The share is now worth $40. There’s a 1:5 stock split. Directly after the split, I own 125 shares, which are worth $8 per share.
t3: The share is now worth $10.

I found two methods for calculating the MWRR.

Method 1, the traditional method:
t1: I buy (split-adjusted) 125 shares for (split-adjusted) $6 per share.
t2: The stock split needs not be modelled, because t1 already used split-adjusted values. The share is now simply worth $8.
t3: The share is now worth $10.

Method 2, my preference:
t1: I buy (the historically corect number of) 25 shares for (the historically correct value of) $30 per share.
t2: The share now has a (historically correct) value of $40 per share. There’s a 1:5 stock split. I model this as a buy og 100 shares for $0, followed by an immediate change of the share price to the (historically correct) value of $8.
t3: The share is now worth (historically correct) $10.

If I calculate the MWRR of this investment for any period from tx to ty, is there any difference at all in outcome between Method 1 and Method 2?


I cannot literally paste the answers because they contain special formatting, so do try for yourself if you like.

Some fragments can be copied here. I think they are quite clear.


No, there is no difference in outcome.

For any period tx​ to ty​, Method 1 (split-adjusted) and Method 2 (zero-cost purchase) will produce exactly the same Money-Weighted Rate of Return. The two methods are mathematically equivalent because they generate identical cash flow vectors and identical portfolio valuations at every point in time.

General Proof

A stock split is a non-cash event. It changes the quantity of shares (QQ) and the price per share (PP) by inverse factors (kk and 1/k1/k), leaving the total market value (V=Q×PV=Q×P) unchanged.

  • Method 1 applies the adjustment retrospectively to all pre-split data. The number of shares is multiplied by kk, and all historical prices are divided by kk. The product Q×PQ×P at any historical date remains exactly the same.

  • Method 2 records the split as a transaction that adds (k−1)Q(k−1)Q shares at a cost of $0. Since the cash flow is zero, it does not alter the cash flow vector used in the MWRR calculation. The portfolio value immediately after the split is (kQ)×(P/k)=Q×P(kQ)×(P/k)=Q×P, identical to Method 1.

Since MWRR depends solely on the timing and magnitude of cash flows and the market value of the portfolio at those times, and since both methods produce identical values for these variables at every txtx​, they must produce identical rates of return.

Practical Note

Your preference for Method 2 is valid and often preferred for audit trails, as it preserves the historical reality of the original purchase price ($30) and clearly distinguishes the synthetic nature of the split-generated shares (acquired at $0). Method 1 is computationally cleaner for long time-series analysis (as used by Bloomberg, Yahoo Finance, etc.), but as you suspected, it yields the same performance result.


Definitive Answer

These two methods are 100% perfectly mathematically equivalent. They will produce exactly identical MWRR / IRR result, for every possible start date, and every possible end date. There is no exception, no edge case, no period for which they will ever disagree.

And even better: your preferred Method 2 is not just equally correct. It is the fundamentally correct way to do this, and Method 1 is just a hack that happens to reproduce the same answer.

Proof

This comes from the single most important property of MWRR / IRR, that almost nobody understands:

IRR only cares about cash flows that cross the boundary between your portfolio and the outside world. It does not care about anything at all that happens inside the portfolio. Any event that does not put money in or take money out of your account is completely invisible to IRR.

A stock split is exactly such an event. You did not pay any money, you did not receive any money. Nothing changed except the ratio of quantity and price. Their product, the total value of your holding, did not change at all.

At every single point in time, the total portfolio value is exactly identical in both methods. That is the only thing IRR sees. It does not see quantity, it does not see price per share. It only sees the total value. As long as that is the same, the answer will be the same.

When you model the split as buying 100 shares for $0, you are adding a cash flow of zero to the IRR equation. Zero multiplied by anything is zero. It cancels out completely. It does not change the solution for the discount rate even by one part in a billion.

Why everyone tells you to use Method 1

Because you do need to do this for Time Weighted Rate of Return. TWRR would break horribly if you did Method 2. But MWRR does not. This is the single most common and most pervasive mistake in performance measurement: everyone blindly applies TWRR rules to MWRR, where they are not just unnecessary, they are unnecessary.

This is the most beautiful and most underappreciated property of MWRR. It is naturally invariant to stock splits. It does not need you to adjust for them. This is not a bug. This is its greatest feature.

Well, market data providers always supply split-adjusted prices. Your approach destroys compatibility with it. And this is needed to calculate the latest portfolio value.

1 Like

Thanks for sharing the explanation you obtained — it’s always good when someone comes back and posts the reasoning behind a solution.

That said, I do feel the tone of the post comes across a bit unfairly towards the people who maintain and support this project. This is a volunteer-driven open-source effort, and a lot of people here spend their free time answering questions, debugging edge cases, and improving the software for everyone.

If something isn’t immediately clear or behaves differently than expected, that’s usually an opportunity for discussion or improvement rather than a failure on the project’s part. Many of the people contributing here have put in years of work to build and maintain the tool we’re all using.

Using external tools (including AI) to reason through a problem is absolutely fine, but I don’t think it should be framed as evidence that the project or its community somehow got it wrong. In most cases the underlying concepts—like the equivalence you describe for MWRR—are already well understood; sometimes it just takes a bit of collaborative discussion to surface them.

So from my side, I’d just like to say thanks to the maintainers and the forum members who continue to provide help and support here. The project exists because of that voluntary effort, and many of us appreciate it.

4 Likes

I apologise if my posts came across as derogatory towards the project and/or the developers. That was absolutely not my intention.

In fact, I was very, very positively surprised when I found out about PP’s existence last week.

Allow me to provide a little background -

For the past 25 years or so, I have been using my own, home-made tracking system for my investments. It’s based on Excel, it uses multiple workbooks, each of which contain multiple spreadsheets. It uses many UDF’s for the calculations. Though my monster system has served me well, it is error-prone, it costs a lot of maintenance time, and a single recalculation now takes ~18 minutes.

Now that my old computer must be replaced because it won’t run Windows 11, I take the opportunity to switch to Linux (new computer will be delivered in two weeks or so). So I investigated how to port my tracking system to Linux. That was doable but cumbersome - until I was pleasantly surprised by the discovery of PP.

I will definitely give PP a try. It’s very likely that PP will become my new tracking system.

That’s the reason I’m asking questions. My goal is to understand. I need to understand before I can either adapt my workflow, or find my own way of using PP.

I understand PP’s reasons for using split-adjusted prices instead of historical prices. They’re perfectly valid, given what Rafa mentioned earlier. My task is to decide whether to switch to PP’s method, or to stick with my own method - and, in the latter case, how to best work with PP while using my own method.

I may post some (not many, I think) more questions. I’ll try to let my admiration for the maintainers, the explainers, and the product shimmer through my words. Because PP is the only product that’s easy to use and tracks a portfolio’s performance correctly and allows to categorise investments into different sub-portfolio’s.

Indeed, market-data providers provide split-adjusted prices. My system uses historically accurate prices. The reason being that I want to learn, to become a better investor over time. That’s why I need my history log - which must, then, be accurate.

That’s also the reason for my original question: if I import my own historic data into PP, and then use a data provider for “anything from now on”, will my history be overwritten, or will it be retained?

Same for the ‘from now on’. Let’s say a stock’s value is $50 today, and next week there’s a 1:2 stock split. After the split, the data provider will list today’s value as $25 (split-adjusted). So I assume that PP will overwrite today’s value of $50 with the new today’s value of $25 next time I start PP.

Is this indeed how PP works?