After the MarketMakingApp bot is installed and configured, you are ready to start market-making. We expect that you’ve finished the Installation guide and get a response to the /balances command.

We show how it works on the DOGE/USDT@StakeCube as a demo. You have your own trading pair and exchange, configured in the config.jsonc file.

This Quick Start guide shows some of the features of the free bot version. Premium modules expand functionality.

Note: Don’t hold many tokens and USDT on your account until you understand trading and market-making risks.

Trading volume

For market-making, you manage trade volume, spread, liquidity/depth, order book, and a token price.

The software places orders and matches them to create a trading volume. There are three trading strategies available in the basic bot version:

Spread — trade in spread only. The bot places orders at prices between bid and ask and fits them by itself. If a spread is below minimal, it notifies you and stops market-making until the spread appears again. Using this strategy means a lower risk of asset loss, but there might be “no-trade” intervals when there is no spread, which spoil the trading picture. A percent of buy-type orders is set with the /buyPercent command.

Orderbook — trade from the order book only. The bot buys and sells from the order book. Trading looks realistic, but the risk of asset loss is higher, as the bot can buy and sell from other users. If liquidity is enabled with the /enable liq, the bot can trade with itself, reducing the risks. We don’t recommend using this strategy if liquidity is disabled—when other users trade, the bot can buy high, sell low, enlarge the spread, and lose assets.

Optimal — the default strategy. If liquidity is set, the bot will trade both in spread and from the order book. If liquidity is disabled, the bot uses the spread strategy.

We recommend starting with the spread strategy and then switching to optimal.

The software places orders with random amounts as you set. Send the command to the bot:

/amount 4-200

The bot will place each order with an amount between 4 and 200 DOGE and the same USDT equivalent.

Then, tell the bot how often to trade to make a trading volume:

/interval 3-120 sec

The bot will make trades randomly between 3 sec and 2 min. Don’t set a lower interval below 3 sec — the API will probably not handle it. Don’t trade too often — an exchange’s API has limits, and this affects other requests, like dynamic order book building. 3–60 sec is good, while 3–5 sec is bad.

Note: These commands do not enable market-making. To start it, run the command: /start mm spread — it will begin market-making with the spread strategy.

After some time, adjust the amount and interval according to your needs. Don’t stop the bot while changing the values. To enlarge daily volume, make the /amount bigger and the /interval lower.

Starting and stopping the bot

Enter the command /start mm {strategy} to start the bot. The bot will launch all enabled modules.

If you want to stop a bot, run the command: /stop mm.

It will actually pause the market-making but not cancel open orders. Use the /clear all command to cancel orders. Note that it will cancel all orders, including those placed via the exchange's website.

Dynamic order book building

This feature brings the order book to life by constantly placing and removing orders. In the web interface, it looks as if there are many traders on the trading pair actively placing positions.

To enable the dynamic order book, run:

/enable ob 20 30%

Value 20 tells the bot to have a maximum of 20 orders of “dynamic order book building” (ob) type.

Note: Ensure your account has enough DOGE and USDT to place this number of orders. Each order amount is as you set with the /amount command * 30%. In this example, you need 20 * {max-order-amount} * 30% available DOGE and the same USDT equivalent. We don’t recommend setting the number of ob-orders higher than 40, as it will raise server load.

Liquidity and spread

You can enable liquidity and spread maintenance with the command:

/enable liq 2% 2000 DOGE 200 USDT middle

The bot will place several buy and sell liquidity (liq) orders in the order books close to the spread: buying with up to 200 USDT and selling up to 2000 DOGE. The spread will be about 2%, and the middle is a trend. Possible trend values are uptrend, downtrend, and middle. A trend means where to place liquidity orders relative to the current bid–ask. In case of an uptrend, the bot places orders closer to the higher bound of the spread, and the token price will tend to grow.

Note: If some user matches the bots’ liq-orders, the bot will place new ones to maintain the spread and liquidity. This means if users, for example, sell a lot of DOGE, the bot will buy all of them with USDT at the current price and can run out of USDT balance. To change this behavior, refer to the Safe Liquidity premium feature.

Following a price

With the help of the Price Watcher module, you can set a bot to follow a static price range or a price on another exchange. The bot will avoid buying high and selling low, verifying that the bot modules place orders at a suitable price.

Additionally, if a price moves out of the safe range, a bot can set it back by buying or selling tokens with the fill option enabled.

The prevent option works in another way: it disallows the bot modules, such as liquidity, to place orders out of the Price Watcher range, prohibiting buying high and selling low. In the prevent mode, the bot isn’t forced to set a price back to the range but instead offers a safe price range to other modules.

If you choose a static range, the feature controls a token’s price in the low–high range. You can set a price range in any currency; the bot will convert it into the trading pair's currency.


/enable pw 0.13-0.16 USDT prevent

The command set the bot to place buy-orders at prices below 0.16 USDT and sell-orders at prices above 0.13 USDT; the 0.13–0.16 range is safe both for bids and asks.

You can also command the bot to follow the price on another exchange. There might be different reasons for such behavior; the most common are following a price on an exchange with the most liquidity, and preventing arbitrage when you run bots on several exchanges.

It’s a good practice to set the leading trading pair with the most liquidity (for example, DOGE/USDT@Binance) in a numerical range and target the rest bots to the leading trading pair:

/enable pw DOGE/USDT@Binance 1.5% strict fill

1.5% is an allowed price deviation, and strict is a price control policy.

With this command, when DOGE/USDT@Binance price changes, the bot on the current exchange will also follow the price update.

Manual orders

Manual orders allow you to place trading orders without visiting an exchange’s website.

Use the /buy and /sell commands to place a single order and the /fill command to place several orders within a price range.


/buy quote=7 price=0.15

The bot will place an order to buy DOGE for 7 USDT at 0.15 price.

/buy amount=1000 price=0.15

The bot will place an order to buy 1000 DOGE at 0.15 price.

/buy amount=1000

The bot will place an order to buy 1000 DOGE at a market price.

/fill buy quote=50 low=0.07 high=0.15 count=10

The bot will place up to 10 buy-orders for ~50 USDT (total) in the 0.07–0.15 USDT price range. This command is excellent for filling the order books.


The bot sends notifications about warnings and errors, which you’ll probably want to handle, such as when there are not enough balances.

Refer to the Fill in the config file section of the Installation guide to set up notifications.

Run CoinOptimus

Although the market-making bot can work independently, it is most effective in conjunction with CoinOptimus, which adds "safe" liquidity (buys cheaper, sells more expensive), while the MM-bot does the rest of the work.

Moving ahead

See your bot's settings with the /params command.

You can request /stats, /orders, /deposit, /account, /info and /pair from the bot at any time.

Next, learn the Command reference.

Because of possible API errors, a bot can fail to close some orders, leading to frozen balances. See all open orders with the /orders command. To close all untracked orders and unfreeze balances, run the /clear unk. Note: It will also cancel orders placed via an exchange's website. Note: This command can run up to a few minutes if there are many open orders.

Final notes

Trading is about buying and selling. Other users buy and sell, too. This means they can sell tokens to the bot or buy tokens from the bot. If a token's price changes, the bot can buy at a high price and then sell at a low price, which leads to asset losses.

Any trading strategy is also connected with buying and selling, and you can run out of balances.

Other risks exist, such as software or API errors. Note that only you take full responsibility for using the MarketMakingApp.

When you create API keys for the bot:

  • Create a separate account for the market-making bot. Don't use this account to trade or place orders on the exchange's website. Don't use this account for other bots.
  • Top up the account balances with enough, but not excessive, amounts of both token and USDT. Start with a lower balance, and after you've understood how market-making works, consider topping up more.
  • Don't provide withdrawal permissions to the API keys; set only read+trading.