You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

364 lines
13 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 LoanCross.
: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 ReferenceCross.
: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 millisecondrange: [(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