This is an app to keep you abreast of your cryptocurrency investments. It shows in your system tray whether your investments have gone up or down. It can also display charts of your investments over time.
I won't provide binaries for this as given the sensitive nature of API keys, I think source code transparency is important, so you'll need to build it yourself. VS 2019 Community will do just fine, or dotnet build
from the SDK if you're a command line warrior.
In appSettings.json
set PollInterval
to a value of your liking.
If you would like to monitor multiple exchanges, configure them as below and comma separate the list of exchanges in the Clients
setting, e.g. BinanceExchangeClient,CoinbaseExchangeClient
.
In Binance, create an API key. The default permissions (Enable Reading
) should suffice.
Set BinanceCredentials.ApiKey
and BinanceCredentials.SecretKey
in appSettings.json
with the values obtained from Binance. Add BinanceExchangeClient
to the Clients
setting.
In Coinbase, create an API key with the permission wallet:accounts:read
.
Set CoinbaseCredentials.ApiKey
and CoinbaseCredentials.ApiSecret
in appSettings.json
with the values obtained from Coinbase. Add CoinbaseExchangeClient
to the Clients
setting.
In Coinbase Pro, create an API key with View
permissions.
Set CoinbaseProCredentials.ApiKey
, CoinbaseProCredentials.ApiSecret
and CoinbaseProCredentials.Passphrase
in appSettings.json
with the values obtained from Coinbase Pro. Add CoinbaseProExchangeClient
to the Clients
setting.
Depending on the exchange, its API may not return exchange rate details for a particular crypto currency to your preferred fiat currency. In this instance, the monitor can be configured to request your balance in an intermediate currency, then automatically convert it to your preferred fiat.
So, for example, if Coinbase Pro only supports XLM-EUR and your preferred fiat is GBP you can configure the monitor to perform this conversion with the following in appSettings.json
.
"ExchangeRateFallbacks": [
{
"Exchange": "CoinbasePro",
"CryptoCurrency": "XLM",
"FiatCurrency": "EUR"
}
],
"FiatCurrency": "GBP"
The tray icon will display an arrow pointing up, down or right depending whether your investment has gone up, down or stayed the same respectively.
Hover over the icon for a quick summary which will show the time the balances were last checked, the all time high, the current value and the all time low.
Click on the icon for a chart showing the history of all investments. This form will close when you click elsewhere on the screen.
Right click the icon for the menu. Exit is self explanatory. Click on a currency to show a history window for that currency. You may also choose whether to keep these windows on top of all others from this menu.
The app can also optionally update a cell in a spreadsheet with your current balance (if you're nerd like me who tracks finances in a spreadsheet). Simply put the path to the spreadsheet in the ExcelFilePath
app setting and put the cell in ExcelCell
.
I've configured mine to run on system start.
I created a folder off of the root of C:\
called dotnet Apps
. Within there, I created a subfolder Coinbase.BalanceMonitor
. In there, I put the output of a Release
build, and set the appSettings.json
accordingly.
Then, pressed Win + R
and typed shell:startup
to open an explorer view of startup shortcuts. Finally, dragged a shortcut to the exe into that location. When dragging the exe, hold ctrl
and shift
to create a shortcut.
If you plan on developing this application further, you'll want your API keys deployed to the build folder, but not set in the original appSettings.json
(as they could end up in source control).
There is a post-build step which will copy values from \secrets\secrets.json
into appSettings.json
in the output folder.
This is to prevent accidental check-in of secrets (API keys, passwords etc...) to source control as the secrets
folder is excluded by .gitignore
.
Any value surrounded by braces {}
in appSettings.json
will be replaced if there is a corresponding entry in secrets.json
.
\secrets\secrets.json
{
"CoinbaseApiKey": "my-api-key",
"CoinbaseApiSecret": "my-api-secret"
}
\src\MoneyMonitor.Windows\appSettings.json
{
"CoinbaseCredentials": {
"ApiKey": "{CoinbaseApiKey}",
"ApiSecret": "{CoinbaseApiSecret}"
}
}
Trading is performed by a separate application, MoneyMonitor.Trader.Console
. This is so that it can be run independently of the Windows monitoring UI.
The trading application currently only supports Coinbase Pro.
It could be run on an AWS instance for example, potentially in the same region as the Coinbase Pro API for speedier communication.
Secrets held within consoleSettings.json
can be updated in the same way as the Windows application. See Secrets above.
You will need to also add the Trade
permission to the API key you create.