Premium percentile computing

This commit is contained in:
Reckless_Satoshi
2022-01-18 10:24:45 -08:00
parent f010fe9bb0
commit 980a385528
3 changed files with 28 additions and 9 deletions

View File

@ -3,6 +3,8 @@ import requests, ring, os
from decouple import config from decouple import config
import numpy as np import numpy as np
from api.models import Order
market_cache = {} market_cache = {}
@ring.dict(market_cache, expire=3) #keeps in cache for 3 seconds @ring.dict(market_cache, expire=3) #keeps in cache for 3 seconds
@ -49,7 +51,6 @@ def get_exchange_rates(currencies):
return median_rates.tolist() return median_rates.tolist()
lnd_v_cache = {} lnd_v_cache = {}
@ring.dict(lnd_v_cache, expire=3600) #keeps in cache for 3600 seconds @ring.dict(lnd_v_cache, expire=3600) #keeps in cache for 3600 seconds
def get_lnd_version(): def get_lnd_version():
@ -59,7 +60,6 @@ def get_lnd_version():
return lnd_version return lnd_version
robosats_commit_cache = {} robosats_commit_cache = {}
@ring.dict(robosats_commit_cache, expire=3600) @ring.dict(robosats_commit_cache, expire=3600)
def get_commit_robosats(): def get_commit_robosats():
@ -67,4 +67,22 @@ def get_commit_robosats():
lnd_version = stream.read() lnd_version = stream.read()
return lnd_version return lnd_version
premium_percentile = {}
@ring.dict(premium_percentile, expire=300)
def compute_premium_percentile(order):
queryset = Order.objects.filter(currency=order.currency, status=Order.Status.PUB)
print(len(queryset))
if len(queryset) <= 1:
return 0.5
order_rate = float(order.last_satoshis) / float(order.amount)
rates = []
for similar_order in queryset:
rates.append(float(similar_order.last_satoshis) / float(similar_order.amount))
rates = np.array(rates)
return round(np.sum(rates < order_rate) / len(rates),2)

View File

@ -11,7 +11,7 @@ from django.contrib.auth.models import User
from .serializers import ListOrderSerializer, MakeOrderSerializer, UpdateOrderSerializer from .serializers import ListOrderSerializer, MakeOrderSerializer, UpdateOrderSerializer
from .models import LNPayment, MarketTick, Order, Currency from .models import LNPayment, MarketTick, Order, Currency
from .logics import Logics from .logics import Logics
from .utils import get_lnd_version, get_commit_robosats from .utils import get_lnd_version, get_commit_robosats, compute_premium_percentile
from .nick_generator.nick_generator import NickGenerator from .nick_generator.nick_generator import NickGenerator
from robohash import Robohash from robohash import Robohash
@ -125,7 +125,7 @@ class OrderView(viewsets.ViewSet):
# 3. c) If maker and Public, add num robots in book, premium percentile and num similar orders. # 3. c) If maker and Public, add num robots in book, premium percentile and num similar orders.
if data['is_maker'] and order.status == Order.Status.PUB: if data['is_maker'] and order.status == Order.Status.PUB:
data['robots_in_book'] = None # TODO data['robots_in_book'] = None # TODO
data['premium_percentile'] = None # TODO data['premium_percentile'] = compute_premium_percentile(order)
data['num_similar_orders'] = len(Order.objects.filter(currency=order.currency, status=Order.Status.PUB)) data['num_similar_orders'] = len(Order.objects.filter(currency=order.currency, status=Order.Status.PUB))
# 4) Non participants can view details (but only if PUB) # 4) Non participants can view details (but only if PUB)
@ -326,9 +326,9 @@ class UserView(APIView):
return Response(context, status.HTTP_400_BAD_REQUEST) return Response(context, status.HTTP_400_BAD_REQUEST)
# Does not allow this 'mistake' if the last login was sometime ago (5 minutes) # Does not allow this 'mistake' if the last login was sometime ago (5 minutes)
if request.user.last_login < timezone.now() - timedelta(minutes=5): # if request.user.last_login < timezone.now() - timedelta(minutes=5):
context['bad_request'] = f'You are already logged in as {request.user}' # context['bad_request'] = f'You are already logged in as {request.user}'
return Response(context, status.HTTP_400_BAD_REQUEST) # return Response(context, status.HTTP_400_BAD_REQUEST)
token = request.GET.get(self.lookup_url_kwarg) token = request.GET.get(self.lookup_url_kwarg)

View File

@ -256,7 +256,7 @@ export default class TradeBox extends Component {
<ListItemIcon> <ListItemIcon>
<SmartToyIcon/> <SmartToyIcon/>
</ListItemIcon> </ListItemIcon>
<ListItemText primary={999} secondary="Robots looking at the book"/> <ListItemText primary={'000 coming soon'} secondary="Robots looking at the book"/>
</ListItem> </ListItem>
<Divider/> <Divider/>
@ -272,7 +272,8 @@ export default class TradeBox extends Component {
<ListItemIcon> <ListItemIcon>
<PercentIcon/> <PercentIcon/>
</ListItemIcon> </ListItemIcon>
<ListItemText primary="33%" secondary="Premium percentile" /> <ListItemText primary={"Premium rank " + this.props.data.premiumPercentile*100+"%"}
secondary={"Among public " + this.props.data.currencyCode + " orders (higher is cheaper)"} />
</ListItem> </ListItem>
<Divider/> <Divider/>