2022 FIRO HummingBot campaign

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

2 Likes

Do you think it’s valuable to support liquidity on Gate.io? Somehow low volume there.

I’ll come back to my experience a little later (I have to leave), but for this question on Gate.io, I’ll give you a quick answer:

All other things being equal, bots on Gate.io therefore earn significantly more FIRO and HBOT than bots on Binance.com. Is it useful? In my opinion, no: it’s creating an artificial gap.

On the other hand, what would seem useful to me is to promote the FIRO-BTC pair at Binance.

One thing I’m not too fond of is the over reliance on Binance. While they are a great exchange they are excluded from many important markets like the US.

Gate.io has less requirements and is the go to for altcoins besides Kucoin as well.

1 Like

Yes, you are right.

The fair solution would be to weight the FIRO (and HBOT?) rewards according to the trading volume made on each platform. Looking quickly, Binance does about 15 times (to be verified more precisely over a few weeks) more volume than Gate.io on the FIRO-USDT pair, so a fair reward split would be:

  • Binance.com:
    FIRO: (118x2x15)/16 = 221.25 FIRO
    HBOT: (20.833x2x15)/16 = 39,061.875 HBOT
  • Gate.io:
    FIRO: (118x2x1)/16 = 14.75 FIRO
    HBOT: (20.833x2x1)/16 = 2,604.125 HBOT

Some news from my robot:

It has been working 24 hours a day for 3 days.
The first day, he didn’t place any orders (I don’t know why).
So he placed orders for 2 days.
I changed a lot of parameters in 3 days and there are really a lot of related parameters: difficult to be sure of the right choice for each parameter (the configuration proposed by Reuben above seems to be a top configuration : I haven’t explored everything yet.).

My numbers:
Spread: 0.5%
The spread is the most important parameter according to HumminBot and they advise a spread of 1%, but it is too high: almost no order goes through. But beware of the fees (2x0.1%) if you are tempted to lower it too much.
Target pct basis: 50
Max order age: 900

My results :
Profit & Loss (HummingBot dashboard): loss (-0.90%)
I have been losing since the first order placed: this drop varies but stabilizes between approximately 0.5 and 2.5%.
Earnings from FIRO sponsorship: approximately 1 FIRO
Balance (Profit & Loss - fees + FIRO sponsorship): I haven’t made a precise calculation, but in order of magnitude, I must be a very slight loser.

I will continue to explore this robot: it is complex and the “liquidity mining” strategy is really specific, sometimes even against our habits.

Some news from my liquidity mining robot:

The numbers (winnings are counted per week: we are halfway through the current week):

  • We are 38 robots on Binance’s FIRO-USDT pair and we share 118 Firos.
  • I am TOP3 (about 15$) since the beginning of the weekly ranking. I thought I would lose this place quickly and fall to last, but no.
  • TOP2 and TOP1 are tied (about $65, TOP2 just passed TOP1, congratulations :-)) and very far ahead of me. TOP4 is half of my result.
    From TOP10, earnings drop below $5.
    From TOP17, we are below $1.

My comments:

  • I should be enthusiastic given my TOP3, but it’s very misleading: in reality, I’m losing money. On the one hand I make money (liquidity mining campaign) but on the other hand I lose money (losing trades + fees) and I lose a lot more th an I win. I tried a lot and continue to do so and in the end I lost 20% of my bet. I am in the process of completely modifying my strategy and I have good hopes of returning to equilibrium within 4 or 5 weeks, if there is no market crash by then.
  • Earning money with liquidity mining is not easy. Nothing is acquired and we play against each other. There are experts with very sophisticated strategies, who manage to adapt their spread to market volatility.
  • So you have to read a lot and try a lot. Despite this, nothing is certain because it is strategy on something unpredictable: human behavior.
  • So be careful (but it’s exciting).

Btw because you’re rewarded for providing liquidity (not necessarily trades) having it at 1% is fine too :slight_smile:

Yes, absolutely: for 2 days I have been increasing my spread. Yesterday, the volatility increased and I still had a few trades (losers), so I increased my spread again and no trades since 14 hours.
I will win a lot less but I will lose even less: that’s what makes me think that I will recover my losses in a few weeks :-).

I saw that you advised the “pure market making” strategy. Me, as it’s about “liquidity mining”, I left on the “liquidity mining” strategy.
Do you think that the “pure market making” strategy makes it possible to do better than that of “liquidity mining”, or is it just that the “liquidity mining” strategy is recent and you haven’t had the opportunity to test it?

I tested the “pure market making” strategy and that’s where I lost the most, but as you know, it’s because I took the problem backwards, so I’m at fault. I plan to test it again as soon as I have a little more perspective on that of “liquidity mining”, and taking the problem in the right direction this time.

If you have any advice it would be welcome.
Thank you.

1 Like

The second week of the 2022 liquidity mining campaign has just ended: time to check-up the situation.

The overall results:

  • 44 robots participated.
  • They shared 118 FIRO ($413.58) and 20,833 HBOT (unrated).
  • The first 2 in the ranking won $142.85 + $130.09 = $272.94, or 65.99% of the bonus.
  • The next 42 shared the remaining 33.10% of the bonus.
  • I am 3rd and I won $16.21 bonus (but I lost 30% of my capital).
  • Among the top 10, 8 are part of the “eagle club”: they are high-level HuminBot users and earn a significant amount of money each month (at least $578.12 for the current month).
  • The 2 people in the TOP10 who are not part of this club (therefore beginners) are me and the one who arrived in 9th position.
  • From the 9th position, the bonus drops below $10 ($9.75).
  • Whoever comes in 10th position wins $7.08 bonus.
  • From 25th position, the bonus drops below $1.

What this ranking inspires me:

  1. The use of HumminBot requires a lot of learning and time: 8 of the TOP 10 are “eagle club” and of the 2 remaining, at least 1 loses money (me).
  2. Earning a bonus does not mean earning money: out of the 44 robots in operation, I am probably not the only one to lose capital. How many lose money, in what proportion of their investment?
  3. The bonus split amounts result in huge variations between the first 2 and the next 42. The first 2 most likely deserve their bonus because they have the skill the others don’t. But if this kind of bonus were to be paid by the FIRO community fund, that would be seem to me very inconsistent with the “community development” aspect.

As for my losses:
1) Caution:
Since my beginnings, I have progressed a lot in my understanding of liquidity miing and my knowledge of HummingBot. I managed to reduce my losses, but not to stop them completely. So I probably still have a lot to learn.
Be extremely careful before you start: the learning phase is long and results in losses.
2) Caution again:
There are robot specialists in the markets and a liquidity mining strategy set up by a beginner (lots of parameters left at their default settings) is very easily predictable, thus easy prey to “liquidity hunter” robots.

1 Like

I haven’t tried the liquidity mining strategy but it appears to be more resistant to volatility as it has an additional setting:

Volatility-Spread adjustment is another key feature of this strategy, where the spreads are dynamically adjusted based on the volatility of the markets.

volatility_interval int 300 False What is an interval, in second, in which to pick historical mid price data from to calculate market volatility?
avg_volatility_period int 10 False How many interval does it take to calculate average market volatility?
volatility_to_spread_multiplier decimal 1 False Enter a multiplier used to convert average volatility to spread

I haven’t grokked all these settings yet though.

1 Like

Contrary to what one might suppose, the trades that have been triggered in recent days (therefore with a high spread: 1%), have not been triggered on the largest candles, but rather on medium candles with significant wicks.
Each triggered trade is unique and it is difficult to generalize.
But I do think there is a time lag between the trade executing and the source of its explanation (which clears the order book until a 1% spread is executed). What would create this shift would probably be the volatility calculation, so the 3 parameters you mention are very important to master: this is not my case yet.

In my search for explanations, I went to look at the log files: I was also surprised at the number of errors encountered by the robot (usually with the API), which sometimes must prevent it from reacting in time. .

I took advantage of the week that is beginning to relaunch a test of the “pure_market-making” strategy, taking inspiration from your parameters: I love the “order_levels: 3” :slight_smile:

1 Like

To the guys here, I’ve been following your progress on this and you seem to have learned a lot, I planning to getting into liquidity mining for this campaign. What resources would you recommend for learning about how to program a good bot, furthermore is liquidity mining the same thing as running a regular trading bot. I’ve already downloading hummingbird, please let me know if it’s not too much trouble.

Good news: HummingBot is open-source, so no need to program everything. From what I saw, the software is programmed mainly in python.

The only resources needed here are a computer (without power constraints, even a Celeron will do, unless you want to run 10 bots at the same time: my bot takes between 4 and 8% of my 8 years old i3) and a text editor.

As for complexity: I would be lying if I said that all you need to do is configure your bot for 5 minutes to make money. This is not for everyone. We can clearly see this in the results of the current campaign: 8 of the top 10 are “eagles”, therefore very experienced users, probably experts (who sometimes do all the campaigns, therefore “pros” of bots) and, despite their gains, some may be, like me, losers.
I think the best advice I can give is to invest only a limited amount and expect to lose some of it. So if you’re a beginner and you’re going there to make some money, it seems difficult to me (but I could be wrong).
The only thing to do: try :slight_smile:

2 Likes

Awesome, thanks for the round up :grinning:, is there anything I should read up on to try to get liquidity mining info or just try different settings for myself and see what works?

On their website there are 2 very extensive sections: the more you read, the better :

2 Likes

Their Discord is also great.

1 Like

Regarding the profitability of liquidity mining campaigns: still for the past week (April 12-19), but for all current campaigns (not just FIRO), there was $51,556.34 bonus to be shared :

  • There were 3044 robots that were counted,
  • 90% of robots (from 305° to 3044°) received $0.03 or less
  • 1% of robots earned $555.61 and more,
  • no robot won more than $3,394

But these gains should not overshadow the capital losses: impossible to know how many people are losing but given the bots complexity and he currencies price unpredictability, probably a lot.
Another unknown that these figures do not reveal: what is the height of the capital that one must bet for these bonus gains: in my experience, a lot.

In the end, the risk is high for a low hope of gain (but a high complexity).

The third week of the 2022 liquidity mining campaign has just ended: time to check-up the situation.

The overall results:

  • 48 robots participated.
  • Like each week, they shared 118 FIRO ($385,94, FIRO has lost value since last week) and 20,833 HBOT (unrated).
  • The first 2 in the ranking won $130.78 + $125.50 = $256.28, or 66.40% of the total bonus.
  • The next 46 shared the remaining 33.60% of the bonus.
  • Te third (not me this week) won $15.53 bonus.
  • Among the top 10, 8 are part of the “eagle club”: they are high-level HuminBot users and earn a significant amount of money each month (at least $578.34 for the current month).
  • The 2 people in the TOP10 who are not part of this club (therefore beginners) are the one who arrived in 8h and 9th position (they won respectively $5,97 and $5.48).
  • From the 8th position, the bonus drops below $10 ($5.97).
  • Whoever comes in 10th position wins $5.39 bonus.
  • From 24th position, the bonus drops below $1.
  • I am in the 25th position and I won $0,86.

What this ranking inspires me:

  • These figures are comparable to those of last week, so this confirms my previous remarks.
  • I did a test with the pure market making strategy. This was instructive, but not conclusive in the end. While everything had been working well for more than 24 hours, I could not prevent the robot from making 4 orders in quick succession (3 losers and 1 single winner, so another capital loss).
  • I did another test that I found very interesting: to limit trading losses, I increased the spread, knowing that this would reduce my bonus gains: the question was how far these gains would be reduced. I therefore placed my spread at 1.8% (the maximum spread to participate is 2%). The annualized return was 0.85%! I remind you that the performance displayed on the HummingBot site is 200%!!! For example, masternodes have a return that varies around 11%, without any risk. If you don’t have 1,000 FIRO, an exchange like Binance will offer you 5.78% for a minimum of 100 FIRO, again without any trading risk (and there is other offers with others exchanges).

In conclusion:

  • I did not manage to earn money with this campaign, I even lost some. I hope some do. If some succeed, congratulation to them, but it’s a tiny minority (I remind you here that 2 robots get 2/3 of the bonuses). This type of campaign is only intended for very competent specialists: in no case can it claim to be addressed to a large community.
    *This campaign aims to provide liquidity to the market. In practice, you quickly understand that to have gains, you must prevent your orders from being executed. So in the end, the less your orders are executed, the more you earn, so this kind of campaign does not offer any additional liquidity, just an illusion of liquidity.
2 Likes

Hey @Zen just a heads up I alerted the Hummingbot people to your comments as well :slight_smile:

1 Like