The configuration I link below is a good starting point for a liquidity mining strategy.
- This is a basic pure market making strategy that is market neutral (meaning it’s not bullish or bearish on FIRO).
- It tries to keep a 50/50 balance between FIRO and USDT.
- It will place 3 orders on each side (3 orders on buy and 3 orders on sell).
- It places orders at the 0.2%, 0.7% and 1.3% (configurable using order_level_spread)
- It increases the size of the order on each level due to the less risk involved with higher spreads.
Remember the closer you place the order to the mid price, the more rewards you’ll get. Liquidity provided only counts if it’s within the 2% band from the current price.
There are a few things you would need to customize:
inventory_range_multiplier:
This controls how far you will let the bot drift from the inventory spread and will stop placing orders on one side if it goes too far off. It will also adjust order size to try and keep it in this inventory range. You can play around with it and type status to see how it affects the percentage.
order_amount
This is how much FIRO you want to place on an order.
order_levels
My configuration starts at 3 which means 3 on buy side and 3 on sell side. You can reduce or up this.
order_level_amount
This is how much you want to increase the order on each level. For example if you have an order amount at 50 and place the order_level_amount at 25, each level will increase by 25. Meaning 50, 75 and 100.
order_level_spread
This is how much gap you want to leave between each level. For e.g. in the current configuration I use 0.5 and a starting ask/bid spread at 0.2. This means each level increments 0.5%
########################################################
### Pure market making strategy config ###
########################################################
template_version: 22
strategy: pure_market_making
# Exchange and token parameters.
exchange: binance
# Token trading pair for the exchange, e.g. BTC-USDT
market: FIRO-USDT
# How far away from mid price to place the bid order.
# Spread of 1 = 1% away from mid price at that time.
# Example if mid price is 100 and bid_spread is 1.
# Your bid is placed at 99.
bid_spread: 0.2
# How far away from mid price to place the ask order.
# Spread of 1 = 1% away from mid price at that time.
# Example if mid price is 100 and ask_spread is 1.
# Your bid is placed at 101.
ask_spread: 0.2
# Minimum Spread
# How far away from the mid price to cancel active orders
minimum_spread: -100.0
# Time in seconds before cancelling and placing new orders.
# If the value is 60, the bot cancels active orders and placing new ones after a minute.
order_refresh_time: 60.0
# Time in seconds before replacing existing order with new orders at the same price.
max_order_age: 1800.0
# The spread (from mid price) to defer order refresh process to the next cycle.
# (Enter 1 to indicate 1%), value below 0, e.g. -1, is to disable this feature - not recommended.
order_refresh_tolerance_pct: 0.05
# Size of your bid and ask order.
order_amount: 50.0
# Price band ceiling.
price_ceiling: -1.0
# Price band floor.
price_floor: -1.0
# Whether to alternate between buys and sells (true/false).
ping_pong_enabled: false
# Whether to enable Inventory skew feature (true/false).
inventory_skew_enabled: true
# Target base asset inventory percentage target to be maintained (for Inventory skew feature).
inventory_target_base_pct: 50.0
# The range around the inventory target base percent to maintain, expressed in multiples of total order size (for
# inventory skew feature).
inventory_range_multiplier: 0.15
# Initial price of the base asset. Note: this setting is not affects anything, the price is kept in the database.
inventory_price: 1.0
# Number of levels of orders to place on each side of the order book.
order_levels: 3
# Increase or decrease size of consecutive orders after the first order (if order_levels > 1).
order_level_amount: 75.0
# Order price space between orders (if order_levels > 1).
order_level_spread: 0.5
# How long to wait before placing the next order in case your order gets filled.
filled_order_delay: 300.0
# Whether to stop cancellations of orders on the other side (of the order book),
# when one side is filled (hanging orders feature) (true/false).
hanging_orders_enabled: false
# Spread (from mid price, in percentage) hanging orders will be canceled (Enter 1 to indicate 1%)
hanging_orders_cancel_pct: 10.0
# Whether to enable order optimization mode (true/false).
order_optimization_enabled: true
# The depth in base asset amount to be used for finding top ask (for order optimization mode).
ask_order_optimization_depth: 0.0
# The depth in base asset amount to be used for finding top bid (for order optimization mode).
bid_order_optimization_depth: 0.0
# Whether to enable adding transaction costs to order price calculation (true/false).
add_transaction_costs: false
# The price source (current_market/external_market/custom_api).
price_source: current_market
# The price type (mid_price/last_price/last_own_trade_price/best_bid/best_ask/inventory_cost).
price_type: mid_price
# An external exchange name (for external exchange pricing source).
price_source_exchange:
# A trading pair for the external exchange, e.g. BTC-USDT (for external exchange pricing source).
price_source_market:
# An external api that returns price (for custom_api pricing source).
price_source_custom_api:
# An interval time in second to update the price from custom api (for custom_api pricing source).
custom_api_update_interval: 5.0
#Take order if they cross order book when external price source is enabled
take_if_crossed:
# Use user provided orders to directly override the orders placed by order_amount and order_level_parameter
# This is an advanced feature and user is expected to directly edit this field in config file
# Below is an sample input, the format is a dictionary, the key is user-defined order name, the value is a list which includes buy/sell, order spread, and order amount
# order_override:
# order_1: [buy, 0.5, 100]
# order_2: [buy, 0.75, 200]
# order_3: [sell, 0.1, 500]
# Please make sure there is a space between : and [
order_override:
# If the strategy should wait to receive cancellations confirmation before creating new orders during refresh time
should_wait_order_cancel_confirmation: true
# For more detailed information, see:
# https://docs.hummingbot.io/strategies/pure-market-making/#configuration-parameters