Here’s my 2 cents on this one: (I’m assuming you are filing US taxes on the income for this year).
While in Canada I worked for a CDN Company who had mostly US clients. We always invoiced in USD but received funds in CDN dollars from our USD bank account. Accounting wise it should be the same principle I’m figuring though just in reverse. Note it’s not a self-employed situation, but the converting of invoicing should be similar in my thinking.
Since your business is based in the US the accounting will be done in US funds no?
Therefore you would invoice your CDN customers in CDN dollars and create (based on the date of the original invoice) a US equivalent Invoice based on the date of the invoice's exchange rate for your records/accounting software(for your records and piece of mind tie a copy of the CDN invoice and the rate of exchange for that day to the new USD invoice). I often used
http://www.bank-banque-canada.ca/en/rates/converter.html but it is essential that you use the CASH rate not the nominal rate because no bank will ever give you the nominal rate.
Then when you receive the monies for the transaction and transfer them into your US account - you will have a difference in the exchange on the day of the invoice vs. the exchange on the day of the funds being received. This difference is to be put in an exchange gain or loss account (singular account), which probably this year will be a loss account because of the low USD.
But this would keep all your income in USD and then at tax time you won’t have to be bothered with tax conversions etc. and all your income would be recorded in USD.
Now how all that is affected if you leave some funds in the CDN account and never transfer them to the US account.. I'm not sure on that one.. cause we always transferred as soon as the rates looked okay (always within a couple of weeks).
Not an accountant.. but those are my thoughts and experience from past employment!