Releases: WazirX/wazirx-connector-python
v1.1.0
Wazirx Python
This is an official Python wrapper for the Wazirx exchange REST and WebSocket APIs.
Notice
We are now at 1.0 and there may be things breaking, don't hesitate to raise an issue if you feel so!
Installation
pip3 install -r requirements.txt
Features
Current
- Basic implementation of REST API
- Easy to use authentication
- Methods return parsed JSON
- No need to generate timestamps
- No need to generate signatures
- Basic implementation of WebSocket API
- Pass procs or lambdas to event handlers
- Single and multiple streams supported
- Runs on EventMachine
Planned
- Exception handling with responses
- High level abstraction
Getting Started
REST Client
Import Wazirx Client for Rest:
from wazirx_sapi_client.rest import Client
Create a new instance of the REST Client:
# If you only plan on touching public API endpoints, you can forgo any arguments
client = Client()
# Otherwise provide an api_key and secret_key as keyword arguments
client = Client(api_key='x', secret_key='y')
Create various requests:
General Endpoints
Ping
client.send("ping")
Response:
{}
Server time
client.send("time")
Response:
{
"serverTime": 1632375945160
}
System status
client.send("system_status")
Response:
{
"status": "normal",
"message": "System is running normally."
}
Exchange info
client.send("exchange_info")
Response:
{
"timezone": "UTC",
"serverTime": 1632376074413,
"symbols": [
{
"symbol": "wrxinr",
"status": "trading",
"baseAsset": "wrx",
"quoteAsset": "inr",
"baseAssetPrecision": 5,
"quoteAssetPrecision": 0,
"orderTypes": [
"limit",
"stop_limit"
],
"isSpotTradingAllowed": true,
"filters": [
{
"filterType": "PRICE_FILTER",
"minPrice": "1",
"tickSize": "1"
}
]
}
]
}
Create an order
client.send("create_order", {"symbol": 'btcinr', "side": 'buy', "type": 'limit',
"quantity": 100, "price": 0.00055, "recvWindow": 1000})
Response:
{"id"=>27007862, "symbol"=>"btcinr", "type"=>"limit", "side"=>"buy",
"status"=>"wait", "price"=>"210.0", "origQty"=>"2.0", "executedQty"=>"0.0",
"createdTime"=>1632310960000, "updatedTime"=>1632310960000}
For other methods follow this.
Required and optional parameters, as well as enum values, can be found on the Wazirx Documentation. Parameters should always be passed to client methods as keyword arguments in snake_case form.
WebSocket Client
Import Wazirx Client for WebSocket and AsyncIO
import asyncio
from wazirx_sapi_client.websocket import WebsocketClient
Create a new instance of the REST Client:
# If you only plan on touching public API endpoints, you can forgo any arguments
ws = WebsocketClient()
# Otherwise provide an api_key and secret_key as keyword arguments
ws = WebsocketClient(api_key='x', secret_key='y')
Create a connection with the websocket using:
asyncio.create_task(
ws.connect()
)
Create various WebSocket streams with await
# Pass the symbol/symbols to subscribe to trades
await ws.trades(symbol=['btcinr','wrxinr'], id=0, action='subscribe')
# Pass the symbol/symbols to subscribe to depth
await ws.depth(symbol=['btcinr','wrxinr'], id=0, action='subscribe')
# For all market tickers
await ws.all_market_ticker(id=0, action='subscribe')
Note:
symbol
can beArray
for multiple symbols.id
by default is0
, for unique identification any positive integer can be used.action
only needs to pass in case ofunsubscribe
, default issubscribe
if no data passed.
User Data Stream
User data streams utilize both the REST and WebSocket APIs.
Request a listen key from the REST API, and then create a WebSocket stream using it.
await ws.user_stream(streams=['orderUpdate', 'ownTrade', 'outboundAccountPosition'], id=0, action='subscribe')
To make sure that websocket stays live add the given below code for your main
, for understanding better refer here
loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()
Development
After checking out the repo, run python3 wazirx_sapi_client/rest/test.py
or python3 wazirx_sapi_client/websocket/test.py
to run the rest apis or websocket tests or experiments respectively.
Contributing
Bug reports and pull requests are welcome on GitHub at Issues.
License
The gem is available as open source under the terms of the MIT License.
v1.0.0
Wazirx Python
Updated 21th Sept 2021
This is a Python3 wrapper for the WazirX public apis and websocket client integration.
Documentation
https://docs.wazirx.com/
Features
- Rest Public Apis
- Websocket Client implementation
Quick Start
`Register an account with WazirX <https://wazirx.com/signup?source=menubar>`_.
Generate Api Key and Secret Key and assign relevant permissions.
- You can install packages required for this project using pip3.
pip3 install -r requirements.txt
- Public Apis Example
from wazirx_sapi_client.rest import Client
# public
client = Client()
print(client.send("ping"))
print(client.send("time"))
print(client.send("system_status"))
print(client.send("exchange_info"))
# private
api_key = "test_api_key"
secret_key = "test_secret_key"
client = Client(api_key=api_key, secret_key=secret_key)
print(client.send("historical_trades",
{"limit": 10, "symbol": "btcinr", "recvWindow": 10000, "timestamp": int(time.time() * 1000)}
))
print(client.send('create_order',
{"symbol": "btcinr", "side": "buy", "type": "limit", "price": 500, "quantity": 1, "recvWindow": 10000,
"timestamp": int(time.time() * 1000)}))
- Websocket Client Example
"""
For public streams, api_key and secret_key is not required i.e.
ws_client = WebsocketClient()
For private streams, api_key, secret_key are required while initialising WebsocketClient i.e.
ws_client = WebsocketClient(api_key=api_key, secret_key=secret_key)
"""
from wazirx_sapi_client.websocket import WebsocketClient
api_key, secret_key = "test_api_key", "test_secret_key"
ws_client = WebsocketClient(api_key=api_key, secret_key=secret_key)
asyncio.create_task(
ws_client.connect(
)
)
# to subscribe
await ws_client.subscribe(
events=["btcinr@depth"],
)
await ws_client.subscribe(
events=["wrxinr@depth"],
id=1 # id param not mandatory
)
await ws_client.subscribe(
events=["orderUpdate"]
)
await ws_client.subscribe(
events=["outboundAccountPosition"],
id=2 # id param not mandatory
)
### to unsubscribe
#await ws_client.unsubscribe(
# events=["outboundAccountPosition", "wrxinr@depth"],
#)
loop = asyncio.get_event_loop()
loop.create_task(main())
loop.run_forever()
Note: For more rest apis, you can refer rest/endpoints.py file above and WazirX's official public-endpoints documentation.
Compatibility
python 3.7 and above.