Hi Errol,

To expand a bit on Patrick's reply.
Indeed, beanprice won't save values to file automatically but you don't 
have to necessarily write a script (well, it's actually still a shell 
scripting but a bit simpler). You can append result to an existing 
beancount file included in your ledger as in:

bean-price -i -c commodities.bean >> prices.bean

Note the -i and -c parameters that make sure values are fetched a little 
more "deterministically" (check out bean-price --help to see what they 
actually mean).
Instead of using include prices.bean in the main ledger you can include 
files using a wildcard, like include "prices/*.bean" and then store prices 
in the separate files like:

bean-price -i -c commodities.bean >> "prices/price-$(date +'%Y-%m-%d').bean"

You can store them splitted by date as in this example but you can also 
come up with the way to split by instrument/stock if necessary (well, here 
I'd also probably opt for using Python instead of bash).

I've automated this process a bit in Lazy Beancount: 
https://lazy-beancount.xyz/docs/stage1_totals/currencies/#conversion-rates, 
maybe it'd work for you off the shelf as well. It's nothing too fancy, 
however, just literally doing what's described here with a UI on top.

Also I've recently stumbled across 
https://gitlab.com/chrisberkhout/pricehist and looks like it can solve a 
couple more problems with price fetching (e.g. fetching prices for time 
intervals) but I haven't tested it yet personally.

Best regards,
Vasily

суббота, 28 декабря 2024 г. в 15:40:15 UTC+1, Errol Lee: 

> Thanks for the input. I was hoping to use one of the functions that came 
> with beanprice. These steps in the documentation is what I was trying to 
> replicate. Seems like you've written your own script.
>
> Now that I can use bean-price to fetch the individual stocks, I'll 
> probably try to do the same..
>
> [image: 6b9455ae26c087990c894b6b32b93a96c2d8723bb1b2c0e7307be3c7c83484bd 
> copy.jpg]
> On Friday, December 27, 2024 at 7:19:53 PM UTC+8 Patrick Ruckstuhl wrote:
>
>> Hi Errol,
>>
>>
>> if I remember correctly it depends not on the commodities but if you have 
>> actually any balances using the instruments.
>>
>> For updating a file, this is what I use. I have a prices folder with a 
>> file per instrument.
>>
>>
>> #!/usr/bin/env python3
>>
>> from beanprice import price
>> from beancount import loader
>> from beancount.parser import printer
>>
>> entries, errors, options = loader.load_file('main.beancount')
>>
>> priceJobs = price.get_price_jobs_at_date(entries, inactive=True)
>> prices = []
>> for job in priceJobs:
>>     try:
>>         prices.append(price.fetch_price(job))
>>     except Exception as e:
>>         print("failed to fetch, ", job, e)
>>
>> prices, ignoredEntries = price.filter_redundant_prices(prices, entries)
>> for newPrice in prices:
>>     with open('prices/' + newPrice.currency.lower() + '.beancount', 'a') 
>> as priceFile:
>>         priceFile.write(printer.format_entry(newPrice))
>>
>>
>> Regards,
>>
>> Patrick
>>
>>
>> On 27.12.2024 07:28, Errol Lee wrote:
>>
>> Hi Patrick,
>>
>>
>> Thank you for your guidance! I thought I did, but I must've done 
>> something wrong earlier. I've reinstalled and can now successfully retrieve 
>> prices using Yahoo. 
>>
>>
>> For example:
>>
>>
>> ❯ bean-price -e 'AUD:yahoo/VDHG.AX'
>>
>> 2024-12-27 price VDHG.AX                             69.53 AUD
>>
>>
>> I’ve defined my commodities in a commodities.bean file. For instance, 
>> VDHG is defined as follows:
>>
>>
>> 2000-01-01 commodity VDHG
>>
>>   name: "Vanguard Diversified High Growth ETF"
>>
>>   asset-class: "Equity"
>>
>>   symbol: "VDHG"
>>
>>   price: "AUD:yahoo/VDHG.AX"
>>
>>
>> However, when I run the following command, it seems to execute 
>> successfully, but I don’t see the prices updated in any of my files:
>>
>>
>> ❯ bean-price commodities.bean
>>
>>
>> Ideally, I’d like the latest prices to be saved automatically in a 
>> prices.bean file. Is there something I’m missing in my setup or an 
>> additional step I need to take to ensure the prices are recorded in the 
>> desired file?
>>
>>
>> Thanks again for your help!
>>
>>
>> Best regards,
>>
>> Errol
>>
>> On Tuesday, December 24, 2024 at 3:46:05 PM UTC+8 Patrick Ruckstuhl wrote:
>>
>>> Hi Errol,
>>>
>>> Did you install beanprice separately?
>>>
>>> https://github.com/beancount/beanprice
>>>
>>> I'm using alphavantage on a daily basis.
>>>
>>> You will need to set an environment variable ALPHAVANTAGE_API_KEY with a 
>>> free api key from them and use it like
>>>
>>> USD:alphavantage/price:AAPL:USD
>>>
>>> Regards,
>>> Patrick 
>>>
>>>
>>> On December 24, 2024 2:48:02 AM GMT+01:00, Errol Lee <[email protected]> 
>>> wrote:
>>>
>>>> Hi everyone,
>>>>
>>>>
>>>> I’m new to Beancount (and honestly, I’m amazed by the amount of 
>>>> functionality it offers—wish I had discovered it sooner!). I’m trying to 
>>>> set up bean-price to fetch stock prices, but I’ve run into some 
>>>> issues, particularly with Yahoo and Alphavantage as sources.
>>>>
>>>>
>>>> Here’s what I’ve tried so far:
>>>>
>>>> 1. *Yahoo*:
>>>>
>>>> It seems like Yahoo has blocked API access for fetching stock prices. 
>>>> When I try fetching prices for AAPL, I get the following error:
>>>>
>>>>
>>>> ❯ bean-price -e 'USD:yahoo/AAPL'                 
>>>>
>>>> ERROR   : Error fetching AAPL: Status 401: {'code': 'Unauthorized', 
>>>> 'description': 'User is unable to access this feature - 
>>>> https://bit.ly/yahoo-finance-api-feedback'}
>>>>
>>>> ERROR   : Could not fetch for job: DatedPrice(base='AAPL', quote='USD', 
>>>> date=None, sources=[PriceSource(module=<module 
>>>> 'beancount.prices.sources.yahoo' from 
>>>> '/opt/homebrew/lib/python3.11/site-packages/beancount/prices/sources/yahoo.py'>,
>>>>  
>>>> symbol='AAPL', invert=False)])
>>>>
>>>>
>>>>
>>>> 2. *Alphavantage*:
>>>>
>>>> Despite being listed as a source in the GitHub documentation, I can’t 
>>>> seem to get it working. Here’s the error I encounter:
>>>>
>>>>
>>>> ❯ bean-price -e 'USD:alphavantage/AAPL'          
>>>>
>>>> Traceback (most recent call last):
>>>>
>>>>   File 
>>>> "/opt/homebrew/lib/python3.11/site-packages/beancount/prices/price.py", 
>>>> line 178, inimport_source
>>>>
>>>>     __import__(default_name)
>>>>
>>>> ModuleNotFoundError: No module named 
>>>> 'beancount.prices.sources.alphavantage'
>>>>
>>>>
>>>> During handling of the above exception, another exception occurred:
>>>>
>>>>
>>>> Traceback (most recent call last):
>>>>
>>>>   File 
>>>> "/opt/homebrew/lib/python3.11/site-packages/beancount/prices/price.py", 
>>>> line 182, inimport_source
>>>>
>>>>     __import__(module_name)
>>>>
>>>> ModuleNotFoundError: No module named 'alphavantage'
>>>>
>>>>
>>>> Ultimately, I’d like to fetch prices for some Australian stocks in my 
>>>> portfolio (e.g., ASX:VDHG, ASX:VGS, etc.).
>>>>
>>>>
>>>> Does anyone have advice on:
>>>>
>>>> • Workarounds for Yahoo?
>>>>
>>>> • How to enable or properly configure Alphavantage as a source?
>>>>
>>>> • Any other sources I can use for Australian stocks?
>>>>
>>>>
>>>> Thanks in advance for your help! Any guidance would be much appreciated.
>>>>
>>>> -- 
>> 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 visit 
>> https://groups.google.com/d/msgid/beancount/1e797d83-4d9c-4951-8609-a20781fb5164n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/beancount/1e797d83-4d9c-4951-8609-a20781fb5164n%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 visit 
https://groups.google.com/d/msgid/beancount/17a51fce-9ebe-436c-a6cb-e256d2e99565n%40googlegroups.com.

Reply via email to