Bruce:
Welcome to the gnucash-user email list! Hopefully we can give you some
useful answers. I will answer based on what I have heard developers say
on the list, and what I see in my stock transactions in GnuCash, though
I have not read the relevant GnuCash source code.
On 2023-08-21 10:21, Bruce McCoy via gnucash-user wrote:
...Could you please help me comprehend what ishappening in the
calculations of gnucash compared with thecalculations of Federated
Hermes? FederatedHermes determines the number of shares traded by the
currency amountof the trade divided by the price of the shares. For
example, onceupon a time they charged me a $15.00 Annual Fiduciary
Administrationfee. The share price was $6.26. To meet the fee they
sold 2.396shares and recorded it on their statement as -2.396 shares,
accurateto 1/1,000 of a share, for the transaction.....
It sounds like they charged you 2.396 shares to fulfil an obligation for
$15.00. They used the price of $6.26 to arrive at the amount of 2.396
shares, but it is not a fundamental part of the transaction. This is
important to how GnuCash records such transactions.
Logically, $value = $price/share * #shares, and this should be precise
equality. But is possible for a brokerage statement to report values
which do not have precise equality. It sounds like Federated Hermes
reported $15.00 = $6.26 * 2.396, but the actual $value of this $price
and #shares is $14.99896, a difference of $0.00104.
GnuCash takes the position that price is approximate and transient, but
currency received and paid, and shares received and issued, are exact
and persistent. Thus a GnuCash securities transaction stores the number
of shares and the currency value of the transaction, and derives the
price as $value/#shares. It stores the price as a rational number, a
ratio between numerator and denominator (i.e., a fraction). Thus it will
exactly satisfy the logical equation.
In your example, I expect GnuCash stored the price as , simplified to
3750/599 $/share.
As we see below thenumber of shares they reported was truncated from
the more accuratefigure given below. AnnualFiduciary Administrative
Fee of $15.00/Share price of $6.26 =2.3961661341853035143769968
05111821086261980830670926517571884984025559105431309904153354632587859425shares
traded. Ingnucash, entering the fee of $15 and the number of shares as
2.396,results in gnucash reducing the shares in the fund by 2.4,
changingthe fund and expense accounts by $15.02, and setting the trade
priceat $6.2583. Gnucashunderestimates the trade price by
(1-(6.2583/6.26))*100 = 0.02715 %. Gnucashcould use a longer fraction
to generate a more accurate share price. This only requires that the
fraction have more significant digits. If gnucash multiplied the
$15.00 fee by2.3961661341853035143769968051118
21086261980830670926517571884984025559105431309904153354632587859425shares,
won't the result be a share price of $6.26.
Please rethink this paragraph, treating the currency amount and number
of shares in the transaction as fundamental, and the price as a
byproduct. It would be something like, Annual Fiduciary Administrative
Fee of $15.00, #shares = 2.396, price = 15000/2396 = 3750/599 $/share.
In decimal terms, this is about $6.26043405676127/share. You might
describe it as, "the transaction price they reported was rounded from
the more accurate 3750/599".
I am interested by your statement, "results in gnucash reducing the
shares in the fund by 2.4". GnuCash is capable of storing share counts
to three decimal places. However, a setting in the Account window for
the security controls the number of decimal places GnuCash uses for that
security. See the Tutorial and Concepts Guide, 9.4.1. *Setup Accounts
for Stocks and Mutual
Funds*<https://www.gnucash.org/docs/v5/C/gnucash-guide/invest-setup1.html#invest-setup-stockaccounts2>.
See also Figure 9.8. *The “New Security” Window*, on that page.
For your security, what is the value for "fraction traded" in the
security window? It should be 1/1000 or smaller. What is the value for
"Smallest Fraction" in that dialogue box? It should be "Commodity Value".
Mutualfunds seem to treat both the amount of the local currency
tenderedand the price per share as decimal numbers of high precision
e.g.$15.0000000000000000000 or $6.260000000000000000000000. They seem
toconsider the number of shares traded as an approximation. Of
coursethey add and subtract fractional numbers of shares. Where do we
seethem dividing the transaction cost by the number of shares,
includingfractional shares, to calculate the the price per share?
Inevery mutual fund statement I have seen, the prices and the
numbersof shares always agree from month to month....
You just gave an example of a transaction where the price and number of
shares does not agree with the currency value of the transaction: $6.26
* 2.396 = $14.99896, not the stated value $15.00.
I would characterise this as, mutual funds seem to treat the amount of
the local currency tendered and the number of shares as decimal numbers
of exact precision, and the price as an approximation. Certainly, it
will help you understand GnuCash's recording of these transactions if
you think of it that way.
...Why do we not ...incorporat[e] more significant digits in the
calculations? InEdit > Preferences > Numbers, Date, Time > Numbers
>Force Prices to display as decimals, the maximum number of
decimalplaces one can display is only 8 (eight). If this is close to
thenumber of significant digits gnucash is currently using, could it
bethat we might consider using, instead of, say, double
binaryfloating-point method, a decimal floating-point arithmetic...
Note that you are talking about increasing the actual precision of
numbers used in calculation, but the spreadsheet preferences setting you
mention controls only the _display_ of numbers, not the actual precision
of the numbers.
GnuCash stores the price as rational numbers, which can have precisely
the correct value. Floating-point numbers, no matter the precision, will
always be approximations. A floating-point number cannot exactly store
the value of one-third (1/3), but a rational number can.
...Whydo we not avoid rounding errors? Why do we not enjoy the
accuracyand precision that everyone else can? Well, we can increase
theprecision of our calculations by increasing the number of
significantdigits in the decimal representations of our numerical
data. Bruce
From what you have presented, it looks to me like GnuCash has
sufficient precision to record your transactions. I suggest that path
forward is 1. to think differently about what is fundamental in these
transactions, and 2. to be sure that you have the security's "fraction
traded" set correctly in your books.
Does that help?
Best regards,
—Jim DeLaHunt
_______________________________________________
gnucash-user mailing list
gnucash-user@gnucash.org
To update your subscription preferences or to unsubscribe:
https://lists.gnucash.org/mailman/listinfo/gnucash-user
-----
Please remember to CC this list on all your replies.
You can do this by using Reply-To-List or Reply-All.