Thanks for sharing your "recipe," Martin. That's a nifty query to get the 
average cost.

The first solution doesn't quite work for me given it ends up with a mix of 
positive and negative lot units, which bean-price doesn't aggregate, and 
therefore incorrectly tries to look up prices for commodities that I have 
zero of. Perhaps extending bean-prices to consider aggregates is a 
solution. But I also do like the cleanliness of true lot reductions. 
Knowing {} means all helps. In cases where it didn't, I moved a subset of 
transactions to a FIFO account to help with automatic lot reduction.

Thanks again!

On Friday, November 29, 2019 at 6:27:45 AM UTC-8, Martin Blais wrote:
>
> Here's how I get around this myself now: 
> 1. DIsable booking by using "NONE" on the account: 
>
>
> 2016-01-01 open Assets:Inv    "NONE" 
> 2016-01-01 open Assets:Bank 
> 2016-01-01 open Income:CapGains 
>
> 2016-01-06 * "buy" 
>   Assets:Inv  3 XYZ {9 USD} 
>   Assets:Bank 
>
> 2016-01-06 * "buy" 
>   Assets:Inv  3 XYZ {10 USD} 
>   Assets:Bank 
>
> 2016-01-06 * "buy" 
>   Assets:Inv  4 XYZ {11 USD} 
>   Assets:Bank 
>
> ;; 2016-01-07 * "sell" 
> ;;   Assets:Inv  -10 XYZ {USD} @ 8 USD 
> ;;   Assets:Bank 80 USD 
> ;;   Income:CapGains 
>
>
> Don't include your reducing transaction. 
> Compute average cost manually:" 
>
> bean-query avgcost.beancount "select account, sum(number), 
> sum(cost(position)) where account = 'Assets:Inv' group by 1" 
>  account   su sum_cos 
> ---------- -- ------- 
> Assets:Inv 10 101 USD 
>
> So I've got 10 units of XYZ at 101 USD total cost 
>
> Insert your transaction: 
>
> 2016-01-07 * "sell" 
>   Assets:Inv  -10 XYZ {10.1 USD} @ 8 USD 
>   Assets:Bank 80 USD 
>   Income:CapGains 
>
> which expands to 
>
>
> bean-doctor linked avgcost.beancount 20 
> /home/blais/r/q/beancount-data/user/redstreet0/avgcost.beancount:17: 
>
>    2016-01-07 * "sell" 
>      Assets:Inv        -10 XYZ {10.1 USD, 2016-01-07} @ 8 USD 
>      Assets:Bank        80 USD 
>      Income:CapGains  21.0 USD 
>
>
> Alternatively if you know you capital gains somehow, in your specific 
> case because you're selling the entire position (all of the 10 units) 
> Beancount is able to match it against the full set of positions and 
> reduce that, so this would run without errors: 
>
> 2016-01-07 * "sell" 
>   Assets:Inv  -10 XYZ {} @ 8 USD 
>   Assets:Bank 80 USD 
>   Income:CapGains  21 USD 
>
> Unfortunately it's currently not able to do that if you don't supply the 
> gains: 
>
> 2016-01-07 * "sell" 
>   Assets:Inv  -10 XYZ {} @ 8 USD 
>   Assets:Bank 80 USD 
>   Income:CapGains 
>
>
>
>
>
> On Fri, Nov 29, 2019 at 3:37 AM Red S <redst...@gmail.com <javascript:>> 
> wrote: 
> > 
> > Thanks, but that was the scenario I'm hoping to avoid. It involves way 
> too many manual entries (for my case), or a bunch of scripting or plugins 
> that will become obsolete once average cost booking is implemented. 
> > 
> > I guess I could use FIFO instead. My Income:Capital-Gains numbers may be 
> off, but that shouldn't matter much. 
> > 
> > Do others have this issue at all? 
> > 
> > Thanks! 
> > 
> > On Tuesday, November 26, 2019 at 10:14:34 AM UTC-8, Martin Michlmayr 
> wrote: 
> >> 
> >> * Red S <redst...@gmail.com> [2019-11-25 02:18]: 
> >> > 2016-01-07 * "sell" 
> >> >   Assets:Inv  -10 XYZ @ 8 USD 
> >> >   Assets:Bank 80 USD 
> >> >   Income:CapGains 
> >> 
> >> do it manually: 
> >> 
> >> 2016-01-07 * "sell" 
> >>   Assets:Inv  -3 XYZ { 9 USD} @ 8 USD 
> >>   Assets:Inv  -3 XYZ {10 USD} @ 8 USD 
> >>   Assets:Inv  -4 XYZ {11 USD} @ 8 USD 
> >>   Assets:Bank 80 USD 
> >>   Income:CapGains 
> >> 
> >> or calculate average cost first manually: 
> >> 
> >> 2016-01-07 * "Calculate average cost" 
> >>   Assets:Inv  10 XYZ {10.1 USD} 
> >>   Assets:Inv  -3 XYZ { 9 USD} 
> >>   Assets:Inv  -3 XYZ {10 USD} 
> >>   Assets:Inv  -4 XYZ {11 USD} 
> >> 
> >> 2016-01-07 * "sell" 
> >>   Assets:Inv  -10 XYZ {10.1 USD} @ 8 USD 
> >>   Assets:Bank 80 USD 
> >>   Income:CapGains 
> >> 
> >> 
> >> 
> >> > So I really have zero units of XYZ. However, because of the way these 
> are 
> >> > booked, bean-price includes XYZ in its output. Given I have several 
> such 
> >> > cases, what is the best way to handle this? I can think of these: 
> >> > - wait until average cost booking is available (will it solve this 
> problem?) 
> >> > - book the purchases above as prices instead of commodities held at 
> cost 
> >> > (will I lose the average cost of the commodity? How will I know the 
> cost 
> >> > basis to book profit and loss?) 
> >> > - hack a way to get a list of commodities whose lots aggregate to 
> zero, and 
> >> > remove those from what bean-price lists? 
> >> > - something else? 
> >> > 
> >> > 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 bean...@googlegroups.com. 
> >> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/beancount/5e4d37c1-016d-499b-a988-a2cf0e7138eb%40googlegroups.com.
>  
>
> >> 
> >> 
> >> -- 
> >> Martin Michlmayr 
> >> https://www.cyrius.com/ 
> > 
> > -- 
> > 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 bean...@googlegroups.com <javascript:>. 
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/beancount/9e714aa2-b9a3-4925-afaf-555646fb734f%40googlegroups.com.
>  
>
>

-- 
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+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/066c485d-fc4f-4988-a5d3-355f6aa965df%40googlegroups.com.

Reply via email to