[Mod] complete test of order/trade push update

This commit is contained in:
vn.py 2019-09-25 22:53:13 +08:00
parent d868bdf0da
commit e0c15d4eee

View File

@ -216,6 +216,7 @@ class BitstampRestApi(RestClient):
# so use this offset dict instead. # so use this offset dict instead.
if not request.data: if not request.data:
request.data = {"offset": "1"} request.data = {"offset": "1"}
payload_str = urlencode(request.data) payload_str = urlencode(request.data)
message = "BITSTAMP " + self.key + \ message = "BITSTAMP " + self.key + \
@ -252,7 +253,9 @@ class BitstampRestApi(RestClient):
self, request: Request self, request: Request
): ):
""" """
Sending request to server and get result. Bistamp API server does not support keep-alive connection.
So when using session.request will cause header related error.
Reimplement this method to use requests.request instead.
""" """
try: try:
request = self.sign(request) request = self.sign(request)
@ -387,6 +390,14 @@ class BitstampRestApi(RestClient):
self.query_order() self.query_order()
def query_history(self):
""""""
self.add_request(
method="GET",
path="/trading-pairs-info/",
callback=self.on_query_contract,
)
def cancel_order(self, req: CancelRequest): def cancel_order(self, req: CancelRequest):
"""""" """"""
path = "/cancel_order/" path = "/cancel_order/"
@ -405,18 +416,20 @@ class BitstampRestApi(RestClient):
def on_cancel_order(self, data, request): def on_cancel_order(self, data, request):
"""""" """"""
error = data.get("error", "")
if error:
self.gateway.write_log(error)
return
cancel_request = request.extra cancel_request = request.extra
local_orderid = cancel_request.orderid local_orderid = cancel_request.orderid
order = self.order_manager.get_order_with_local_orderid(local_orderid) order = self.order_manager.get_order_with_local_orderid(local_orderid)
if "error" in data: if order.is_active:
order.status = Status.REJECTED
else:
order.status = Status.CANCELLED order.status = Status.CANCELLED
self.order_manager.on_order(order)
self.gateway.write_log(f"撤单成功:{order.orderid}") self.gateway.write_log(f"撤单成功:{order.orderid}")
self.order_manager.on_order(order)
def on_cancel_order_error(self, data, request): def on_cancel_order_error(self, data, request):
"""""" """"""
@ -593,11 +606,13 @@ class BitstampWebsocketApi(WebsocketClient):
self.gateway.on_tick(copy(tick)) self.gateway.on_tick(copy(tick))
buy_orderid = data["buy_order_id"] # Order status check
sell_orderid = data["sell_order_id"] buy_orderid = str(data["buy_order_id"])
sell_orderid = str(data["sell_order_id"])
for sys_orderid in [buy_orderid, sell_orderid]: for sys_orderid in [buy_orderid, sell_orderid]:
order = self.order_manager.get_order_with_sys_orderid(sys_orderid) order = self.order_manager.get_order_with_sys_orderid(
sys_orderid)
if order: if order:
order.traded += data["amount"] order.traded += data["amount"]
@ -609,6 +624,19 @@ class BitstampWebsocketApi(WebsocketClient):
self.order_manager.on_order(copy(order)) self.order_manager.on_order(copy(order))
trade = TradeData(
symbol=order.symbol,
exchange=order.exchange,
orderid=order.orderid,
tradeid=data["id"],
direction=order.direction,
price=data["price"],
volume=data["amount"],
time=tick.datetime.strftime("%H:%M:%S"),
gateway_name=self.gateway_name
)
self.gateway.on_trade(trade)
def on_market_depth(self, packet): def on_market_depth(self, packet):
"""""" """"""
channel = packet["channel"] channel = packet["channel"]
@ -641,8 +669,9 @@ class BitstampWebsocketApi(WebsocketClient):
if event != "order_deleted": if event != "order_deleted":
return return
sys_orderid = data["id"] sys_orderid = str(data["id"])
order = self.order_manager.get_order_with_sys_orderid(sys_orderid) order = self.order_manager.get_order_with_sys_orderid(sys_orderid)
if order:
if order and order.is_active():
order.status = Status.CANCELLED order.status = Status.CANCELLED
self.order_manager.on_order(copy(order)) self.order_manager.on_order(copy(order))