Using GnuCash for accurate cost basis calculation for foreign investments (CAD primary currency)
You would need to use Trading Accounts. You can enable this, File->Properties->Account settings tab, and check Use Trading Accounts. For more details see the following site: http://wiki.gnucash.org/wiki/Trading_Accounts
"I found an answer by Peter Selinger, in two articles, Tutorial on multiple currency accounting (June 2005, Jan 2011) and the accompanying Multiple currency accounting in GnuCash (June 2005, Feb 2007). Selinger embraces the currency neutrality I'm after. His method uses ""[a]n account that is denominated as a difference of multiple currencies... known as a currency trading account."" Currency trading accounts show the gain or loss based on exchange rates at any moment.  Apparently GnuCash 2.3.9 added support for multi-currency accounting. I haven't tried this myself. This feature is not enabled by default, and must be turned on explicity. To do so, check ""Use Trading Accounts"" under File -> Properties -> Accounts. This must be done on a per-file basis. Thanks to Mike Alexander, who implemented this feature in 2007, and worked for over 3 years to convince the GnuCash developers to include it. Older versions of GnuCash, such as 1.8.11, apparently had a feature called ""Currency Trading Accounts"", but they behaved differently than Selinger's method." "The only ""authoritative document"" issued by the IRS to date relating to Cryptocurrencies is Notice 2014-21. It has this to say as the first Q&A: Q-1: How is virtual currency treated for federal tax purposes?   A-1: For federal tax purposes, virtual currency is treated as property. General tax principles applicable to property transactions apply to transactions using virtual currency. That is to say, it should be treated as property like any other asset. Basis reporting the same as any other property would apply, as described in IRS documentation like Publication 550, Investment Income and Expenses and Publication 551, Basis of Assets. You should be able to use the same basis tracking method as you would use for any other capital asset like stocks or bonds. Per Publication 550 ""How To Figure Gain or Loss"", You figure gain or loss on a sale or trade of property by comparing the amount you realize with the adjusted basis of the property. Gain. If the amount you realize from a sale or trade is more than the adjusted basis of the property you transfer, the difference is a gain. Loss. If the adjusted basis of the property you transfer is more than the amount you realize, the difference is a loss.  That is, the assumption with property is that you would be using specific identification. There are specific rules for mutual funds to allow for using average cost or defaulting to FIFO, but for general ""property"", including individual stocks and bonds, there is just Specific Identification or FIFO (and FIFO is just making an assumption about what you're choosing to sell first in the absence of any further information). You don't need to track exactly ""which Bitcoin"" was sold in terms of exactly how the transactions are on the Bitcoin ledger, it's just that you bought x bitcoins on date d, and when you sell a lot of up to x bitcoins you specify in your own records that the sale was of those specific bitcoins that you bought on date d and report it on your tax forms accordingly and keep track of how much of that lot is remaining. It works just like with stocks, where once you buy a share of XYZ Corp on one date and two shares on another date, you don't need to track the movement of stock certificates and ensure that you sell that exact certificate, you just identify which purchase lot is being sold at the time of sale." "First of all, it's quite common-place in GnuCash (and in accounting in general, I believe) to have ""accounts"" that represent concepts or ideas rather than actual accounts at some institution.  For example, my personal GnuCash book has a plethora of expense accounts, just made up by me to categorize my spending, but all of the transactions are really just entries in my checking account. As to your actual question, I'd probably do this by tracking such savings as ""negative expenses,"" using an expense account and entering negative numbers.  You could track grocery savings in your grocery expense account, or if you want to easily analyze the savings data, for example seeing savings over a certain time period, you would probably want a separate Grocery Savings expense account. EDIT: Regarding putting that money aside, here's an idea:  Let's say you bought a $20 item that was on sale for $15.  You could have a single transaction in GnuCash that includes four splits, one for each of the following actions: decrease your checking account by $20, increase your expense account by $20, decrease your ""discount savings"" expense account by $5, and increase your savings account (where you're putting that money aside) by $5." Would I have to pay some kind of capital gains tax? And if so, when? Converting Tax paid USD into CAD is not a taxable event. A taxable even will occur if you convert back the CAD into USD. If you receive interest on the CAD then the interest is also a taxable event. Also, is there any reason this is a terrible idea? That will only be known in future. Its like predicting that in future this will turn out to be advantageous, however it may turn out the other way. No, GnuCash doesn't specifically provide a partner cash basis report/function. However, GnuCash reports are fairly easy to write. If the data was readily available in your accounts it shouldn't be too hard to create a cash basis report. The account setup is so flexible, you might actually be able to create accounts for each partner, and, using standard dual-entry accounting, always debit and credit these accounts so the actual cash basis of each partner is shown and updated with every transaction. I used GnuCash for many years to manage my personal finances and those of my business (sole proprietorship). It really shines for data integrity (I never lost data), customer management (decent UI for managing multiple clients and business partners) and customer invoice generation (they look pretty). I found the user interface ugly and cumbersome. GnuCash doesn't integrate cleanly with banks in the US. It's possible to import data, but the process is very clunky and error-prone. Apparently you can make bank transactions right from GnuCash if you live in Europe. Another very important limitation of GnuCash to be aware of: only one user at a time. Period. If this is important to you, don't use GnuCash. To really use GnuCash effectively, you probably have to be an actual accountant. I studied dual-entry accounting a bit while using GnuCash. Dual-entry accounting in GnuCash is a pain in the butt. Accurately recording certain types of transactions (like stock buys/sells) requires fiddling with complicated split transactions. I agree with Mariette: hire a pro. The GnuCash tutorial has some basics on double entry accounting:  http://www.gnucash.org/docs/v1.8/C/gnucash-guide/basics_accounting1.html#basics_accountingdouble2 Wiring is the best way to move large amounts of money from one country to another.  I am sure Japanese banks will allow you to exchange your Japanese Yen into USD and wire it to Canada.   I am not sure if they will be able to convert directly from JPY to CND and wire funds in CND.  If you can open a USD bank account in Canada, that might make things easier. "For the purposes of report generation, I would recommend that you present the data in the currency of the user's home country. You could present another indicator, if needed, to indicate that a specific transaction was denominated in a foreign currency, where the amount represents the value of the foreign-denominated transaction in the user's home country Currency. For example: Airfare from USA to London: $1,000.00 Taxi from airport to hotel: $100.00 (in £) In terms of your database design, I would recommend not storing the data in any one denomination or reference currency. This would require you to do many more conversions between currencies that is likely to be necessary, and will create additional complexity where in some cases, you will need to do multiple conversions per transaction in and out of your reference currency. I think it will be easier for you to store multiple currencies as themselves, and not in a separate reference currency. I would recommend storing several pieces of information separately for each transaction: This way, you can create a calculated Amount for each transaction that is not in the user's ""home"" currency, whereas you would need to calculate this for all transactions if you used a universal reference currency. You could also get data from an external source if the user has forgotten the conversion rate. Remember that there are always fees and variations in the exchange rate that a user will get for their home country's currency, even if they change money at the same place at two different times on the same day. As a result, I would recommend building in a simple form that allows a user to enter how much they exchanged and how much they got back to calculate the exchange rate. So for example, let's say I have $ 200.00 USD and I exchanged $ 100.00 USD for £ 60.00, and there was a £ 3.00 fee for the exchange. The exchange rate would be 0.6, and when the user enters a currency conversion, your site could create three separate transactions such as: USD Converted to £: $100.00 £ Received from Exchange: £ 60.00 Exchange Fee: £ 3.00 So if the user exchanged currency and then ran a balance report by Currency, you could either show them that they now have $ 100.00 USD and £ 57.00, or you could alternatively choose to show the £ 57.00 that they have as $95.00 USD instead. If you were showing them a transaction report, you could also show the fee denominated in dollars as well. I would recommend storing your balances and transactions in their own currencies, as you will run into some very interesting problems otherwise. For example, let's say you used a reference currency tied to the dollar. So one day I exchange $ 100.00 USD for £ 60.00. In this system I would still have 100 of my reference currency. However, if the next day, the exchange rate falls and $ 1.00 USD is only worth £ 0.55, and I change my £ 60.00 back into USD, I will get approxiamately $ 109.09 USD back for my £ 60.00. If I then go and buy something for $ 100.00 USD, the balance of the reference currency would be at 0, but I will still have $ 9.09 USD in my pocket as a result of the fluctuating currency values! That is why I'd recommend storing currencies as themselves, and only showing them in another currency for convenience using calculations done ""on the fly"" at report runtime. Best of luck with your site!" "No.  This is too much for most individuals, even some small to medium businesses.  When you sell that investment, and take the cheque into the foreign bank and wire it back to the USA in US dollars, you will definitely obtain the final value of the investment, converted to US$. Thats what you wanted, right?  You'll get that.  If you also hedge, unless you have a situation where it is a perfect hedge, then you are gambling on what the currencies will do. A perfect hedge is unusual for what most individuals are involved in. It looks something like this:  you know ForeignCorp is going to pay you 10 million quatloos on Dec 31.  So you go to a bank (probably a foreign bank, I've found they have lower limits for this kind of transaction and more customizable than what you might create trading futures contracts), and tell them, ""I have this contract for a 10 million quatloo receivable on Dec 31, I'd like to arrange a FX forward contract and lock in a rate for this in US$/quatloo.""  They may have a credit check or a deposit for such an arrangement, because as the rates change either the bank will owe you money or you will owe the bank money. If they quote you 0.05 US$/quatloo, then you know that when you hand the cheque over to the bank your contract payment will be worth US$500,000.  The forward rate may differ from the current rate, thats how the bank accounts for risk and includes a profit. Even with a perfect hedge, you should be able to see the potential for trouble.  If the bank doesnt quite trust you, and hey, banks arent known for trust, then as the quatloo strengthens relative to the US$, they may suspect that you will walk away from the deal.  This risk can be reduced by including terms in the contract requiring you to pay the bank some quatloos as that happens.  If the quatloo falls you would get this money credited back to your account.  This is also how futures contracts work; there it is called ""mark to market accounting"".  Trouble lurks here.  Some people, seeing how they are down money on the hedge, cancel it.  It is a classic mistake because it undoes the protection that one was trying to achieve.  Often the rate will move back, and the hedger is left with less money than they would have had doing nothing, even though they bought a perfect hedge." "Can someone please clarify if Norbert's gambit is the optimal procedure to exchange CAD to USD? I'm not sure I'd call an arbitrage trade the ""optimal procedure,"" because as you point out you're introducing yet another point of risk in to the transaction.  I think buying the foreign currency for an agreed upon price is the ""optimal procedure."" If you must use this arbitrage trade, try with a government bond fund; they're typically very stable." I use GNUCash. It's a bit more like Quickbooks than plain Quicken, but it's not all that complicated. Probably the most difficult part is understanding the idea of income accounts.  Benefits: For short term planning, I use scheduled transactions. If I'm spending more than I have, it'll show up here. Every paycheck and dollar spent or invested is recorded with the exact date I anticipate it will happen, 30 days in advance. If that would overdraw my checking account, the Future Minimum Balance field will go negative and red. This lets me move float to higher interest savings and retirement funds, and avoids overdraft fees or other mishaps. By looking 30 days ahead in detail, I have enough time to transfer from illiquid assets. For longer term planning, I keep a spreadsheet around that plans out annual expenses. If I'm spending more than I earn, it shows up here. I estimate everything: expenses, savings, taxes, and income. I need this because I have a lot of expenses that are far less frequent than monthly or paycheck-ly. The beauty of it is that once I've got it in place, I can duplicate the sheet and consider tweaks for say taking a new job or moving, or even just changing an insurance plan (probably less relevant for those with access to NHS). Especially when moving to take a new job, it's not as straightforward as comparing salaries, and thus having a document for the status quo to start from lets you focus on the parts that changed. I've done this for many years, and my method has always been to get a bank draft from my Canadian bank and mail it to my UK bank. The bank draft costs $7.50 flat fee and the mail a couple of dollars more. That's obviously quite a lot to pay on $100, so I do this only every six months or so and make the regular payments out of my UK account. It ends up being only a couple of percent in transaction costs, and the exchange rate is the bank rate. Gnucash uses aqbanking, so I'd suggest looking at aqbanking to see if it will do what you want. It seems to be actively developed (as of 26.2.2011), but the main page is in German and my German is a bit rusty... You might also try asking on the gnucash-users list. If you want to convert more than a few thousand dollars, one somewhat complex method is to have two investment accounts at a discount broker that operations both in Canada and the USA, then buy securities for USD on a US exchange, have your broker move them to the Canadian account, then sell them on a Canadian exchange for CAD.  This will, of course, incur trading fees, but they should be lower than most currency conversion fees if you convert more than a few thousand dollars, because trading fees typically have a very small percentage component. Using a currency ETF as the security to buy/sell can eliminate the market risk. In any case, it may take up to a week for the trades and transfer to settle. "As far as I can tell there are no ""out-of-the-box"" solutions for this.  Nor will Moneydance or GnuCash give you the full solution you are looking for.  I imaging people don't write a well-known, open-source, tool that will do this for fear of the negative uses it could have, and the resulting liability.  You can roll-you-own using the following obscure tools that approximate a solution: First download the bank's CSV information: http://baruch.ev-en.org/proj/gnucash.html That guy did it with a perl script that you can modify. Then convert the result to OFX for use elsewhere: http://allmybrain.com/2009/02/04/converting-financial-csv-data-to-ofx-or-qif-import-files/"