Here, refined further to show how it's leveraging the reduction spec:
https://github.com/beancount/beancount/blob/master/experiments/plugins/transfer_lots_test.py

Maybe this should be part of the builtin plugins.
Love my little plugin system




On Sat, Dec 26, 2020 at 11:14 AM Martin Blais <bl...@furius.ca> wrote:

> Here, that's what I meant:
>
> https://github.com/beancount/beancount/commit/9e6e8f8c3793982a6de5af5321e3026d326f8170
> This plugin does what you want (I think).
>
> On Sat, Dec 26, 2020 at 10:29 AM Martin Blais <bl...@furius.ca> wrote:
>
>> On Wed, Dec 23, 2020 at 11:11 PM Justus Pendleton <jus...@ryoohki.net>
>> wrote:
>>
>>> On Wednesday, December 23, 2020 at 11:03:44 AM UTC+7 bl...@furius.ca
>>> wrote:
>>>
>>>> Short answer is: no, but that's quickly becoming a FAQ from crypto
>>>> users.
>>>> It could be designed, but that would be a new feature.
>>>>
>>>
>>> I only use Spec ID booking so I might be missing something but isn't
>>> moving lots just a small 5 or 6 line python script iterating over
>>> beancount.ops.holdings.get_final_holdings? Would this work or is it more
>>> complicated? I'm not sure that a plugin is simpler/clearer than just
>>> generating the transaction externally and then inserting it into the
>>> beancount file.
>>>
>>
>> There's that. OTOH if this is super common for crypto, I'm thinking we
>> should design it in and make it convenient in the input syntax to make such
>> transfers.
>>
>> In theory it *could* be done with a plugin today as Ben suggest: I
>> imagined it more like this though:
>>
>> 2020-12-19 T "Binance" "Transfer BTC Coinbase-Pro => Binance"
>> Assets:Crypto:BTC:Binance 0.2 BTC {}
>> Assets:Crypto:BTC:Coinbase-Pro
>>
>> whereby the plugin would know to select transactions with flag 'T' (or
>> perhaps a tag given in its config, whatever) and convert the posting on
>> Assets:Crypto:BTC:Coinbase-Pro to include all the original matched
>> reductions. I think this should be doable today actually.
>>
>>
>>
>> holdings = beancount.ops.holdings.get_final_holdings(entries,
>>> included_account_types=('Assets',))
>>> print(f'{datetime.date.today()} * "ACATS" "Autogenerated lot transfer to
>>> new account"')
>>> for h in filter(match, holdings):
>>>    cost_date = None
>>>    print(f' {h.account} -{h.number} {h.currency} {{ {cost_date},
>>> {h.cost_number} {h.cost_currency} }}')
>>>    print(f' {args.destination} {h.number} {h.currency} {{ {cost_date},
>>> {h.cost_number} {h.cost_currency} }}')
>>>
>>> The only problem I see is that get_final_holdings returns a Holding
>>> tuple that doesn't include the acquisition date. But there's a note in the
>>> code saying the Holding tuple should go away and just be replaced by a
>>> Position, which would hold the acquisition date.
>>>
>>
>> beancount.ops.holdings is gone in v3. It was superfluous anyway (well
>> when I started it I wasn't sure if it would start acquiring more features
>> than just an inventory). Now you can simply aggregate over an inventory and
>> enumerate its contents (positions).
>>
>>

-- 
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/CAK21%2BhPWGipVXk6sHD8%3DavRCx2hioPBD9tRZ3YHh5R%3DgmrtA5A%40mail.gmail.com.

Reply via email to