fix errors

This commit is contained in:
falsycat 2023-07-23 16:55:27 +09:00
parent 9784f8627b
commit ccb8c2967c
2 changed files with 32 additions and 21 deletions

View File

@ -46,19 +46,19 @@ class MM:
if not lastBuyAgreed and self._lastBuy is not None: if not lastBuyAgreed and self._lastBuy is not None:
logging.info(f"cancel buy") logging.info(f"cancel buy")
cancel_orders.append(self._lastBuy) cancel_orders.append(self._lastBuy)
self._lastBuy = None
elif lastBuyAgreed: elif lastBuyAgreed:
logging.info(f"agree buy") logging.info(f"agree buy")
if not lastSellAgreed and self._lastSell is not None: if not lastSellAgreed and self._lastSell is not None:
logging.info(f"cancel sell") logging.info(f"cancel sell")
cancel_orders.append(self._lastSell) cancel_orders.append(self._lastSell)
self._lastSell = None
elif lastSellAgreed: elif lastSellAgreed:
logging.info(f"agree sell") logging.info(f"agree sell")
if len(cancel_orders) != 0: if len(cancel_orders) != 0:
await self._player.cancel(self._pair.names, cancel_orders) await self._player.cancel(self._pair.names, cancel_orders)
self._lastBuy = None
self._lastSell = None
# execute cutting # execute cutting
if cutting: if cutting:
@ -66,7 +66,6 @@ class MM:
logging.info(f"-cut (change: {change}, pos: {pos} -> 0)") logging.info(f"-cut (change: {change}, pos: {pos} -> 0)")
if posCut: if posCut:
logging.info(f"+cut (change: {change}, pos: {pos} -> 0)") logging.info(f"+cut (change: {change}, pos: {pos} -> 0)")
self._lastPrice = None
self._lastBuy = None self._lastBuy = None
self._lastSell = None self._lastSell = None
sell_amount = pos * lot sell_amount = pos * lot
@ -77,29 +76,29 @@ class MM:
return return
# execute new cycle # execute new cycle
buy_amount = _quad( pos) * lot self._lastPrice = None
sell_amount = _quad(-pos) * lot
buy_price = price * (1 - self._delta); buy_price = price * (1 - self._delta);
sell_price = price * (1 + self._delta); sell_price = price * (1 + self._delta);
order_unit = pow(10, -sales.precision) buy_amount = min(_quad( pos) * lot, crncy.amount / buy_price)
sell_amount = min(_quad(-pos) * lot, sales.amount)
order_unit = pow(10, -sales.precision)
logging.info(f"new cycle (pos: {pos}, price: {price}, buy: {buy_amount}, sell: {sell_amount})") logging.info(f"new cycle (pos: {pos}, price: {price}, buy: {buy_amount}, sell: {sell_amount})")
async def buy(): async def buy():
return (None if order_unit > buy_amount else self._lastBuy = (
None if order_unit > buy_amount else
await self._player.orderLimitBuy( await self._player.orderLimitBuy(
self._pair.names, amount = buy_amount, price = buy_price)) self._pair.names, amount = buy_amount, price = buy_price))
async def sell(): async def sell():
return (None if order_unit > sell_amount else self._lastSell = (
None if order_unit > sell_amount else
await self._player.orderLimitSell( await self._player.orderLimitSell(
self._pair.names, amount = sell_amount, price = sell_price)) self._pair.names, amount = sell_amount, price = sell_price))
orders = await asyncio.gather(buy(), sell()) await asyncio.gather(buy(), sell())
self._lastBuy = orders[0]
self._lastSell = orders[1]
self._lastPrice = price self._lastPrice = price
# https://kijitora-2018.hatenablog.com/entry/2018/12/23/102913 # https://kijitora-2018.hatenablog.com/entry/2018/12/23/102913

View File

@ -1,4 +1,5 @@
# No copyright # No copyright
import asyncio
import logging import logging
class Player: class Player:
@ -12,7 +13,6 @@ class Player:
"pair": f"{pair[0]}_{pair[1]}", "pair": f"{pair[0]}_{pair[1]}",
"order_ids": orders "order_ids": orders
}) })
self._check(res)
async def orderMarketSell(self, pair, amount): async def orderMarketSell(self, pair, amount):
res = await self._post("user/spot/order", data={ res = await self._post("user/spot/order", data={
@ -21,7 +21,7 @@ class Player:
"side": "sell", "side": "sell",
"type": "market", "type": "market",
}) })
return self._check(res)["data"]["order_id"] return res["data"]["order_id"]
async def orderMarketBuy(self, pair, amount): async def orderMarketBuy(self, pair, amount):
res = await self._post("user/spot/order", data={ res = await self._post("user/spot/order", data={
@ -30,7 +30,7 @@ class Player:
"side": "buy", "side": "buy",
"type": "market", "type": "market",
}) })
return self._check(res)["data"]["order_id"] return res["data"]["order_id"]
async def orderLimitSell(self, pair, amount, price): async def orderLimitSell(self, pair, amount, price):
res = await self._post("user/spot/order", data={ res = await self._post("user/spot/order", data={
@ -40,7 +40,7 @@ class Player:
"side": "sell", "side": "sell",
"type": "limit", "type": "limit",
}) })
return self._check(res)["data"]["order_id"] return res["data"]["order_id"]
async def orderLimitBuy(self, pair, amount, price): async def orderLimitBuy(self, pair, amount, price):
res = await self._post("user/spot/order", data={ res = await self._post("user/spot/order", data={
@ -50,7 +50,7 @@ class Player:
"side": "buy", "side": "buy",
"type": "limit", "type": "limit",
}) })
return self._check(res)["data"]["order_id"] return res["data"]["order_id"]
async def update(self): async def update(self):
self.assets = {} self.assets = {}
@ -65,12 +65,24 @@ class Player:
self.orders[order["order_id"]] = Order(order) self.orders[order["order_id"]] = Order(order)
async def _post(self, suffix, data): async def _post(self, suffix, data):
res = await self._pb.post(f"https://api.bitbank.cc/v1/{suffix}", data=data) for i in range(10):
return self._check(await res.json()) try:
res = await self._pb.post(f"https://api.bitbank.cc/v1/{suffix}", data=data)
return self._check(await res.json())
except Exception as e:
err = e
await asyncio.sleep(1)
raise Exception(f"API error: {suffix} ({err})")
async def _get(self, suffix): async def _get(self, suffix):
res = await self._pb.get(f"https://api.bitbank.cc/v1/{suffix}") for i in range(10):
return self._check(await res.json()) try:
res = await self._pb.get(f"https://api.bitbank.cc/v1/{suffix}")
return self._check(await res.json())
except Exception as e:
err = e
await asyncio.sleep(1)
raise Exception(f"API error: {suffix} ({err})")
def _check(self, json): def _check(self, json):
if "success" not in json or 1 != json["success"]: if "success" not in json or 1 != json["success"]: