# 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.