GnuCash c935c2f+
Loading...
Searching...
No Matches
quotes_historic.py
Go to the documentation of this file.
1#!/usr/bin/env python3
2
3# quotes_historic.py -- Example Script to read historic quote data into gnucash
4#
5
6
19
20from gnucash import Session, Account, Split
21import gnucash
22import datetime
23from fractions import Fraction
24from gnc_convenience import find_account
25
26FILE = "./test.gnucash"
27url = "xml://"+FILE
28
29# Read data from file
30f = open('INTC')
31data = []
32while 1:
33 tmp = f.readline()
34 if(len(tmp)<2):
35 break
36
37 data.append(tmp)
38
39f.close()
40
41stock_date = []
42stock_price = []
43for i in range(1,len(data)):
44 year = int(data[i].rsplit(',')[1].rsplit('/')[0])
45 month = int(data[i].rsplit(',')[1].rsplit('/')[1])
46 day = int(data[i].rsplit(',')[1].rsplit('/')[2])
47 stock_date.append(datetime.datetime(year,month,day))
48 stock_price.append(float(data[i].rsplit(',')[5]))
49
50# Initialize Gnucash session
51session = Session(url, True, False, False)
52root = session.book.get_root_account()
53book = session.book
54account = book.get_root_account()
55pdb = book.get_price_db()
56comm_table = book.get_table()
57ac = find_account(account,'Intel')[0]
58
59stock = ac.GetCommodity()
60# Add the prices
61pdb = book.get_price_db()
62if len(ac.GetSplitList())<1:
63 print('Need at least one Split to get currency info ... ')
64 raise SystemExit
65cur = ac.GetSplitList()[0].GetParent().GetCurrency()
66
67# Get stock data
68pl = pdb.get_prices(stock,cur)
69if len(pl)<1:
70 print('Need at least one database entry to clone ...')
71 raise SystemExit
72
73pl0 = pl[0]
74for i in range(1,len(pl)):
75 pdb.remove_price(pl[i])
76
77for i in range(0,len(stock_date)):
78 p_new = pl0.clone(book)
79 p_new = gnucash.GncPrice(instance=p_new)
80 print('Adding',i,stock_date[i],stock_price[i])
81 p_new.set_time64(stock_date[i])
82 v = p_new.get_value()
83 v.num = int(Fraction.from_float(stock_price[i]).limit_denominator(100000).numerator)
84 v.denom = int(Fraction.from_float(stock_price[i]).limit_denominator(100000).denominator)
85 p_new.set_value(v)
86 p_new.set_source("Finance::Quotes::Historic")
87 pdb.add_price(p_new)
88
89# Clean up
90session.save()
91session.end()
92session.destroy()