我如何告诉 GNU Cash更新价格数据库所有已知货币、股票、债券、共同基金等为一个具体的天?
我正在尝试准备一份过去日期的报告。我已经Options
将报告设置为nearest in time
这样它就会从价格数据库中抓取尽可能最接近报告日期的商品价格。
嗯,我查看了价格数据库,发现部分股票的价格存在差距。对于许多股票,我没有为报告当天定义任何价格。因此,我的报告可能不准确。
我知道我可以转到Tools
->Price Database
并单击Get Quotes
按钮。这将获取当前报价(价格)并将其添加到所有定义货币、股票、债券、共同基金等的价格数据库中。但这将获取并添加以下价格:今天的日期仅有的。
我怎样才能做到相当于Get Quotes
但对于特定的一天过去的?
答案1
我遇到了同样的问题。我使用 gnucash python 绑定和以下脚本,从包含日期 (YYYY-MM-DD) 和价格的文本文件导入价格,每行都有一个新日期。
希望它能有所帮助。祝一切顺利。
import datetime
from gnucash import Session, Account, Split, GncCommodity, GncPrice
url = "personal.gnucash"
# Initialize Gnucash session
session = Session(url, True, False, False)
book = session.book
pdb = book.get_price_db()
comm_table = book.get_table()
# Define commodities
sec_gbp = GncCommodity(book,"Pound Sterling", "CURRENCY", "GBP", "826", 100)
sec_chf = GncCommodity(book,"Swiss Franc", "CURRENCY", "CHF", "756", 100)
def extractFXrateFromFile(filename,book,pdb,sec_base,sec_curr):
with open(filename) as myFile :
for line in myFile.readlines() :
splitLine = line.split(' ')
y,m,d = (int(x) for x in splitLine[0].split("-"))
price = GncPrice(book)
price.set_time64( datetime.datetime(y,m,d) )
value = price.get_value()
value.denom = int( 1e10 )
rate = float(splitLine[1])
value.num = int( rate * 1e10 )
price.set_value(value)
price.set_currency( sec_curr )
price.set_commodity( sec_base )
pdb.add_price(price)
extractFXrateFromFile("chf_per_gbp.txt", book, pdb, sec_chf, sec_gbp)
session.save()
session.end()
session.destroy()