Reporting: weighted average price source

Charles Day cedayiv at
Mon Jul 7 12:46:43 EDT 2008

On Mon, Jul 7, 2008 at 9:42 AM, Charles Day <cedayiv at> wrote:

> On Mon, Jul 7, 2008 at 8:53 AM, Derek Atkins <warlord at> wrote:
>> "David G. Hamblen" <dhamblen at> writes:
>> > A few years back (v1.8x), I had problems with these absolute values, and
>> I
>> > patched report-utilities.scm,and commodity-utilites.scm so that the
>> balance
>> > sheet would balance.  In addition to completely removing all the
>> numeric:abs,
>> > I also had to do something about the division by zero in
>> commodity-utilities
>> > when there was a zero share balance.  I'm using the "Nearest in Time"
>>  and the
>> > problem went away in the 2.x updates.  If anyone's interested, I can dig
>> up
>> > my old postings.
>> >
>> > Anyway, I vote for getting rid of absolute values in bookkeeping.
>> It's not a question of book keeping.  It's a question of computing
>> the share price.  GnuCash stores buys as a positive and sells as
>> a negative.  As Christian pointed out before, if you buy x shares
>> for $y and then later SELL x shares for $y then a non-abs weighted
>> average gives you a price of 0/share!  Obviously this is wrong.
>> The weighted average should be $(y/x) per share.   But without
>> the ABS you get:
>>   y * x + (-y)*x        xy -xy       0
>>   --------------  ==    ------  ==  --- = 0
>>      x + x                2x         2x
>> When you use abs() here you get the right answer.
>> Of course, then you need to make sure you re-apply the negative
>> for sales.
>> So it's not a question of absolute values in bookkeeping.  It's
>> a question of absolute values in computing share prices.  Not
>> the same thing.
> I agree with Derek. That is, the "weighted average" price source is not
> intended to compute the cost of your holdings, but rather to compute the
> volume-weighted average price of all buys AND sells. So it needs to keep
> using the absolute value. However, it does need to be changed: it should
> ignore exchanges with a zero "amount" in the split.
> So I think we need to add a new price source of "Cost" which computes
> without absolute value and does include zero "amount" splits. That's where
> taking a look at David's code might come in handy (though implementing this
> seems like a pretty simple job: copy existing weighted average function, get
> rid of absolute value, add report option).
> Whether to even keep the "weighted average" price source is a question
> worth asking; I don't think it is a useful way to revalue current holdings.
> Historical volumes don't seem relevant. Even if the volume weighting was
> removed, the formula also weights quotes that are clustered within a small
> period of time more heavily than quotes that are spread apart. In other
> words, if I have 30 quotes from this month and one quote from last year, the
> recent quotes practically drown out the quote from last year. If we want to
> aim for a historical price average then using something like linear
> regression seems like a better way to go. Could even add some time factors,
> like getting the midpoint of the portion of the line covering the last 30,
> 60, 90 days, whatever. But now I am brainstorming new price sources.

A clarification: Where I have said "quote" here, please read "price". I
didn't mean to imply use of downloaded quotes or the price DB.  -Charles

> I do think a volume-weighted average price can be useful; it's just more
> appropriate for measuring your personal trading performance. Maybe there
> should be a performance report designed around that.
> -Charles
> derek
>> --
>>       Derek Atkins, SB '93 MIT EE, SM '95 MIT Media Laboratory
>>       Member, MIT Student Information Processing Board  (SIPB)
>>       URL:    PP-ASEL-IA     N1NWH
>>       warlord at MIT.EDU                        PGP key available

More information about the gnucash-devel mailing list