68 lines
2.2 KiB
Markdown
68 lines
2.2 KiB
Markdown
# moonmath
|
|
|
|
## Bullshit Crypto Price Projections, Now in Your CLI!
|
|
|
|
![screenshot](./screenshot.png)
|
|
|
|
This is a re-implementation of [Moon Math][moon] that runs locally as a CLI
|
|
program. It's written in Go using the [Bubble Tea][tea] library, and uses
|
|
[Coindesk][coin] to source price data.
|
|
|
|
[moon]: https://www.moonmath.win
|
|
[tea]: https://github.com/charmbracelet/bubbletea
|
|
[coin]: https://www.coindesk.com
|
|
|
|
### Installation
|
|
|
|
Go to the [Releases page](https://code.humancabbage.net/sam/moonmath/releases)
|
|
and download the archive for your operating system and architecture. (For the
|
|
uninitiated, "Darwin" means macOS.)
|
|
|
|
### Configuration
|
|
|
|
By default, the program will use Bitcoin along with various goals and bases of
|
|
comparison. With the `--asset` flag, another asset supported by Coindesk can be
|
|
chosen. These can even be chained, e.g. `--asset BTC --asset ETH`, to show
|
|
projections for multiple assets simultaneously.
|
|
|
|
The [builtin default config](./config/default.yaml) only has special
|
|
goals a handful of the most popular assets. With the `--config-file` flag,
|
|
however, one can specify a YAML file that overrides these defaults and adds
|
|
goals for other assets.
|
|
|
|
Check out [coindesk/assets.go](./coindesk/assets.go) for a full list of
|
|
supported assets. Keep in mind these have not been exhaustively tested, and
|
|
it's likely that many will fail with the default configuration settings.
|
|
|
|
### "Theory"
|
|
|
|
Given a pair of quotes taken at the start and end of some period,
|
|
|
|
$$ (t_s, p_s), (t_e, p_e) $$
|
|
|
|
we can derive the total gain for that period, and its length in days.
|
|
|
|
$$ g = p_e / p_s $$
|
|
$$ d = t_e - t_s $$
|
|
|
|
Combining these, we can calculate the *compounding daily periodic rate* (CDPR).
|
|
|
|
$$ r = g^{1/d} $$
|
|
|
|
We can use this rate to project the price $ p_f $ at some $ x $ days in the
|
|
future.
|
|
|
|
$$ p_f = p_e r^x $$
|
|
|
|
If we instead make $ p_f $ a target price, we can solve this equation for $ x $,
|
|
telling us how many days it will take to reach that target.
|
|
|
|
$$ x = {{log(p_f) - log(p_e)} \over log(r)} $$
|
|
|
|
### Future Improvements
|
|
|
|
* Add more default configurations for various assets.
|
|
* Allow projection by date, e.g. use the CDPR to calculate what the price
|
|
would be on a particular date.
|
|
* Log errors to a file.
|