Several questions about usage from a newb

199 views
Skip to first unread message

bud...@gmail.com

unread,
Oct 14, 2016, 4:58:11 PM10/14/16
to Beancount
Hi,

Thank you for writing beancount as well as exellent documentation in terms of introduction to accounting and beancount as a software package.  I have read several of them like Getting Started Guide, Trading with Beancount, Cookbook.  I still have a few questions as I'm coming to grips with using the software effectively.

Is there a way to define default currency so I don't have to enter it beside a very large portion (over 50%) of entries?

When selling stocks, is there a quick way to generate credit entries for the stocks with their book vaule?  For example if I purchase a stock 10 times, 20 stocks at a time, when I want to record the sale of 181 units I need to track down all previous purchases to figure out book value of each, and type 10 with book value in {}.  What's the quickest way to make this type of entry?  If there's an "automatic" way to express this in beancount language assume I don't care how stocks are picked - LIFO or FIFO.

I need to calculate adjusted cost base in some cases when selling stock.  Does anyone have any suggestions on the most effective way to do ths?  For example can you help me write a query/report to generate book value for each purchase trade, since the last time stock count was 0.  The reason I had 0 in there is for example if I purchase 5 stock, sell 5 stock, purchase 10 stock, then another 10.  I'm only interested in the last 2 transactions for this calculation, the fact that I previously had 5 stock at some price is not relevant to current ACB calculation.

Thank you.



Martin Blais

unread,
Oct 14, 2016, 7:00:12 PM10/14/16
to Beancount
On Fri, Oct 14, 2016 at 4:58 PM, <bud...@gmail.com> wrote:
Hi,

Thank you for writing beancount as well as exellent documentation in terms of introduction to accounting and beancount as a software package.  I have read several of them like Getting Started Guide, Trading with Beancount, Cookbook.  I still have a few questions as I'm coming to grips with using the software effectively.

Is there a way to define default currency so I don't have to enter it beside a very large portion (over 50%) of entries?

Beancount does not have a concept of "default currency".


When selling stocks, is there a quick way to generate credit entries for the stocks with their book vaule?  For example if I purchase a stock 10 times, 20 stocks at a time, when I want to record the sale of 181 units I need to track down all previous purchases to figure out book value of each, and type 10 with book value in {}.  What's the quickest way to make this type of entry?  If there's an "automatic" way to express this in beancount language assume I don't care how stocks are picked - LIFO or FIFO.

Yes; see the booking_algorithm to FULL and make the default booking method on those accounts to e.g. "FIFO". Like this:

 option "booking_algorithm" "FULL"

  ...

  2015-01-01 open Assets:JTrade:MSFT    MSFT   "FIFO"

The new, "FULL" booking algorithm (as opposed to the older "SIMPLE", inferior one) will become the default at some point hopefully soon (I started to make that happen earlier this week but I still need to port a number of unit tests over to it).
 
 
I need to calculate adjusted cost base in some cases when selling stock. 

"Adjusted" is a heavily overloaded term. Could you be more specific?

 
Does anyone have any suggestions on the most effective way to do ths?  For example can you help me write a query/report to generate book value for each purchase trade, since the last time stock count was 0.  The reason I had 0 in there is for example if I purchase 5 stock, sell 5 stock, purchase 10 stock, then another 10.  I'm only interested in the last 2 transactions for this calculation, the fact that I previously had 5 stock at some price is not relevant to current ACB calculation.

If you had this pattern, after the sale of 5 you'd have an empty inventory. Sales further on could only match on more recent purchases.

Tell us what ACB calculation you'd expect and we can help.

Once the booking_algorithm will be "FULL" by default I plan to automatically add metadata to link buy/sell pairs so you can easily produce lists of trades by any period.



Thank you.



--
You received this message because you are subscribed to the Google Groups "Beancount" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beancount+unsubscribe@googlegroups.com.
To post to this group, send email to bean...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/beancount/cb10e18b-6711-48e6-b301-5ebe8131080f%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

bud...@gmail.com

unread,
Oct 14, 2016, 8:43:21 PM10/14/16
to Beancount
When trying to use the book_algorithm option, I get an error: Invalid option: 'booking_algorithm' . 
I installed beancount from repository (hg id shows 5e2dcbfc81b1) using pip install.   Not sure what I'm doing wrong.

The head of beancount file verbatim is:
;; -*- mode: org; mode: beancount; coding: utf-8; fill-column: 400; -*-
option "title" "Trading"
option "operating_currency" "CAD"
option "booking_algorithm" "FULL"

2016-01-01 open Assets:Broker:Cash CAD
2016-01-01 open Equity:OpeningBalance CAD
2016-01-01 open Assets:Broker:ABC ABC  "FIFO"
2016-01-01 open Income:Broker:PnL CAD

In some accounts I don't need to report capital gains so I'm very happy to use LIFO or FIFO approach strctly for personal record keeping of profit/loss.  So if I could get the booking_algorithm working that solves half of my problems.

For other accounts subject to capital gains in Canada I need to keep track of "Adjusted" cost.  First type of adjustment is averaging the price of stock when you buy more (http://www.adjustedcostbase.ca/blog/how-to-calculate-adjusted-cost-base-acb-and-capital-gains/ although this formula includes broker fees in the cost adjustment I think it all still works out if I record those fees separately as Expense).  Other types of cost adjustments involve return of capital by an exchange traded fund (ETF) (http://www.adjustedcostbase.ca/blog/return-of-capital-and-how-it-affects-adjusted-cost-base/) which decreases the cost basis uniformly for all units owned, and reinvested distribution which increases the cost basis uniformly accross all units owned (http://www.adjustedcostbase.ca/blog/phantom-distributions-and-their-effect-on-adjusted-cost-base/).

I'm trying to figure out a way to keep track of the adjustments above in dual-entry ledger in general, and in beancount in particular. 
2015-01-01 * "Opening Balance"
           Assets:Broker:Cash       1000 CAD
           Equity:OpeningBalance   -1000 CAD

2015-01-01 * "Purchase abc"
           Assets:Broker:Cash      -1100 CAD
           Assets:Broker:ABC         100 ABC {11.0 CAD}

2015-01-02 * "Purchase abc"
           Assets:Broker:Cash      -1000 CAD
           Assets:Broker:ABC         100 ABC {10.0 CAD}

2015-01-02 * "Return of capital (1 cent per share)"
           Assets:Broker:ABC         -100 ABC {10 CAD)
           Assets:Broker:ABC         -100 ABC {11 CAD)
           Assets:Broker:ABC         100 ABC {10.50 CAD}

2016-01-11 * "Selling some ABC"
           Assets:Broker:ABC        -100 ABC {10 CAD} ; this can be {*} or nothing when FIFO works?
           Assets:Broker:Cash     500.05 CAD
           Income:Broker:PnL

Thanks for any suggestions.
Thank you.



To unsubscribe from this group and stop receiving emails from it, send an email to beancount+...@googlegroups.com.

Budric Bundy

unread,
Oct 14, 2016, 8:51:31 PM10/14/16
to bean...@googlegroups.com
The return of capital was incorrect, I made some mistakes in both the math, and saying ACB should increase - it decreases.  I think this is how it should look like:

I think it should look like this

2015-01-02 * "Return of capital (1 cent per share)"
           Assets:Broker:ABC         -100 ABC {10 CAD)
           Assets:Broker:ABC         -100 ABC {11 CAD)
           Assets:Broker:ABC         100 ABC {10.49 CAD} ; manually averaged and 1 cent subtracted
           Income:Broker:PnL         2.00 CAD                      ; 2$ capital gains

Martin Blais

unread,
Oct 14, 2016, 9:20:27 PM10/14/16
to Beancount
On Fri, Oct 14, 2016 at 8:43 PM, <bud...@gmail.com> wrote:
When trying to use the book_algorithm option, I get an error: Invalid option: 'booking_algorithm' . 
I installed beancount from repository (hg id shows 5e2dcbfc81b1) using pip install.   Not sure what I'm doing wrong.

The head of beancount file verbatim is:
;; -*- mode: org; mode: beancount; coding: utf-8; fill-column: 400; -*-
option "title" "Trading"
option "operating_currency" "CAD"
option "booking_algorithm" "FULL"

2016-01-01 open Assets:Broker:Cash CAD
2016-01-01 open Equity:OpeningBalance CAD
2016-01-01 open Assets:Broker:ABC ABC  "FIFO"
2016-01-01 open Income:Broker:PnL CAD

Sorry I meant "experimental_booking_algorithm."
I was leaping ahead, I'm in the process of normalizing that and making it "booking_algorithm".

 

In some accounts I don't need to report capital gains so I'm very happy to use LIFO or FIFO approach strctly for personal record keeping of profit/loss.  So if I could get the booking_algorithm working that solves half of my problems.

For other accounts subject to capital gains in Canada I need to keep track of "Adjusted" cost.  First type of adjustment is averaging the price of stock when you buy more (http://www.adjustedcostbase.ca/blog/how-to-calculate-adjusted-cost-base-acb-and-capital-gains/ although this formula includes broker fees in the cost adjustment I think it all still works out if I record those fees separately as Expense). 

Okay, this gets a bit more hairy. Two things:

1. This corresponds to holding positions at average cost. Beancount will _eventually_ support an "AVERAGE" method which will do exactly that: before and after any reduction of an inventory (a reduction is a sale, a trade), all the existing lots for that currency will be merged and the cost averaged. This should cover the case of Canada.

2. However, reducing by the expenses / fees / commission cannot currently be done at that time. The best way to do that will be to post-process the trades and distribution the fees at the moment of sale. This would allow one to deduct the correct portion of the fee for the subset of stock sold (this is the correct calculation AFAIK). For example, if you buy 100 shares and pay an $8 fee, selling 40 shares should deduct $3.20 from the P/L.

This would have to be done with some custom code. Currently I deal with this once / year in calculating wash sales with a custom script, which you can find under experiments (it's unlikely to just be reusable, last year I didn't have the full booking method implemented yet and I had to hack a kludge in order to get the dates on each lot carried through; at this moment, with the FULL method, the dates are always attached and next year tax season I'll have this in the main branch). 

In other words, if you really care about correct calculation of fees, you'll have to write at least some code, because I haven't yet made that reusable. This is the bad news. The good news is that the data is there and there's Python, so if you do care... it's doable.

 
Other types of cost adjustments involve return of capital by an exchange traded fund (ETF) (http://www.adjustedcostbase.ca/blog/return-of-capital-and-how-it-affects-adjusted-cost-base/) which decreases the cost basis uniformly for all units owned, and reinvested distribution which increases the cost basis uniformly accross all units owned (http://www.adjustedcostbase.ca/blog/phantom-distributions-and-their-effect-on-adjusted-cost-base/).

That's different. How you handle a cost basis adjustment is by "selling" the entire lot and replacing it in the same transaction, carrying the original date manually, e.g.

  2013-08-01 * "Purchase"
    ...

  2015-04-03 * "Cost basis adjustment"
    Assets:Investments:XSP   -235 XSP {45.32 CAD}
    Assets:Investments:XSP    235 XSP {48.23 CAD, 2013-08-01}

Maintaining the original date is done on the augmenting lot (the posting with +235 above) by providing an explicit date. The default is to attach the date of the transaction. I have a few of those in my own file; this works.



I'm trying to figure out a way to keep track of the adjustments above in dual-entry ledger in general, and in beancount in particular. 
2015-01-01 * "Opening Balance"
           Assets:Broker:Cash       1000 CAD
           Equity:OpeningBalance   -1000 CAD

2015-01-01 * "Purchase abc"
           Assets:Broker:Cash      -1100 CAD
           Assets:Broker:ABC         100 ABC {11.0 CAD}

2015-01-02 * "Purchase abc"
           Assets:Broker:Cash      -1000 CAD
           Assets:Broker:ABC         100 ABC {10.0 CAD}

2015-01-02 * "Return of capital (1 cent per share)"
           Assets:Broker:ABC         -100 ABC {10 CAD)
           Assets:Broker:ABC         -100 ABC {11 CAD)
           Assets:Broker:ABC         100 ABC {10.50 CAD}

Yes but I'd put one of the two dates above.
 

2016-01-11 * "Selling some ABC"
           Assets:Broker:ABC        -100 ABC {10 CAD} ; this can be {*} or nothing when FIFO works?
           Assets:Broker:Cash     500.05 CAD
           Income:Broker:PnL

You can leave it as {} if you use the FULL booking algorithm, and it will apply the default booking method for that account. The default booking method is "STRICT" which fails when the list of matching lots is ambiguous (and "{}" selects all existing lots, so you have two); using "FIFO" will simply select the old lots.

I hope this helps,



To unsubscribe from this group and stop receiving emails from it, send an email to beancount+unsubscribe@googlegroups.com.

To post to this group, send email to bean...@googlegroups.com.

Budric Bundy

unread,
Oct 16, 2016, 10:56:45 AM10/16/16
to bean...@googlegroups.com
The "experimental_booking_algorith" still wouldn't work, so I did some grepping on the source and the option is: "experiment_booking_method".  That seems to work great.  Thanks.


--
You received this message because you are subscribed to a topic in the Google Groups "Beancount" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/beancount/VdK8VCFPHLI/unsubscribe.
To unsubscribe from this group and all its topics, send an email to beancount+unsubscribe@googlegroups.com.

To post to this group, send email to bean...@googlegroups.com.

Martin Blais

unread,
Oct 16, 2016, 3:10:35 PM10/16/16
to Beancount
Reply all
Reply to author
Forward
0 new messages