|
|
from huobi.constant import *
|
|
|
from huobi.model.trade import *
|
|
|
from huobi.utils.input_checker import *
|
|
|
|
|
|
|
|
|
class TradeClient(object):
|
|
|
|
|
|
def __init__(self, **kwargs):
|
|
|
"""
|
|
|
Create the request client instance.
|
|
|
:param kwargs: The option of request connection.
|
|
|
api_key: The public key applied from Huobi.
|
|
|
secret_key: The private key applied from Huobi.
|
|
|
url: The URL name like "https://api.huobi.pro".
|
|
|
init_log: to init logger
|
|
|
"""
|
|
|
self.__kwargs = kwargs
|
|
|
|
|
|
def get_feerate(self, symbols: 'str') -> list:
|
|
|
"""
|
|
|
Get the candlestick/kline for the specified symbol. The data number is 150 as default.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt". To query hb10, put "hb10" at here. (mandatory)
|
|
|
:param interval: The candlestick/kline interval, MIN1, MIN5, DAY1 etc. (mandatory)
|
|
|
:param size: The start time of of requested candlestick/kline data. (optional)
|
|
|
:param start_time: The start time of of requested candlestick/kline data. (optional)
|
|
|
:param end_time: The end time of of requested candlestick/kline data. (optional)
|
|
|
:return: The list of candlestick/kline data.
|
|
|
"""
|
|
|
check_symbol(symbols)
|
|
|
|
|
|
params = {
|
|
|
"symbols": symbols
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_feerate import GetFeeRateService
|
|
|
return GetFeeRateService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_transact_feerate(self, symbols: 'str') -> list:
|
|
|
"""
|
|
|
The request of get transact fee rate list.
|
|
|
|
|
|
:param symbols: The symbol, like "btcusdt,htusdt". (mandatory)
|
|
|
:return: The transact fee rate list.
|
|
|
"""
|
|
|
check_symbol(symbols)
|
|
|
|
|
|
params = {
|
|
|
"symbols": symbols
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_transact_feerate import GetTransactFeeRateService
|
|
|
return GetTransactFeeRateService(params).request(**self.__kwargs)
|
|
|
|
|
|
def sub_order_update(self, symbols: 'str', callback, error_handler=None):
|
|
|
"""
|
|
|
Subscribe order changing event. If a order is created, canceled etc, server will send the data to client and onReceive in callback will be called.
|
|
|
|
|
|
:param symbols: The symbols, like "btcusdt". Use comma to separate multi symbols, like "btcusdt,ethusdt".
|
|
|
:param callback: The implementation is required. onReceive will be called if receive server's update.
|
|
|
example: def callback(order_update_event: 'OrderUpdateEvent'):
|
|
|
pass
|
|
|
:param error_handler: The error handler will be called if subscription failed or error happen between client and Huobi server
|
|
|
example: def error_handler(exception: 'HuobiApiException')
|
|
|
pass
|
|
|
:return: No return
|
|
|
"""
|
|
|
symbol_list = symbols.split(",")
|
|
|
check_symbol_list(symbol_list)
|
|
|
check_should_not_none(callback, "callback")
|
|
|
|
|
|
params = {
|
|
|
"symbol_list" : symbol_list,
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.sub_order_update_v2 import SubOrderUpdateV2Service
|
|
|
SubOrderUpdateV2Service(params).subscribe(callback, error_handler, **self.__kwargs)
|
|
|
|
|
|
def req_order_list(self, symbol: 'str', account_id: int, callback, order_states:'str',
|
|
|
order_types:'str'=None, start_date:'str'=None, end_date:'str'=None, from_id=None,
|
|
|
direct=None, size=None, client_req_id:'str'=None, error_handler=None):
|
|
|
"""
|
|
|
request order list.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt".
|
|
|
:param order_states: order status, can be one state or many state sepearted by comma, such as "submitted,partial-filled,partial-canceled,filled,canceled,created"
|
|
|
:param callback: The implementation is required. onReceive will be called if receive server's update.
|
|
|
example: def callback(candlestick_event: 'CandlestickEvent'):
|
|
|
pass
|
|
|
:param error_handler: The error handler will be called if subscription failed or error happen between client and Huobi server
|
|
|
example: def error_handler(exception: 'HuobiApiException')
|
|
|
pass
|
|
|
:return: No return
|
|
|
"""
|
|
|
check_should_not_none(symbol, "symbol")
|
|
|
check_should_not_none(order_states, "states")
|
|
|
check_should_not_none(account_id, "account-d")
|
|
|
check_should_not_none(callback, "callback")
|
|
|
params = {
|
|
|
"symbol": symbol,
|
|
|
"account-id" : account_id,
|
|
|
"states" : order_states,
|
|
|
"types" : order_types,
|
|
|
"start-date" : start_date,
|
|
|
"end-date" : end_date,
|
|
|
"from": from_id,
|
|
|
"direct" : direct,
|
|
|
"size" : size,
|
|
|
"client-req-id" : client_req_id
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.req_order_list import ReqOrderListService
|
|
|
ReqOrderListService(params).subscribe(callback, error_handler, **self.__kwargs)
|
|
|
|
|
|
def req_order_detail(self, order_id: 'str', callback,
|
|
|
client_req_id:'str'=None, error_handler=None):
|
|
|
"""
|
|
|
Subscribe candlestick/kline event. If the candlestick/kline is updated, server will send the data to client and onReceive in callback will be called.
|
|
|
|
|
|
:param symbols: The symbols, like "btcusdt". Use comma to separate multi symbols, like "btcusdt,ethusdt".
|
|
|
:param interval: The candlestick/kline interval, MIN1, MIN5, DAY1 etc.
|
|
|
:param callback: The implementation is required. onReceive will be called if receive server's update.
|
|
|
example: def callback(candlestick_event: 'CandlestickEvent'):
|
|
|
pass
|
|
|
:param client_req_id: client request ID
|
|
|
:param error_handler: The error handler will be called if subscription failed or error happen between client and Huobi server
|
|
|
example: def error_handler(exception: 'HuobiApiException')
|
|
|
pass
|
|
|
:return: No return
|
|
|
"""
|
|
|
check_should_not_none(order_id, "order_id")
|
|
|
check_should_not_none(callback, "callback")
|
|
|
params = {
|
|
|
"order-id": order_id,
|
|
|
"cid": client_req_id,
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.req_order_detail import ReqOrderDetailService
|
|
|
ReqOrderDetailService(params).subscribe(callback, error_handler, **self.__kwargs)
|
|
|
|
|
|
def get_order(self, order_id: 'int') -> Order:
|
|
|
"""
|
|
|
Get the details of an order.
|
|
|
|
|
|
:param order_id: The order id. (mandatory)
|
|
|
:return: The information of order.
|
|
|
"""
|
|
|
check_should_not_none(order_id, "order_id")
|
|
|
|
|
|
params = {
|
|
|
"order_id": order_id,
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_order_by_id import GetOrderByIdService
|
|
|
return GetOrderByIdService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_order_by_client_order_id(self, client_order_id):
|
|
|
check_should_not_none(client_order_id, "clientOrderId")
|
|
|
|
|
|
params = {
|
|
|
"clientOrderId": client_order_id,
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_order_by_client_order_id import GetOrderByClientOrderIdService
|
|
|
return GetOrderByClientOrderIdService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_orders(self, symbol: 'str', order_state: 'OrderState', order_type: 'OrderType' = None,
|
|
|
start_date: 'str' = None, end_date: 'str' = None, start_id: 'int' = None,
|
|
|
size: 'int' = None, direct=None) -> list:
|
|
|
check_symbol(symbol)
|
|
|
check_should_not_none(order_state, "order_state")
|
|
|
start_date = format_date(start_date, "start_date")
|
|
|
end_date = format_date(end_date, "end_date")
|
|
|
|
|
|
params = {
|
|
|
"symbol" : symbol,
|
|
|
"types" : order_type,
|
|
|
"start-date" : start_date,
|
|
|
"end-date" : end_date,
|
|
|
"from" : start_id,
|
|
|
"states" : order_state,
|
|
|
"size" : size,
|
|
|
"direct" : direct
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_orders import GetOrdersService
|
|
|
return GetOrdersService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_open_orders(self, symbol: 'str', account_id: 'int', side: 'OrderSide' = None,
|
|
|
size: 'int' = None, from_id=None, direct=None) -> list:
|
|
|
"""
|
|
|
The request of get open orders.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt". (mandatory)
|
|
|
:param account_id: account id (mandatory)
|
|
|
:param side: The order side, buy or sell. If no side defined, will return all open orders of the account. (optional)
|
|
|
:param size: The number of orders to return. Range is [1, 500]. (optional)
|
|
|
:param direct: 1:prev order by ID asc from from_id, 2:next order by ID desc from from_id
|
|
|
:param from_id: start ID for search
|
|
|
:return: The orders information.
|
|
|
"""
|
|
|
check_symbol(symbol)
|
|
|
check_range(size, 1, 500, "size")
|
|
|
check_should_not_none(account_id, "account_id")
|
|
|
params = {
|
|
|
"symbol" : symbol,
|
|
|
"account-id" : account_id,
|
|
|
"side" : side,
|
|
|
"size" : size,
|
|
|
"from" : from_id,
|
|
|
"direct" : direct
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_open_orders import GetOpenOrdersService
|
|
|
return GetOpenOrdersService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_history_orders(self, symbol=None, start_time=None, end_time=None, size=None, direct=None)-> list:
|
|
|
"""
|
|
|
Transfer Asset between Futures and Contract.
|
|
|
|
|
|
:param direct:
|
|
|
:param symbol: The target sub account uid to transfer to or from. (optional)
|
|
|
:param start_time: The crypto currency to transfer. (optional)
|
|
|
:param end_time: The amount of asset to transfer. (optional)
|
|
|
:param size: The type of transfer, need be "futures-to-pro" or "pro-to-futures" (optional)
|
|
|
:return: The Order list.
|
|
|
"""
|
|
|
params = {
|
|
|
"symbol" :symbol,
|
|
|
"start-time" : start_time,
|
|
|
"end-time" : end_time,
|
|
|
"size" : size,
|
|
|
"direct" : direct
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_history_orders import GetHistoryOrdersService
|
|
|
return GetHistoryOrdersService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_match_result(self, symbol: 'str', order_type: 'OrderSide' = None, start_date: 'str' = None,
|
|
|
end_date: 'str' = None,
|
|
|
size: 'int' = None,
|
|
|
from_id: 'int' = None,
|
|
|
direct:'str'=None):
|
|
|
"""
|
|
|
Search for the trade records of an account.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt" (mandatory).
|
|
|
:param order_type: The types of order to include in the search (optional).
|
|
|
:param start_date: Search starts date in format yyyy-mm-dd. (optional).
|
|
|
:param end_date: Search ends date in format yyyy-mm-dd. (optional).
|
|
|
:param size: The number of orders to return, range [1-100]. (optional).
|
|
|
:param from_id: Search order id to begin with. (optional).
|
|
|
:return:
|
|
|
"""
|
|
|
|
|
|
check_symbol(symbol)
|
|
|
start_date = format_date(start_date, "start_date")
|
|
|
end_date = format_date(end_date, "end_date")
|
|
|
check_range(size, 1, 100, "size")
|
|
|
|
|
|
params = {
|
|
|
"symbol" : symbol,
|
|
|
"start-date" : start_date,
|
|
|
"end-date" : end_date,
|
|
|
"types" : order_type,
|
|
|
"size" : size,
|
|
|
"from" : from_id,
|
|
|
"direct" : direct
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_match_results import GetMatchResultsService
|
|
|
return GetMatchResultsService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_match_results_by_order_id(self, order_id: 'int') -> list:
|
|
|
"""
|
|
|
Get detail match results of an order.
|
|
|
|
|
|
:param order_id: The order id. (mandatory)
|
|
|
:return: The list of match result.
|
|
|
"""
|
|
|
check_should_not_none(order_id, "order_id")
|
|
|
|
|
|
params = {
|
|
|
"order_id": order_id
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.get_match_results_by_order_id import GetMatchResultsByOrderIdService
|
|
|
return GetMatchResultsByOrderIdService(params).request(**self.__kwargs)
|
|
|
|
|
|
def order_source_desc(self, account_type):
|
|
|
default_source = "api"
|
|
|
if account_type:
|
|
|
if account_type == AccountType.MARGIN:
|
|
|
return "margin-api"
|
|
|
return default_source
|
|
|
|
|
|
def create_order_param_check(self, symbol: 'str', account_id: 'int', order_type: 'OrderType', amount: 'float',
|
|
|
price: 'float', source:'str', client_order_id=None, stop_price=None, operator=None):
|
|
|
check_symbol(symbol)
|
|
|
check_should_not_none(account_id, "account_id")
|
|
|
check_should_not_none(order_type, "order_type")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
check_should_not_none(source, "source")
|
|
|
|
|
|
if order_type == OrderType.SELL_LIMIT \
|
|
|
or order_type == OrderType.BUY_LIMIT \
|
|
|
or order_type == OrderType.BUY_LIMIT_MAKER \
|
|
|
or order_type == OrderType.SELL_LIMIT_MAKER:
|
|
|
check_should_not_none(price, "price")
|
|
|
if order_type in [OrderType.SELL_MARKET, OrderType.BUY_MARKET]:
|
|
|
price = None
|
|
|
|
|
|
params = {
|
|
|
"account-id" : account_id,
|
|
|
"amount" : amount,
|
|
|
"price": price,
|
|
|
"symbol": symbol,
|
|
|
"type": order_type,
|
|
|
"source": source,
|
|
|
"client-order-id": client_order_id,
|
|
|
"stop-price": stop_price,
|
|
|
"operator": operator
|
|
|
}
|
|
|
|
|
|
return params
|
|
|
|
|
|
def create_order(self, symbol: 'str', account_id: 'int', order_type: 'OrderType', amount: 'float',
|
|
|
price: 'float', source:'str', client_order_id=None, stop_price=None, operator=None) -> int:
|
|
|
"""
|
|
|
Make an order in huobi.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt". (mandatory)
|
|
|
:param account_id: Account id. (mandatory)
|
|
|
:param order_type: The order type. (mandatory)
|
|
|
:param source: The order source. (mandatory)
|
|
|
for spot, it's "api", see OrderSource.API
|
|
|
for margin, it's "margin-api", see OrderSource.MARGIN_API
|
|
|
for super margin, it's "super-margin-api", see OrderSource.SUPER_MARGIN_API
|
|
|
:param amount: The amount to buy (quote currency) or to sell (base currency). (mandatory)
|
|
|
:param price: The limit price of limit order, only needed for limit order. (mandatory for buy-limit, sell-limit, buy-limit-maker and sell-limit-maker)
|
|
|
:param client_order_id: unique Id which is user defined and must be unique in recent 24 hours
|
|
|
:param stop_price: Price for auto sell to get the max benefit
|
|
|
:param operator: the condition for stop_price, value can be "gte" or "lte", gte – greater than and equal (>=), lte – less than and equal (<=)
|
|
|
:return: The order id.
|
|
|
"""
|
|
|
|
|
|
params = self.create_order_param_check(symbol, account_id, order_type, amount,
|
|
|
price, source, client_order_id, stop_price, operator)
|
|
|
from huobi.service.trade.post_create_order import PostCreateOrderService
|
|
|
return PostCreateOrderService(params).request(**self.__kwargs)
|
|
|
|
|
|
def create_spot_order(self, symbol: 'str', account_id: 'int', order_type: 'OrderType', amount: 'float',
|
|
|
price: 'float', client_order_id=None, stop_price=None,
|
|
|
operator=None) -> int:
|
|
|
order_source = OrderSource.API
|
|
|
return self.create_order(symbol=symbol, account_id=account_id, order_type=order_type, amount=amount,
|
|
|
price=price, source=order_source, client_order_id=client_order_id, stop_price=stop_price,
|
|
|
operator=operator)
|
|
|
|
|
|
def create_margin_order(self, symbol: 'str', account_id: 'int', order_type: 'OrderType', amount: 'float',
|
|
|
price: 'float', client_order_id=None, stop_price=None,
|
|
|
operator=None) -> int:
|
|
|
order_source = OrderSource.MARGIN_API
|
|
|
return self.create_order(symbol=symbol, account_id=account_id, order_type=order_type, amount=amount,
|
|
|
price=price, source=order_source, client_order_id=client_order_id,
|
|
|
stop_price=stop_price,
|
|
|
operator=operator)
|
|
|
|
|
|
def create_super_margin_order(self, symbol: 'str', account_id: 'int', order_type: 'OrderType', amount: 'float',
|
|
|
price: 'float', client_order_id=None, stop_price=None,
|
|
|
operator=None) -> int:
|
|
|
order_source = OrderSource.SUPER_MARGIN_API
|
|
|
return self.create_order(symbol=symbol, account_id=account_id, order_type=order_type, amount=amount,
|
|
|
price=price, source=order_source, client_order_id=client_order_id,
|
|
|
stop_price=stop_price,
|
|
|
operator=operator)
|
|
|
|
|
|
def cancel_order(self, symbol, order_id):
|
|
|
check_symbol(symbol)
|
|
|
check_should_not_none(order_id, "order_id")
|
|
|
|
|
|
params = {
|
|
|
"order_id" : order_id
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.post_cancel_order import PostCancelOrderService
|
|
|
return PostCancelOrderService(params).request(**self.__kwargs)
|
|
|
|
|
|
def cancel_orders(self, symbol, order_id_list)->BatchCancelResult:
|
|
|
"""
|
|
|
Submit cancel request for cancelling multiple orders.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt". (mandatory)
|
|
|
:param order_id_list: The list of order id. the max size is 50. (mandatory)
|
|
|
:return: No return
|
|
|
"""
|
|
|
check_symbol(symbol)
|
|
|
check_should_not_none(order_id_list, "order_id_list")
|
|
|
check_list(order_id_list, 1, 50, "order_id_list")
|
|
|
|
|
|
string_list = list()
|
|
|
for order_id in order_id_list:
|
|
|
string_list.append(str(order_id))
|
|
|
|
|
|
params = {
|
|
|
"order-ids" : string_list
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.post_batch_cancel_order import PostBatchCancelOrderService
|
|
|
return PostBatchCancelOrderService(params).request(**self.__kwargs)
|
|
|
|
|
|
def cancel_open_orders(self, account_id, symbols: 'str'=None , side=None, size=None)->BatchCancelCount:
|
|
|
"""
|
|
|
Request to cancel open orders.
|
|
|
|
|
|
:param symbols: The symbol, like "btcusdt".
|
|
|
:param account_type: Account type. (mandatory)
|
|
|
:param side: The order side, buy or sell. If no side defined, will cancel all open orders of the account. (optional)
|
|
|
:param size: The number of orders to cancel. Range is [1, 100]. (optional)
|
|
|
:return: Status of batch cancel result.
|
|
|
"""
|
|
|
check_should_not_none(account_id, "account_id")
|
|
|
|
|
|
params = {
|
|
|
"account-id": account_id,
|
|
|
"symbol" : symbols,
|
|
|
"side" : side,
|
|
|
"size" : size
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.post_batch_cancel_open_order import PostBatchCancelOpenOrderService
|
|
|
return PostBatchCancelOpenOrderService(params).request(**self.__kwargs)
|
|
|
|
|
|
def cancel_client_order(self, client_order_id)->int:
|
|
|
"""
|
|
|
Request to cancel open orders.
|
|
|
|
|
|
:param client_order_id: user defined unique order id
|
|
|
"""
|
|
|
check_should_not_none(client_order_id, "client-order-id")
|
|
|
|
|
|
params = {
|
|
|
"client-order-id" : client_order_id
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.post_cancel_client_order import PostCancelClientOrderService
|
|
|
return PostCancelClientOrderService(params).request(**self.__kwargs)
|
|
|
|
|
|
def transfer_between_futures_and_pro(self, currency: 'str', amount: 'float',
|
|
|
transfer_type: 'TransferFuturesPro')-> int:
|
|
|
"""
|
|
|
Transfer Asset between Futures and Contract.
|
|
|
|
|
|
:param sub_uid: The target sub account uid to transfer to or from. (mandatory)
|
|
|
:param currency: The crypto currency to transfer. (mandatory)
|
|
|
:param amount: The amount of asset to transfer. (mandatory)
|
|
|
:param transfer_type: The type of transfer, need be "futures-to-pro" or "pro-to-futures" (mandatory)
|
|
|
:return: The order id.
|
|
|
"""
|
|
|
check_currency(currency)
|
|
|
check_should_not_none(currency, "currency")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
check_should_not_none(transfer_type, "transfer_type")
|
|
|
params = {
|
|
|
"currency" : currency,
|
|
|
"amount" : amount,
|
|
|
"type" : transfer_type
|
|
|
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.post_transfer_futures_pro import PostTransferFuturesProService
|
|
|
return PostTransferFuturesProService(params).request(**self.__kwargs)
|
|
|
|
|
|
def batch_create_order(self, order_config_list) -> int:
|
|
|
"""
|
|
|
Make an order in huobi.
|
|
|
:param order_config_list: order config list, it can batch create orders, and each order config check as below
|
|
|
: items as below
|
|
|
:param symbol: The symbol, like "btcusdt". (mandatory)
|
|
|
:param account_type: Account type. (mandatory)
|
|
|
:param order_type: The order type. (mandatory)
|
|
|
:param amount: The amount to buy (quote currency) or to sell (base currency). (mandatory)
|
|
|
:param price: The limit price of limit order, only needed for limit order. (mandatory for buy-limit, sell-limit, buy-limit-maker and sell-limit-maker)
|
|
|
:param client_order_id: unique Id which is user defined and must be unique in recent 24 hours
|
|
|
:param stop_price: Price for auto sell to get the max benefit
|
|
|
:param operator: the condition for stop_price, value can be "gte" or "lte", gte – greater than and equal (>=), lte – less than and equal (<=)
|
|
|
:return: The order id.
|
|
|
"""
|
|
|
|
|
|
check_should_not_none(order_config_list, "order_config_list")
|
|
|
check_list(order_config_list, 1, 10, "create order config list")
|
|
|
|
|
|
new_config_list = list()
|
|
|
for item in order_config_list:
|
|
|
new_item = self.create_order_param_check(
|
|
|
item.get("symbol", None),
|
|
|
item.get("account_id", None),
|
|
|
item.get("order_type", None),
|
|
|
item.get("amount", None),
|
|
|
item.get("price", None),
|
|
|
item.get("source", None),
|
|
|
item.get("client_order_id", None),
|
|
|
item.get("stop-price", None),
|
|
|
item.get("operator", None))
|
|
|
|
|
|
new_config_list.append(new_item)
|
|
|
|
|
|
from huobi.service.trade.post_batch_create_order import PostBatchCreateOrderService
|
|
|
return PostBatchCreateOrderService(new_config_list).request(**self.__kwargs)
|
|
|
|
|
|
def sub_trade_clearing(self, symbols: 'str', callback, error_handler=None):
|
|
|
"""
|
|
|
Subscribe trade clearing by symbol
|
|
|
|
|
|
:param symbols: The symbols, like "btcusdt". Use comma to separate multi symbols, like "btcusdt,ethusdt".
|
|
|
"*" for all symbols
|
|
|
:param callback: The implementation is required. onReceive will be called if receive server's update.
|
|
|
example: def callback(price_depth_event: 'PriceDepthEvent'):
|
|
|
pass
|
|
|
:param error_handler: The error handler will be called if subscription failed or error happen between client and Huobi server
|
|
|
example: def error_handler(exception: 'HuobiApiException')
|
|
|
pass
|
|
|
|
|
|
:return: No return
|
|
|
"""
|
|
|
check_should_not_none(symbols, "symbols")
|
|
|
symbol_list = symbols.split(",")
|
|
|
if ("*" in symbol_list):
|
|
|
symbol_list = ["*"]
|
|
|
else:
|
|
|
check_symbol_list(symbol_list)
|
|
|
|
|
|
check_should_not_none(callback, "callback")
|
|
|
|
|
|
params = {
|
|
|
"symbol_list": symbol_list,
|
|
|
}
|
|
|
|
|
|
from huobi.service.trade.sub_trade_clearing_v2 import SubTradeClearingV2Service
|
|
|
SubTradeClearingV2Service(params).subscribe(callback, error_handler, **self.__kwargs)
|