2021-11-28 09:39:07 -08:00
|
|
|
# Mango Markets Market Maker
|
|
|
|
|
|
|
|
## Setup
|
|
|
|
To run the market maker you will need:
|
|
|
|
* A Solana account with some SOL deposited to cover transaction fees
|
|
|
|
* A Mango Account with some collateral deposited and a name (tip: use the UI)
|
|
|
|
* Your wallet keypair saved as a JSON file
|
|
|
|
* `node` and `yarn`
|
2021-11-28 12:31:42 -08:00
|
|
|
|
|
|
|
```shell
|
|
|
|
mkdir blockworks-foundation
|
|
|
|
cd blockworks-foundation
|
|
|
|
git clone https://github.com/blockworks-foundation/market-maker-ts.git
|
|
|
|
cd market-maker-ts
|
|
|
|
yarn install
|
|
|
|
|
|
|
|
## Open .env file and set env vars like this example ##
|
|
|
|
export KEYPAIR=~/.config/solana/id.json
|
|
|
|
export ENDPOINT_URL="https://mango.rpcpool.com/946ef7337da3f5b8d3e4a34e7f88"
|
|
|
|
export PARAMS=default.json
|
|
|
|
|
|
|
|
## Set mangoAccountName in params file to reflect the name of your MangoAccount
|
|
|
|
```
|
|
|
|
|
|
|
|
## Run via terminal
|
|
|
|
```shell
|
|
|
|
. run.sh
|
|
|
|
```
|
|
|
|
|
|
|
|
## Run via systemd
|
|
|
|
If you're running the market maker on a server, you might want to run it via systemd to have auto restarts
|
|
|
|
```shell
|
|
|
|
chmod 755 run.sh
|
|
|
|
cd /etc/systemd/system
|
|
|
|
sudo nano mm.service
|
|
|
|
|
|
|
|
## Set the systemd service file like this and replace the *** lines with your own
|
|
|
|
***ExecStart=/home/dd/blockworks-foundation/market-maker-ts/run.sh
|
|
|
|
***WorkingDirectory=/home/dd/blockworks-foundation/market-maker-ts/
|
|
|
|
Restart=always
|
|
|
|
RuntimeMaxSec=1800
|
|
|
|
RestartSec=5s
|
|
|
|
LimitNOFILE=4096
|
|
|
|
IgnoreSIGPIPE=false
|
|
|
|
KillMode=control-group
|
|
|
|
***User=dd
|
|
|
|
|
|
|
|
sudo systemctl daemon-reload
|
|
|
|
sudo systemctl start mm.service
|
|
|
|
```
|
|
|
|
|
|
|
|
You can watch the log output with:
|
|
|
|
```shell
|
|
|
|
journalctl -f -u mm.service
|
|
|
|
```
|
|
|
|
|
|
|
|
And stop the mm:
|
|
|
|
```shell
|
|
|
|
sudo systemctl stop mm.service
|
|
|
|
```
|
|
|
|
|
2021-11-28 09:39:07 -08:00
|
|
|
|
|
|
|
## Environment Variables
|
|
|
|
| Variable | Default | Description |
|
|
|
|
| -------- | ------- | ----------- |
|
|
|
|
| `ENDPOINT_URL` | `https://mango.rpcpool.com` | Your RPC node endpoint |
|
|
|
|
| `KEYPAIR` | `${HOME}/.config/solana/id.json` | The location of your wallet keypair |
|
2021-11-28 10:08:28 -08:00
|
|
|
| `PARAMS` | `default.json` | params file |
|
2021-11-28 09:39:07 -08:00
|
|
|
|
|
|
|
|
|
|
|
## Market Maker Params
|
|
|
|
### See params/default.json for an example
|
2021-11-28 10:08:28 -08:00
|
|
|
| Variable | Default | Description |
|
|
|
|
| -------- | ------- | ----------- |
|
2021-11-28 09:39:07 -08:00
|
|
|
| `group` | `mainnet.1` | Name of the group in ids.json |
|
|
|
|
| `interval` | `10000` | Milliseconds to wait before updating quotes |
|
|
|
|
| `mangoAccountName` | N/A | The MangoAccount name you input when initializing the MangoAccount via UI |
|
|
|
|
| `mangoAccountPubkey` | N/A | If no MangoAccount name, just pass in the pubkey |
|
|
|
|
| `assets` | N/A | Mapping of symbols to trade and their specific params |
|
|
|
|
| `size_perc` | `0.1` | The size of each order as a percentage of equity |
|
|
|
|
| `charge` | `0.0010` | Half the quote width |
|
|
|
|
| `lean_coeff` | `0.0005` | How much to move the quotes per unit size of inventory |
|
|
|
|
| `bias` | `0` | Fixed amount to bias. Negative values bias downward. e.g. -0.0005 biases down 5bps |
|
2021-11-28 10:08:28 -08:00
|
|
|
| `requoteThresh` | `0` | How much new bid/ask price must change to requote; e.g. 0.0002 implies 2bps |
|
2021-11-28 09:39:07 -08:00
|
|
|
|
|
|
|
|