|
|
from huobi.utils.input_checker import *
|
|
|
|
|
|
|
|
|
class MarginClient(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 post_transfer_in_margin(self, symbol: 'str', currency: 'str', amount: 'float') -> int:
|
|
|
"""
|
|
|
Transfer asset from spot account to margin account.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt". (mandatory)
|
|
|
:param currency: The currency of transfer. (mandatory)
|
|
|
:param amount: The amount of transfer. (mandatory)
|
|
|
:return:
|
|
|
"""
|
|
|
check_symbol(symbol)
|
|
|
check_should_not_none(currency, "currency")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"symbol": symbol,
|
|
|
"currency": currency,
|
|
|
"amount": amount
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_transfer_in_margin import PostTransferInMarginService
|
|
|
return PostTransferInMarginService(params).request(**self.__kwargs)
|
|
|
|
|
|
def post_transfer_out_margin(self, symbol: 'str', currency: 'str', amount: 'float') -> int:
|
|
|
"""
|
|
|
Transfer asset from margin account to spot account.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt". (mandatory)
|
|
|
:param currency: The currency of transfer. (mandatory)
|
|
|
:param amount: The amount of transfer. (mandatory)
|
|
|
:return:
|
|
|
"""
|
|
|
check_symbol(symbol)
|
|
|
check_should_not_none(currency, "currency")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"symbol": symbol,
|
|
|
"currency": currency,
|
|
|
"amount": amount
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_transfer_out_margin import PostTransferOutMarginService
|
|
|
return PostTransferOutMarginService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_margin_account_balance(self, symbol: 'str') -> list:
|
|
|
"""
|
|
|
Get the Balance of the Margin Loan Account.
|
|
|
|
|
|
:param symbol: The currency, like "btc". (mandatory)
|
|
|
:return: The margin loan account detail list.
|
|
|
"""
|
|
|
check_symbol(symbol)
|
|
|
|
|
|
params = {
|
|
|
"symbol": symbol
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.get_margin_account_balance import GetMarginAccountBalanceService
|
|
|
return GetMarginAccountBalanceService(params).request(**self.__kwargs)
|
|
|
|
|
|
def post_create_margin_order(self, symbol: 'str', currency: 'str', amount: 'float') -> int:
|
|
|
"""
|
|
|
Submit a request to borrow with margin account.
|
|
|
|
|
|
:param symbol: The trading symbol to borrow margin, e.g. "btcusdt", "bccbtc". (mandatory)
|
|
|
:param currency: The currency to borrow,like "btc". (mandatory)
|
|
|
:param amount: The amount of currency to borrow. (mandatory)
|
|
|
:return: The margin order id.
|
|
|
"""
|
|
|
check_symbol(symbol)
|
|
|
check_should_not_none(currency, "currency")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"symbol": symbol,
|
|
|
"currency": currency,
|
|
|
"amount": amount
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_create_margin_order import PostCreateMarginOrderService
|
|
|
return PostCreateMarginOrderService(params).request(**self.__kwargs)
|
|
|
|
|
|
def post_repay_margin_order(self, loan_id: 'int', amount: 'float') -> int:
|
|
|
"""
|
|
|
Get the margin loan records.
|
|
|
|
|
|
:param load_id: The previously returned order id when loan order was created. (mandatory)
|
|
|
:param amount: The amount of currency to repay. (mandatory)
|
|
|
:return: The margin order id.
|
|
|
"""
|
|
|
check_should_not_none(loan_id, "loan_id")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"loan_id": loan_id,
|
|
|
"amount": amount
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_repay_margin_order import PostRepayMarginOrderService
|
|
|
return PostRepayMarginOrderService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_margin_loan_orders(self, symbol: 'str', start_date: 'str' = None, end_date: 'str' = None,
|
|
|
states: 'LoanOrderState' = None, from_id: 'int' = None,
|
|
|
size: 'int' = None, direction: 'QueryDirection' = None) -> list:
|
|
|
"""
|
|
|
Get the margin loan records.
|
|
|
|
|
|
:param symbol: The symbol, like "btcusdt" (mandatory).
|
|
|
:param start_date: The search starts date in format yyyy-mm-dd. (optional).
|
|
|
:param end_date: The search end date in format yyyy-mm-dd.(optional, can be null).
|
|
|
:param states: The loan order states, it could be created, accrual, cleared or invalid. (optional)
|
|
|
:param from_id: Search order id to begin with. (optional)
|
|
|
:param size: The number of orders to return.. (optional)
|
|
|
:param direction: The query direction, prev or next. (optional)
|
|
|
:return: The list of the margin loan records.
|
|
|
"""
|
|
|
|
|
|
check_symbol(symbol)
|
|
|
start_date = format_date(start_date, "start_date")
|
|
|
end_date = format_date(end_date, "end_date")
|
|
|
|
|
|
params = {
|
|
|
"symbol": symbol,
|
|
|
"start-date": start_date,
|
|
|
"end-date": end_date,
|
|
|
"states": states,
|
|
|
"from": from_id,
|
|
|
"size": size,
|
|
|
"direct": direction
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.get_margin_loan_orders import GetMarginLoanOrdersService
|
|
|
return GetMarginLoanOrdersService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_margin_loan_info(self, symbols: 'str' = None) -> list:
|
|
|
"""
|
|
|
The request of get margin loan info, can return currency loan info list.
|
|
|
|
|
|
:param symbols: The symbol, like "btcusdt,htusdt". (optional)
|
|
|
:return: The cross margin loan info.
|
|
|
"""
|
|
|
|
|
|
check_symbol(symbols)
|
|
|
params = {
|
|
|
"symbols": symbols
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.get_margin_loan_info import GetMarginLoanInfoService
|
|
|
return GetMarginLoanInfoService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_cross_margin_loan_info(self) -> list:
|
|
|
"""
|
|
|
The request of currency loan info list.
|
|
|
|
|
|
:return: The cross margin loan info list.
|
|
|
"""
|
|
|
params = {}
|
|
|
|
|
|
from huobi.service.margin.get_cross_margin_loan_info import GetCrossMarginLoanInfoService
|
|
|
return GetCrossMarginLoanInfoService(params).request(**self.__kwargs)
|
|
|
|
|
|
def post_cross_margin_transfer_in(self, currency: 'str', amount: 'float') -> int:
|
|
|
"""
|
|
|
transfer currency to cross account.
|
|
|
|
|
|
:param currency: currency name (mandatory)
|
|
|
:param amount: transfer amount (mandatory)
|
|
|
:return: return transfer id.
|
|
|
"""
|
|
|
check_should_not_none(currency, "currency")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"amount": amount,
|
|
|
"currency": currency
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_cross_margin_transfer_in import PostCrossMarginTransferInService
|
|
|
return PostCrossMarginTransferInService(params).request(**self.__kwargs)
|
|
|
|
|
|
def post_cross_margin_transfer_out(self, currency: 'str', amount: 'float') -> int:
|
|
|
"""
|
|
|
transfer currency to cross account.
|
|
|
|
|
|
:param currency: currency name (mandatory)
|
|
|
:param amount: transfer amount (mandatory)
|
|
|
:return: return transfer id.
|
|
|
"""
|
|
|
check_should_not_none(currency, "currency")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"amount": amount,
|
|
|
"currency": currency
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_cross_margin_transfer_out import PostCrossMarginTransferOutService
|
|
|
return PostCrossMarginTransferOutService(params).request(**self.__kwargs)
|
|
|
|
|
|
def post_cross_margin_create_loan_orders(self, currency: 'str', amount: 'float') -> int:
|
|
|
"""
|
|
|
create cross margin loan orders
|
|
|
|
|
|
:param currency: currency name (mandatory)
|
|
|
:param amount: transfer amount (mandatory)
|
|
|
:return: return order id.
|
|
|
"""
|
|
|
|
|
|
check_should_not_none(currency, "currency")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"amount": amount,
|
|
|
"currency": currency
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_cross_margin_create_loan_orders import PostCrossMarginCreateLoanOrdersService
|
|
|
return PostCrossMarginCreateLoanOrdersService(params).request(**self.__kwargs)
|
|
|
|
|
|
def post_cross_margin_loan_order_repay(self, order_id: 'str', amount: 'float'):
|
|
|
"""
|
|
|
repay cross margin loan orders
|
|
|
|
|
|
:param order_id: order_id for loan (mandatory)
|
|
|
:param amount: transfer amount (mandatory)
|
|
|
:return: return order id.
|
|
|
"""
|
|
|
|
|
|
check_should_not_none(order_id, "order-id")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"amount": amount,
|
|
|
"order-id": order_id
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_cross_margin_loan_order_repay import PostCrossMarginLoanOrderRepayService
|
|
|
return PostCrossMarginLoanOrderRepayService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_cross_margin_loan_orders(self, currency: 'str' = None, state: 'str' = None,
|
|
|
start_date: 'str' = None, end_date: 'str' = None,
|
|
|
from_id: 'int' = None, size: 'int' = None, direct: 'str' = None,
|
|
|
sub_uid: 'int' = None) -> list:
|
|
|
"""
|
|
|
get cross margin loan orders
|
|
|
|
|
|
:return: return list.
|
|
|
"""
|
|
|
params = {
|
|
|
"currency": currency,
|
|
|
"state": state,
|
|
|
"start-date": start_date,
|
|
|
"end-date": end_date,
|
|
|
"from": from_id,
|
|
|
"size": size,
|
|
|
"direct": direct,
|
|
|
"sub-uid": sub_uid
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.get_cross_margin_loan_orders import GetCrossMarginLoanOrdersService
|
|
|
return GetCrossMarginLoanOrdersService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_cross_margin_account_balance(self, sub_uid: 'int' = None):
|
|
|
"""
|
|
|
get cross margin account balance
|
|
|
|
|
|
:return: cross-margin account.
|
|
|
"""
|
|
|
params = {
|
|
|
"sub-uid": sub_uid
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.get_cross_margin_account_balance import GetCrossMarginAccountBalanceService
|
|
|
return GetCrossMarginAccountBalanceService(params).request(**self.__kwargs)
|
|
|
|
|
|
def post_general_repay_loan(self, account_id: 'str', currency: 'str', amount: 'float',
|
|
|
transact_id: 'str' = None) -> list:
|
|
|
"""
|
|
|
Repay Margin Loan(Cross).
|
|
|
|
|
|
:param account_id: repayment account ID .(mandatory)
|
|
|
:param currency: repayment currency. (mandatory).
|
|
|
:param amount: repayment amount.(mandatory).
|
|
|
:param transact_id: loan transaction ID. (optional)
|
|
|
"""
|
|
|
check_should_not_none(account_id, "account_id")
|
|
|
check_should_not_none(currency, "currency")
|
|
|
check_should_not_none(amount, "amount")
|
|
|
|
|
|
params = {
|
|
|
"accountId": account_id,
|
|
|
"currency": currency,
|
|
|
"amount": amount,
|
|
|
"transact_id": transact_id
|
|
|
}
|
|
|
|
|
|
from huobi.service.margin.post_general_repay_loan import PostGeneralRepayLoanService
|
|
|
return PostGeneralRepayLoanService(params).request(**self.__kwargs)
|
|
|
|
|
|
def get_general_repayment_loan_records(self, repay_id: 'str' = None, account_id: 'str' = None,
|
|
|
currency: 'str' = None, start_time: 'int' = None, end_time: 'int' = None,
|
|
|
sort: 'str' = None, limit: 'int' = None, from_id: 'int' = None) -> list:
|
|
|
|
|
|
"""
|
|
|
Get Repayment Record Reference(Cross).
|
|
|
|
|
|
:param repay_id: repayment transaction ID. (optional)
|
|
|
:param account_id: account ID (default value: all accounts) (optional).
|
|
|
:param currency: borrowing/lending currency (default value: all currencies). (optional)
|
|
|
:param start_time: start time (unix time in millisecond; range: [(endTime – x D), endTime]; default value: (endTime – x D) (optional)
|
|
|
:param end_time: end time (unix time in millisecond;range: [(present time – y D), present time]; default value: present time) (optional)
|
|
|
:param sort: sort direction (virtual value: asc, desc; default value: desc) (optional)
|
|
|
:param limit: max return items per page (range: [1,100]; default value: 50) (optional)
|
|
|
:param from_id: search original ID (only available when searching for the next page) (optional)
|
|
|
"""
|
|
|
|
|
|
params = {
|
|
|
|
|
|
}
|
|
|
if repay_id is not None:
|
|
|
params['repayId'] = repay_id
|
|
|
|
|
|
if account_id is not None:
|
|
|
params['accountId'] = account_id
|
|
|
|
|
|
if account_id is not None:
|
|
|
params['currency'] = currency
|
|
|
|
|
|
if start_time is not None:
|
|
|
params['startTime'] = start_time
|
|
|
|
|
|
if end_time is not None:
|
|
|
params['endTime'] = end_time
|
|
|
|
|
|
if sort is not None:
|
|
|
params['sort'] = sort
|
|
|
|
|
|
if limit is not None:
|
|
|
params['limit'] = limit
|
|
|
|
|
|
if from_id is not None:
|
|
|
params['fromId'] = from_id
|
|
|
|
|
|
from huobi.service.margin.get_general_repayment_loan_records import GetGeneralRepaymentLoanRecordsService
|
|
|
return GetGeneralRepaymentLoanRecordsService(params).request(**self.__kwargs)
|
|
|
|
|
|
return
|