add MM algorithm for bitbank

This commit is contained in:
2023-07-23 01:06:38 +09:00
parent b5cb84828d
commit f6413a3389
4 changed files with 215 additions and 1 deletions

23
util/pair.py Normal file
View File

@@ -0,0 +1,23 @@
# No copyright
import logging
class Pair:
def __init__(self, pb, names):
self.names = names
self._pb = pb
async def update(self):
ticker = (await self._get("ticker"))["data"]
self.ticker = Ticker(ticker)
async def _get(self, suffix):
res = await self._pb.get(f"https://public.bitbank.cc/{self.names[0]}_{self.names[1]}/{suffix}")
json = await res.json()
if "success" not in json or 1 != json["success"]:
code = json["data"]["code"]
raise Exception(f"API error: {code}")
return json
class Ticker:
def __init__(self, json):
self.price = float(json["last"])

77
util/player.py Normal file
View File

@@ -0,0 +1,77 @@
# No copyright
import logging
class Player:
def __init__(self, pb):
self._pb = pb
self.assets = {}
self.orders = {}
async def cancel(self, pair, orders):
res = await self._post("user/spot/cancel_orders", data={
"pair": f"{pair[0]}_{pair[1]}",
"order_ids": orders
})
self._check(res)
async def orderLimitSell(self, pair, amount, price):
res = await self._post("user/spot/order", data={
"pair": f"{pair[0]}_{pair[1]}",
"amount": str(amount),
"price": str(price),
"side": "sell",
"type": "limit",
})
return self._check(res)["data"]["order_id"]
async def orderLimitBuy(self, pair, amount, price):
res = await self._post("user/spot/order", data={
"pair": f"{pair[0]}_{pair[1]}",
"amount": str(amount),
"price": str(price),
"side": "buy",
"type": "limit",
})
return self._check(res)["data"]["order_id"]
async def update(self):
self.assets = {}
self.orders = {}
assets = (await self._get("user/assets"))["data"]["assets"]
for asset in assets:
self.assets[asset["asset"]] = Asset(asset)
orders = (await self._get("user/spot/active_orders"))["data"]["orders"]
for order in orders:
self.orders[order["order_id"]] = Order(order)
async def _post(self, suffix, data):
res = await self._pb.post(f"https://api.bitbank.cc/v1/{suffix}", data=data)
return self._check(await res.json())
async def _get(self, suffix):
res = await self._pb.get(f"https://api.bitbank.cc/v1/{suffix}")
return self._check(await res.json())
def _check(self, json):
if "success" not in json or 1 != json["success"]:
code = json["data"]["code"]
raise Exception(f"API error: {code}")
return json
class Asset:
def __init__(self, json):
self.name = json["asset"]
self.amount = float(json["onhand_amount"])
self.locked = float(json["locked_amount"])
self.precision = int(json["amount_precision"])
class Order:
def __init__(self, json):
self.id = json["order_id"]
self.pair = json["pair"]
self.amount = float(json["start_amount"])
self.remain = float(json["remaining_amount"])
self.price = float(json["average_price"])