Currency exchange problem
"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!"
Be aware that ATM withdrawals often generate hidden fees, which are not obviously declared. Many banks operate e.g. with a currency exchange fee, giving you an exchange rate some 1-2% lower than actually applicable. If you withdraw larger amounts, such a currency exchange fee easily adds up to what you would have paid for a wire transfer, where you would get a better exchange rate. Although it's probably much hassle for you to change banks, another option may be to find a bank which operates both in France and the US. Banks with different national branches often offer cheap and fast wire transfers between same-bank accounts in different countries. E.g. Citibank used to offer such services, but I am not sure if they still serve private customers in France. "Fees & liabilities Yes, the first problem is that liabilities are being improperly booked. If the fee you charge is fixed upon deposit then the fee should credit ""Revenue"", the fee charged to you should be booked by crediting cash and then debiting ""Expenses"", and the remaining should be booked as a liability. If the fee is fixed upon withdrawal then this will become more complex because of the fact that a change in the fee can occur before it can be applied.  In this case, the current fee should be credited as ""Revenue"" and some ""Allowance for fee increase"" should also be credited.  The amount owed to the withdrawer should be booked as a liability as before. Multiple currency bookings I will assume that this is for a cryptocurrency service of some sort considering the comments in your question and your presence on bitcoin.se. Accounting can become very dangerous when mixing denominations.  This is why all major accounting standards mandate books be maintained single currency. In your case, if the deposit is in USD, for example, and the liability is in BTC then two books must be maintained, one for each. To account for your operation properly using single currency accounts, the denominations must be exchanged internally and balanced across the two sets of books. For a deposit of BTC/depository of USD, the operation would be the same as described above, but then the cash should be credited away and the liabilities debited away from the USD books with simultaneous cash debits and liability credits on the BTC books. Considering the extreme volatility of cryptocurrency exchange rates, denominating accounts on the wrong set of books will quickly lead to insolvency or loss from improper accounting or both. From revenue to income Revenue can be construed as a liability since it could theoretically exist on the balance sheet. I mention this because all books, despite their name and quarter, are really simply long T accounts, like a blockchain.  A blockchain could be subdivided into users' individual income statements & balance sheets, as the reverse of this concept. Revenues are credited, expenses are debited.  The difference, ""net income"", is debited away with a credit to ""owners' equity""." I've always understood inflation to be linked to individual currencies, although my only research into the subject was an intro economics course in undergrad and I don't recall seeing why that would be the case.  I guess the basic principle is that currency traders are watching the printing presses and trading in exchange markets to the point that the exchange rates fall in relation to increases in money supply. There's probably something about the carry trade in there as well, but it's late and I took some medications, so someone else will have to carry that torch. I must admit I've not really paid attention to foreign currencies like HKD, but the proximity and political relationship with China probably greatly complicates your question, since part of the problem has been China's currency peg. If you are restricting yourself to Scotiabank (Both retail banking and iTrade), your choices are pretty limited.  If you are exchanging more than CAD$25,000 to EUR without margin, you can call Scotiabank and ask for a quote with much lower spread than the published snapshots.  The closest ETF that you are talking about is RWE.B on TSX, which is First Asset MSCI Europe Low Risk Weighted ETF (Unhedged). You will be exposed to huge equity market risk and you should do it only if you intend to hold it for 3-5 years.  Another way of exchanging cash is without opening an account is through a currency exchange broker (search “toronto currency exchange” for relevant companies). First you send an email asking for a quote for the amount you wanted, then you send the CAD to them via cheque, and they would convert to EUR and deposit it to your EUR account at Scotiabank (retail banking). This method costs around 0.7% compared to 2.5% charged by Scotiabank. An example of these brokers is Interchange Currency Exchange in Toronto.  If you are hedging more than 125000 EUR, the proper method is to open an account that supports trading Currency Futures on Globex (US CME group). You can long Euro/Canadian Dollar Futures on margin.  The last method is to open an account at Interactive Brokers, put CAD in it, then borrow more CAD to buy EUR. This method costs a few dollars upon trading and the spread is negligible. You need to pay 2.25% per year margin interest through. Depends on the countries and their rules about moving money across the border,  but in this case that appears entirely reasonable. Of course it would be a gamble unless you can predict the future values of currency better than most folks; there is no guarantee that the exchange rate will move in any particular direction. I have no idea whether any tax is due on profit from currency arbitrage. These are the steps I'd follow: $200 today times (1.04)^10 = Cost in year 10.  The 6 deposits of $20 will be one time value calculation with a resulting year 7 final value. You then must apply 10% for 3 years (1.1)^3 to get the 10th year result.  You now have the shortfall. Divide that by the same (1.1)^3 to shift the present value to start of year 7. (this step might confuse you?) You are left with a problem needing 3 same deposits, a known rate, and desired FV. Solve from there.  (Also, welcome from quant.SE. This site doesn't support LATEX, so I edited the image above.) "Wow, this turns out to be a much more difficult problem than I thought from first looking at it. Let's recast some of the variables to simplify the equations a bit. Let rb be the growth rate of money in your bank for one period. By ""growth rate"" I mean the amount you will have after one period. So if the interest rate is 3% per year paid monthly, then the interest for one month is 3/12 of 1% = .25%, so after one month you have 1.0025 times as much money as you started with. Similarly, let si be the growth rate of the investment. Then after you make a deposit the amount you have in the bank is pb = s. After another deposit you've collected interest on the first, so you have pb = s * rb + s. That is, the first deposit with one period's growth plus the second deposit. One more deposit and you have pb = ((s * rb) + s) * rb + s = s + s * rb + s * rb^2. Etc. So after n deposits you have pb = s + s * rb + s * rb^2 + s * rb^3 + ... + s * rb^(n-1). This simplifies to pb = s * (rb^n - 1)/(rb - 1). Similarly for the amount you would get by depositing to the investment, let's call that pi, except you must also subtract the amount of the broker fee, b. So you want to make deposits when pb>pi, or s*(ri^n-1)/(ri-1) - b > s*(rb^n-1)/(rb-1) Then just solve for n and you're done! Except ... maybe someone who's better at algebra than me could solve that for n, but I don't see how to do it. Further complicating this is that banks normally pay interest monthly, while stocks go up or down every day. If a calculation said to withdraw after 3.9 months, it might really be better to wait for 4.0 months to collect one additional month's interest. But let's see if we can approximate. If the growth rates and the number of periods are relatively small, the compounding of growth should also be relatively small. So an approximate solution would be when the difference between the interest rates, times the amount of each deposit, summed over the number of deposits, is greater than the fee. That is, say the investment pays 10% per month more than your bank account (wildly optimistic but just for example), the broker fee is $10, and the amount of each deposit is $200. Then if you delay making the investment by one month you're losing  10% of $200 = $20. This is more than the broker fee, so you should invest immediately. Okay, suppose more realistically that the investment pays 1% more per month than the bank account. Then the first month you're losing 1% of $200 = $2. The second month you have $400 in the bank, so you're losing $4, total loss for two months = $6. The third month you have $600 in the bank so you lose an additional $6, total loss = $12. Etc. So you should transfer the money to the investment about the third month. Compounding would mean that losses on transferring to the investment are a little higher than this, so you'd want to bias to transferring a little earlier. Or, you could set up a spreadsheet to do the compounding calculations month by month, and then just look down the column for when the investment total minus the bank total is greater than the broker fee. Sorry I'm not giving you a definitive answer, but maybe this helps." You could of course request payment in EUR or USD, maybe keep a PayPal account and just leave the funds in PayPal unless you need to withdraw the money in local currency? Either currency would be fine because the problem you are trying to overcome is the instability in the ruble. EUR and USD both accomplish that. If you can get local clients to pay in EUR or USD (again, PayPal seems like an easy way to accomplish that) you avoid the ruble, but at the risk that your services become more expensive to local clients because they have to convert a weaker currency to a stronger one. You should also solicit some international clients! You are obviously perfectly fluent in English and that's a significant advantage. And they'll be happy to pay in dollars and euros.