id | Title | Status | Author | Description | Discussions to | Created |
---|---|---|---|---|---|---|
TIP-132 | Change how min_spread variable is applied on Overtime | Draft | Danijel (@danthales) | Change how min_spread variable is applied on Overtime | https://discord.gg/thales | 2023-03-15 |
Change the application of min_spread from an additive method to relative multiplication
This TIP proposes to change the min_spread application from being added as a net value to the default odds, to being a multiplier
Adding min_spread as an additive value was inherited from ThalesAMM architecture. While not an incorrect way to apply the margin, it led to Overtime having significantly better payouts on favourites and worse payouts on underdogs.
Overtime takes odds from oracle as those are provided by the selected book, e.g. Pinnacle, then we normalize odds to add up to 1 (or 100%). After the normalization we apply our own margin by adding min_spread variable and skew to the normalized odds. This yields a following scenario noticed on a tennis match with a heavy favourite:
API odds
favourite 1.03 | 97.1%
underdog 12 | 8.3%
sum = 105.4
Normalized odds:
97.1/105.4 = 0.9212
8.3/105.4 = 0.078
Our odds:
(0.9212 + 0.0133x1.5)x1.01 = 0.9505615 | 1.05
(0.078 + 0.0133x1.5)x1.01 = 0.0989295 | 10.1
In this example Overtime ended up having a 40% better payout on he favourite.
I believe its best to change our approach to using min_spread as a relative multiplier (4%), which will always get the odds back to the values on par with those received from the oracles. I feel this imperfection in odds has likely set us back somewhat PnL wise, and this change will allows us to have a better control over increasing liquidity.
After the change the odds would be:
0.9212 *1.04*1.01 = 0.96762848
0.078 *1.04*1.01 = 0.0819312
Thus almost exactly the same as on the API
Use min_spread as a relative multiplier instead of an additive constant. Set min_spread value to 4% (0.04 on 18 decimals)
Copyright and related rights waived via CC0.