Change way how we determine the BSQ rate for a DAO cycle #270
Currently we determine the BSQ/USD rate from the 30 days average of the market price based on our trade statistics. This was a poor choice as the trade statisics data are not verifiable and can be faked. Such seems to has happened just now as a few trades are far off the market price and with bigger BTC amounts they had considerable influence on the average price. This can have been caused from a self trade or from publishing fake trade statistics. The data from trade statistics was never intended to be used for anything critical but only for informational purposes, due the known weakness of those data.
I suggest that for this cycle we do also the DAO voting on a suggested rate, even if there is consensus reached on the GH proposal. As we change a kind of "social" contract a DAO vote gives that change more weight and legitimacy.
As the BSQ trade fee adjustment is also based on the 30/90 days average I think we should extend that to that as well. We could simple take the suggested rate from the past DAO cycles instead.
@MwithM Sorry to put those burden on you without first asking you. Are you ok with taking that responsibility? Otherwise anyone else who can take that task?
A side note:
The text was updated successfully, but these errors were encountered:
I think this proposal is an improvement for both traders and contributors in that it ensures the price of BSQ is more closely tied to actual prices it is being bought and sold on BISQ, and less vulnerable to manipulation.
To avoid subjectivity it would be useful to define how the price was determined from the 30/90 day average, and also how outliers where determined.
Using the 30 day average (adjusted after the outliers have been removed) would add more volatility to the BSQ price, but would give a more real time reflection of current prices.
Using the 90 day average (adjusted after the outliers have been removed) would add more stability to the BSQ price, but would give a less accurate reflection of current prices.
To take both into account would be a compromise if done in such a way that can be calculated, and is an objective measurement. For example:
((30 day adjusted weighted volume BSQ/BTC price) + (30 day adjusted weighted volume BSQ/BTC price) / 2 )
The removal of outliers could also take into account the increased price someone might be willing to pay for a small amount of BSQ. A buyer of 10 BSQ will likely pay a significant increase on market price. Therefore, it would be useful to define what constitutes an outlier. I would suggest this could be calculated on the spread. Outliers would be defined as any offer which traded at a premium or discount to a given percentage spread from current mid market rate. NB: It would not be accurate in this instance to use the 30 or 90 day average, as they are in themselves made up of all the BSQ trades, including any self trades, test trades, trades attempting to manipulate the BSQ price.
I just added a PR for exporting the trade statistics as csv: bisq-network/bisq#4702
Here is another PR for adding removal of outliers (same code base we use in issued BSQ outlier removal):
One can adjust the threshold where outliers are removed (default 5%) in the settings. This makes it quite flexible if trades try to just get below the threshold as the compensation maintainer could adjust it.
Weighted medians would have been an alternative but as the code base was already there for the outliers I have choosen that option.