async def get_ohlc(exchange: str, symbol: str = Query(..., title="symbol"), timeframe: int = Query(..., title="candle timeframe")): try: api = rest_api_map[exchange]() response = await api.get_ohlc(symbol=symbol, timeframe=int(timeframe)) if response.is_ok: return UJSONResponse(status_code=response.status_code, content={"data": response.value}) else: return UJSONResponse(status_code=response.status_code, content={"error": response.value}) except Exception as e: return UJSONResponse(status_code=status.HTTP_400_BAD_REQUEST, content={"error": repr(e)})
async def get_instrument(exchange: str, symbol: str = Query(..., title="symbol")): try: api = rest_api_map[exchange]() response = await api.get_instrument(symbol=symbol) if response.is_ok: return UJSONResponse(status_code=response.status_code, content={**response.value}) else: return UJSONResponse(status_code=response.status_code, content={"error": response.value}) except Exception as e: return UJSONResponse(status_code=status.HTTP_400_BAD_REQUEST, content={"error": repr(e)})
async def get_closed_positions(exchange: str): try: api = rest_api_map[exchange]() response = await api.get_closed_positions_as_pandas() if response.is_ok: html_table = response.value.to_html() return HTMLResponse(content=html_table) else: return UJSONResponse( status_code=response.status_code, content={"error": response.value} ) except Exception as e: return UJSONResponse( status_code=status.HTTP_400_BAD_REQUEST, content={"error": repr(e)} )
async def get_open_orders(exchange: str, mode: Literal["by_id", "to_list"] = Query( ..., title="Sorting mode")): #! handle cases where exchange is unknown to return correct error message api = rest_api_map[exchange]() response = await api.get_open_orders(mode=mode) return UJSONResponse(status_code=response.status_code, content=response.value)
async def get_orderbook( exchange: str, symbol: str = Query(..., title="symbol"), ): try: api = rest_api_map[exchange]() response = await api.get_orderbook(symbol=symbol) if response.is_ok: return UJSONResponse(status_code=response.status_code, content={ "sendingTime": response.value["sendingTime"], "symbol": response.value["symbol"], "asks": response.value["asks"], "bids": response.value["bids"] }) else: return UJSONResponse(status_code=response.status_code, content={"error": response.value}) except Exception as e: return UJSONResponse(status_code=status.HTTP_400_BAD_REQUEST, content={"error": repr(e)})