bsips icon indicating copy to clipboard operation
bsips copied to clipboard

BSIP 67: Dynamic Market Fees

Open OpenLedgerApp opened this issue 7 years ago • 3 comments

Abstract

A UIA owners does not have many marketing tools to increase trade volume of their assets.

One of the ways to increase the trade volume can be Dynamic Market Fees that will provide additional discounts for active traders. For example, to set lower fees for trading larger volumes.

So, instead of market fee, an asset owner can optionally set up dynamic_market_fee_percent property that may look like a following example table.

image

Motivation

  • To provide additional marketing tools to encourage traders.
  • To increase trading volume on BitShares.
  • To attract traders to the ecosystem.

Rationale

Use cases:

  1. Supporting money makers. Every trade occurs between two parties: the maker, whose order exists on the order book prior to the trade, and the taker, who places the order that matches (or "takes") the maker's order.

Makers are so named because their orders make the liquidity in a market. Takers are the ones who remove this liquidity by matching makers' orders with their own.

The maker-taker model encourages market liquidity by rewarding the makers of that liquidity with a fee discount. It also results in a tighter market spread due to the increased incentive for makers to outbid each other. The higher fee that the taker pays is usually offset by the better prices this tighter spread provides.

  1. Supporting heavy volume traders. Fees are charged and deduced on a per-trade basis. The bigger “trading volume” users have traded, the lower fee they get on subsequent trades.

Technical Specifications

We suggest using average total volume for a particular asset. However, it's open for the discussion.

Statistics Storage

There are two options for storing account statistics for trading:

  1. expand class account_statistics_object by adding a map of trade_statistics_object for each asset
  2. create a new type trade_statistics_object and a new index

Trade statistics object

class trade_statistics_object
{
    
 account_id_type owner;
    asset_id_type asset;
    timestamp first_trade_date; //first trade date for this asset
    share_type total_volume; //total bought asset volume
 };

Statistics Update Statistics updates during fill_order. We need to update statistics for the user and for the specific asset at the same time.

Trader Activity is estimated as average trading volume of a user for a given asset for 1 day.

Trader_activity = total_volume / (Now - first_start_date) //(in days). This way we accumulate total bought volume for each user for each asset and average out daily volumes for his entire term of trading of this asset (per day).

Please let us know your thoughts, OpenLedger team

OpenLedgerApp avatar Nov 29 '18 11:11 OpenLedgerApp

IMHO it's much easier and more flexible to achieve the goal with an external tool.

abitmore avatar Nov 29 '18 21:11 abitmore

Instead of money makers do you mean market makers?

nutelina avatar Dec 15 '18 19:12 nutelina

Instead of money makers do you mean market makers?

Thanks :)

OpenLedgerApp avatar Dec 17 '18 07:12 OpenLedgerApp