fix errors
This commit is contained in:
parent
9784f8627b
commit
ccb8c2967c
23
algo/mm.py
23
algo/mm.py
@ -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
|
||||||
|
@ -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"]:
|
||||||
|
Loading…
Reference in New Issue
Block a user