Here's a plugin I quickly threw together to do this. There are a few things 
in the code I'm not 100% sure about, so consider this a beta and let me 
know if it seems like it is doing the right thing or not for you.

https://github.com/hoostus/beancount-asset-transfer-plugin

It uses a custom directive so you'd write:

2021-09-10 custom "transfer" 100 APPL Assets:Schwab Assets:Fidelity 

Caveats: I don't use crypto so maybe I don't understand what you're trying 
to do; also it transfers assets in LIFO order.


On Monday, September 6, 2021 at 6:45:12 AM UTC+7 
[email protected] wrote:

> May I chip in here and say that I have a *lot* of these. The case of 
> transferring crypto around has been well discussed but it's a CGT asset in 
> Aus and moving crypto between exchanges and hot/cold wallets is not 
> uncommon for me: these number in the dozens, maybe even three figures.
>
> I have also at times had multiple stockbrokers and while I can go with 
> abstract account names ("Assets:Shares:<ticker>"), I've preferred to have 
> per-institution accounts so where I have two active accounts at once the 
> statements make sense. Every time I transfer holdings between brokers, 
> those assets are transferred with their cost base attached.
>
> Not sure what the syntax should be. Just eliding the "recipient" leg in a 
> transfer populates the posting with the currency of the cost base: it's 
> beautiful for capital gains but doesn't help us here. So this would break:
>
>   2021-09-02 * "Buy 
> BTC"                                                                       
>     Assets:Exchange:AUD                       -1000.00 
> AUD                                     
>     Assets:Exchange:BTC                           1.00 BTC {1000.00 AUD, 
> 2021-09-02} @ 1000.00 AUD    
>                                                                               
>                 
>  
>   2021-09-03 * "Transfer 
> BTC"                                                                  
>     Assets:Exchange:BTC                          -1.00 BTC 
> {}                                  
>     
> Assets:Transfer:BTC                                                           
>             
>
>
> (Assets:Transfer:BTC is populated with 1000 AUD, being the cost base; 
> again, wonderful for capital gains, but not what we need here)
>  
> Perhaps:
>                                                                        
>   2021-09-03 * "Transfer 
> BTC"                                                                  
>     Assets:Exchange:BTC                          -1.00 BTC 
> {}                                  
>     Assets:Transfer:BTC                              1.00 BTC {} 
>
> This would add {} to the syntax of *augmenting* postings. Correct me if 
> I'm wrong, but that "empty braces" syntax doesn't exist at present for 
> augmentations. Perhaps it could be introduced to mean "dump residuals here, 
> but keep the cost base rather than convert to cost currency". If this 
> doesn't resolve to a single currency it's an error.
>
> But that's really a question for Martin; please just consider this a keen 
> +1 for this feature. I prefer strict booking so I manually fix these up but 
> it would be nice to be able to write software that exports valid entries 
> that beancount can interpolate with FIFO/LIFO in the first instance e.g. 
> for debugging my own code before I make the txs "concrete" with explicit 
> bookings.                                         
> On Thursday, 2 September 2021 at 11:45:29 pm UTC+10 [email protected] wrote:
>
>> +1 re. Ben's answer.
>> How many of these do you really do?
>>
>>
>> On Thu, Sep 2, 2021 at 2:30 AM Ben Blount <[email protected]> wrote:
>>
>>> Yeah this is high on my wishlist too. This came up a bunch for crypto 
>>> users as well - you should find some examples if you search for crypto on 
>>> the mailing list.
>>>
>>> The workaround is you have to transfer the lots manually, e.g make two 
>>> postings per lot - one to reduce the lot on the old account, then recreate 
>>> it with the original date and cost in the new account.
>>> direction
>>> bean-doctor can help you easily get all the lots, you can then copy 
>>> paste to make this a little less fussy.
>>>
>>> I'm on mobile or I'd give you examples.
>>>
>>> On Wed, Sep 1, 2021, 22:37 [email protected] <[email protected]> wrote:
>>>
>>>> Hi, 
>>>>
>>>> I tried searching a bit in the documentation and this forum but not 
>>>> sure how to handle this case and carry forward cost-basis information. 
>>>> Imagine you buy some stock at institution 1 and transfer it to institution 
>>>> 2 and then sell. How should one record all this? I tried the following but 
>>>> I'm getting an error related to no positions found. 
>>>>
>>>> Thanks,
>>>> Jonathan
>>>>
>>>> 2015-02-01 open Assets:Invest:ATrade
>>>>
>>>> 2015-02-01 open Assets:Invest:ATrade:Cash
>>>>
>>>>
>>>> 2015-04-01 * "Buy some shares of Hooli in April 2015"
>>>>
>>>>   Assets:Invest:ATrade                                   25 HOOL {10.00 
>>>> USD, "first-lot"}
>>>>
>>>>   Assets:Invest:ATrade:Cash                            -250 USD
>>>>
>>>>
>>>>
>>>> 2017-03-01 open Assets:Invest:ZTrade
>>>>
>>>> 2017-03-01 open Assets:Invest:ZTrade:Cash
>>>>
>>>>
>>>> 2017-04-01 * "Transfer from ATrade to ZTrade"
>>>>
>>>>   Assets:Invest:ATrade                                   -25 HOOL
>>>>
>>>>   Assets:Invest:ZTrade                                   25 HOOL
>>>>
>>>>
>>>>
>>>> 2017-05-01 close Assets:Invest:ATrade
>>>>
>>>>
>>>> 2018-05-03 * "Sell some shares of Hooli in May 2018"
>>>>
>>>>   Assets:Invest:ZTrade                                   -25 HOOL {} @ 
>>>> 22.00 USD
>>>>
>>>>   Assets:Invest:ZTrade:Cash
>>>>
>>>> No position matches "Posting(account='Assets:Invest:ZTrade', units=-25 
>>>> HOOL, cost=CostSpec(number_per=<class 'beancount.core.number.MISSING'>, 
>>>> number_total=None, currency='USD', date=None, label=None, merge=False), 
>>>> price=22.00 USD, flag=None, meta={'filename': 
>>>> '/Users/jonathan/Documents/Finances/beandata/test.beancount', 'lineno': 
>>>> 22})" against balance (25 HOOL)
>>>>
>>>> -- 
>>>> 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 [email protected].
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/beancount/b3efe67c-a858-4c2c-af6b-26e7444dd9e1n%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/beancount/b3efe67c-a858-4c2c-af6b-26e7444dd9e1n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> -- 
>>> 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 [email protected].
>>>
>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/beancount/CACGEkZtewt_iundhaTt8HZ654SJmNWJYyUHhgEPXx0gk2SfRkQ%40mail.gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/beancount/CACGEkZtewt_iundhaTt8HZ654SJmNWJYyUHhgEPXx0gk2SfRkQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beancount/a09a1415-0585-42f7-b1d8-0d2d72efa928n%40googlegroups.com.

Reply via email to