Browse Source

market making

raylu 4 weeks ago
parent
commit
bb8820bcb8
1 changed files with 42 additions and 0 deletions
  1. 42 0
      market.py

+ 42 - 0
market.py

@@ -0,0 +1,42 @@
+from __future__ import annotations
+
+import dataclasses
+import typing
+
+import cache
+
+def main() -> None:
+	raw_prices: list[RawPrice] = cache.get('https://refined-prun.github.io/refined-prices/all.json')
+	markets: list[Market] = []
+	for price in raw_prices:
+		if (traded := price['AverageTraded7D']) is None or traded < 100:
+			continue
+		if price['Bid'] is None or price['Ask'] is None:
+			continue
+		spread = (price['Ask'] - price['Bid']) / price['Ask']
+		if spread < 0.15:
+			continue
+		markets.append(Market(price['FullTicker'], bid=price['Bid'], ask=price['Ask'], spread=spread, traded=traded))
+	markets.sort(key=lambda m: (m.ask - m.bid) * m.traded, reverse=True)
+
+	print(f'{"mat":^8} {"bid":^5} {"ask":^5} spread {"traded":^7} ')
+	for market in markets:
+		print(f'{market.full_ticker:>8} {market.bid:5} {market.ask:5} {market.spread*100: 5.0f}% {market.traded:7}')
+
+class RawPrice(typing.TypedDict):
+	FullTicker: str
+	Bid: float | None
+	Ask: float | None
+	AverageTraded7D: float | None # averaged daily traded volume over last 7 days
+
+@dataclasses.dataclass(eq=False, slots=True)
+class Market:
+	full_ticker: str
+	bid: float
+	ask: float
+	spread: float
+	traded: float
+
+
+if __name__ == '__main__':
+	main()