
Python调用Google Bard API 完整指南
KuCoin API 是一种允许我们通过代码自动在 KuCoin 上交易加密货币的方法。
KuCoin 是一个在线加密货币交易平台,允许其用户交易各种加密货币现货、永续合约和期货资产。
由于 KuCoin 是一个加密货币平台,您可以交易大量货币(超过 200 种),其中最著名的是 BTC、ETH、XRP、LTC、LUNA、EOS 等。
此外,KuCoin 还支持通过其 P2P 法定交易、快速购买服务或信用卡或借记卡以法定货币(美元、欧元、加元、英镑等)购买加密货币。
是的,在 KuCoin 上建立账户是免费的、简单且快捷的。
说到交易费用,KuCoin 以低费率而闻名。主要有 13 个 (0-12) 交易费用等级,您可以通过以下两种方式攀升:
例如,在第 0 层现货交易费用表中,Maker/Taker 费用设置为 0.1%,24 小时提现金额(BTC)设置为 200。
在第 7 级,Maker 费用最终为 0%,而 Taker 费用降至 0.05%,提款限额升至 500。如需详细了解现货和期货市场费用,请访问以下网站:
https://www.kucoin.com/vip/level?lang=en_US
在低费用方面,KuCoin 的竞争对手是币安,因为这两家交易所的费用水平相似。KuCoin 可能会占上风,因为它拥有允许质押的 KuCoin 股份。
KuCoin Shares (KCS) 是 KuCoin 原生代币,提供交易折扣、解锁更多交易对、每日加密货币股息、福利、优惠等特殊福利。您可以质押您的 KCS 来解锁这些特殊福利。
KCS 可以通过推荐链接购买或获得。
KuCoin 在所有国家/地区都可供未验证账户使用。完成验证账户的 KYC 规定后,将提供有关可用国家/地区的信息。
遗憾的是,KuCoin 没有关于受限制国家完整名单的文档,而且据我所知,他们也没有公开此事。
KuCoin 可以被其他更适合您需求的应用程序替代。以下是列表:
KuCoin 提供的官方 SDK 如下:
为了开始使用 KuCoin 并探索其产品和 API 使用情况,我们需要访问其网站并创建一个帐户。为此,请转到以下链接并点击注册:
之后,您将进入一个新页面,首先需要提供您的电子邮件以获取验证码。完成后,您可以设置密码和推荐码(如果有)。
请记住,在验证过程中您可以提供您的电话号码,而不是电子邮件。
欢迎来到 KuCoin!要获取 API 密钥,请转到右上角的大白色圆圈并选择 API 管理选项。
到达那里后,您将需要完成短信或 Google 验证流程以及交易密码设置。为此,只需点击绿色的“编辑”字样,即可进入正确的步骤。
完成验证过程并设置交易密码后,返回 API 管理选项卡并点击“创建 API”按钮。
到达那里后,您将命名您的 API,为其创建密码,并授予其所需的权限。在本指南中,我将授予其一般权限和交易权限。您还可以将 API 限制为 IP 地址。
之后,请务必将您的 API Key 和 API Secret 保存到安全的地方。关闭 API 信息弹出窗口后,API Secret 将不再显示。
现在 API Key 已准备就绪,我们可以自由探索 KuCoin API 提供的功能。我们将从公共端点开始,并以两个交易场景结束。
请务必使用以下命令安装 KuCoin Python 库:
pip install kucoin-python
请记住,API 请求限制设置为每分钟 1800 次调用。
通过使用 Python 库,可以通过多种方式从 KuCoin 获取行情。让我们设置客户端并检查市场列表由哪些部分组成:
import pandas as pd
from kucoin.client import Market
client = Market(url='https://api.kucoin.com')
symbols = client.get_market_list()
symbols
[‘USDS’, ‘BTC’, ‘KCS’, ‘ALTS’, ‘DeFi’, ‘NFT’, ‘Polkadot’]
这向我们展示了主要类别,但我们真正想要的是所有可用股票代码的列表。我们将请求它们并将数据排列到 pandas 数据框中,以便更好地观察。
tickers = client.get_all_tickers()
tickers = pd.DataFrame(tickers['ticker'])
tickers.set_index('symbol', inplace=True)
tickers.head().T
总共有577对。
有些人可能已经体验过,Python 库的速度并未优化,因此很容易出现连接超时。请注意,当交易量过大时,KuCoin 会出现一些延迟。
因此,我们将切换为使用常规请求方法并获取可用货币的列表。
import requests
import json
import datetime
url = 'https://api.kucoin.com'
currencies = requests.get(url + '/api/v1/currencies')
currencies = currencies.json()
currencies = pd.DataFrame(currencies['data'])
currencies.set_index('currency', inplace=True)
print('There are {} currencies'.format(len(currencies)))
currencies.head().T
为了获取 KuCoin 上的价格数据,请发出以下请求:
ticker = requests.get(url + '/api/v1/market/orderbook/level1?symbol=BTC-USDT').json()
ticker['data']
{'time': 1615475368927,
'sequence': '1614104704724',
'price': '56977.4',
'size': '0.001',
'bestBid': '56971.5',
'bestBidSize': '0.00009434',
'bestAsk': '56971.6',
'bestAskSize': '0.00017804'}
如果您想查看某项资产在 24 小时内的表现,请执行以下操作:
ticker_24h = requests.get(url + '/api/v1/market/stats?symbol=BTC-USDT').json()
ticker_24h['data']
{'time': 1615475556056,
'symbol': 'BTC-U5DT',
'buy': '56998.3',
'sell': '57000',
'changeRate': '0.013',
'changePrice': '736.7',
'high': '57364',
'low': '54238',
'vol': '3712.3667572',
'volValue.: '208342804.860257668',
'last': '57000',
'averagePrice': '54559.31856369',
'takerFeeRate': '0.001',
'makerFeeRate': '0.001',
'takerCoefficient': '1',
'makerCoefficient': '1'}
要获取特定资产的法定价格,请编写以下代码:
fiat = requests.get(url + '/api/v1/prices?base=USD').json()
fiat['data']
{'LOKI': '1.01001475',
'DFI': '3.74945229',
'IOTX': '0.03639693',
'MC': '0.0167',
'FRONT': '2.13320120',
'MXEU: '0.01922177',
'TFD': '0.06198852',
'DOCK': '0.09895415',
'SUSD': '1.02366360',
'REVV': '0.22804950',
'STX': '1.13057958',
'OLT': '0.01097026',
'DENT': '0.00207008',
'AION': '0.18767166',
'NPXS.: '0.00230893',
'TFL': '0.31107999',
'XNS': '0.00056870',
'GMB': '0.00070519',
'DGB': '0.06198852',
为了从 KuCoin 获取历史数据,我们必须使用正确的端点并将数据排列到 pandas 数据框中以获得更好的外观。我们还将时间戳转换为可读格式。
history = requests.get(url + '/api/v1/market/histories?symbol=BTC-USDT')
history = history.json()
history = pd.DataFrame(history['data'])
history['time'] = pd.to_datetime(history['time'])
history.set_index('time', inplace=True)
history
现在让我们获取我们的符号的蜡烛,清理响应并整理数据。
kline = requests.get(url + '/api/v1/market/candles?type=1min&symbol=BTC-USDT&startAt=1566703297&endAt=1566789757')
kline = kline.json()
kline = pd.DataFrame(kline['data'])
kline = kline.rename({0:"Time",1:"Open",
2:"Close",3:"High",4:"Low",5:"Amount",6:"Volume"}, axis='columns')
kline.set_index('Time', inplace=True)
kline.head()
为了计算 20SMA,我们可以进行简单的 pandas 转换。让我们继续对上一个示例的收盘价进行转换。
kline['20 SMA'] = kline.Close.rolling(20).mean()
kline.tail()
KuCoin 上的订单簿数据有 3 个不同的端点,如下所示:
部分订单簿 (汇总) ——顾名思义,此订单簿仅出价和要价达到您可以在请求中设置的某个水平(例如 level_100 返回 100 个实例)
完整订单簿(汇总) ——此端点返回具有完整深度的订单簿,最常由高级交易者使用。由于它明显使用 KuCoin 服务器资源,因此具有严格的频率控制。
完整订单簿(原子) ——此端点提供指定对的 3 级订单簿数据。数据未聚合,每个实例都是单个订单,因此称为原子。此端点也受到严格的频率控制。
在本文中,我们将获取具有 20 个级别的部分订单簿。然后,我们将通过为买入价和卖出价创建 2 个单独的数据框来清理响应。我还将向您展示如何合并它们以便更好地观察。
orderbook = requests.get(url + '/api/v1/market/orderbook/level2_20?symbol=BTC-USDT')
orderbook = orderbook.json()
orderbook
bids = pd.DataFrame(orderbook['data']['bids'])
asks = pd.DataFrame(orderbook['data']['asks'])
df = pd.merge(bids, asks, left_index=True, right_index=True)
df = df.rename({"0_x":"Bid Price","1_x":"Bid Amount",
"0_y":"Ask Price","1_y":"Ask Amount"}, axis='columns')
df.head()
KuCoin 支持三种订单类型,即现货订单、保证金订单、止损订单和批量订单。我们先简单了解一下止损订单和批量订单,因为前两种订单对于不熟悉该领域的人来说已经非常熟悉了。
止损单是指,当订单以预先指定的止损价或低于预先指定的止损价成交时,您可以指定最后成交价或预先指定的限价的加密货币数量。然后订单将按最高价格执行。
另一方面,批量订单允许您同时执行 5 个订单。订单必须是同一符号的限价订单。
现在我们知道了KuCoin提供什么类型的订单,让我们继续探索两个简单的交易场景。
在第一个示例中,我将向您展示如何正确安全地启动具有指定要求的订单。我们想要做的事情是当 BTC 达到某个价格(例如 57200 美元)时启动 ETH 交易。
为了实现这一点,我们需要设置订单基础,然后创建一个循环来检查价格水平是否被触及。如果价格被触及,我们将执行市价订单。相反,我们将继续循环。
当价格执行后,我们会等待几秒钟,然后检查订单是否真的成交。这一额外步骤对于您的交易策略非常重要,因为交易所服务器可能会遇到一些问题。
现在我们已经有了主要想法,是时候建立交易基础了。我们将设置交易客户端并添加 API 密钥、API 机密和 API 密码变量。
from kucoin.client import Trade
from kucoin.client import Market
import pandas as pd
from time import sleep
api_key = '<api_key>'
api_secret = '<api_secret>'
api_passphrase = '<api_passphrase>'
m_client = Market(url='https://api.kucoin.com')
client = Trade(api_key, api_secret, api_passphrase, is_sandbox=True)
在我们构建检查交易要求是否满足的主循环之前,让我们介绍一下执行订单时可以传递的参数。
现在来看看脚本的主要部分:
while True:
try:
btc = m_client.get_ticker('BTC-USDT')
print('The price of BTC at {} is:'.format(pd.Timestamp.now()), btc['price'])
except Exception as e:
print(f'Error obtaining BTC data: {e}')
if float(btc['bestAsk']) < 57200.00:
continue
elif float(btc['bestAsk']) >= 57200.00:
try:
order = client.create_market_order('ETH-USDT', 'buy', size='5')
print()
except Exception as e:
print(f'Error placing order: {e}')
sleep(2)
try:
check = client.get_order_details(orderId=order['orderId'])
print(check)
except Excpetion as e:
print(f'Error while checking order status: {e}')
if check['isActive'] == true:
print ('Order placed at {}'.format(pd.Timestamp.now()))
break
else:
print('Order was canceled {}'.format(pd.Timestamp.now()))
break
太棒了!但是如果我们想计算两种货币之间的百分比变动,然后下订单怎么办?好吧,我们的下一个示例将解决这个问题!
主要任务是当 BTC 在过去 5 分钟内波动 5% 时执行 ETH 交易。这意味着我们需要创建一个循环来获取两种加密货币的价格并计算两者之间的百分比变化。
如果百分比变化小于 5%,程序将休眠 5 分钟并再次计算百分比变化。如果百分比变化等于或大于 5%,则交易将执行。
交易执行后,我们将休眠几秒钟,然后检查交易是否已完成。现在逻辑已经设置好,是时候编写代码了:
while True:
try:
btc_old = m_client.get_ticker('BTC-USDT')
print('The price of BTC at {} is:'.format(pd.Timestamp.now()), btc_old['price'])
except Exception as e:
print(f'Error obtaining BTC data: {e}')
sleep(300)
try:
btc_new = m_client.get_ticker('BTC-USDT')
print('The price of BTC at {} is:'.format(pd.Timestamp.now()), btc_new['price'])
except Exception as e:
print(f'Error obtaining BTC data: {e}')
percent = (((float(btc_new['bestAsk']) - float(btc_old['bestAsk'])) * 100) / float(btc_old['bestAsk']))
if percent < 5:
print('The trade requirement was not satisfied. The percentage move is at ',percent)
continue
elif percent >= 5:
try:
order = client.create_market_order('ETH-USDT', 'buy', size='5')
print()
except Exception as e:
print(f'Error placing order: {e}')
sleep(2)
try:
check = client.get_order_details(orderId=order['orderId'])
print(check)
except Excpetion as e:
print(f'Error while checking order status: {e}')
if check['isActive'] == true:
print ('Order placed at {}'.format(pd.Timestamp.now()))
break
else:
print('Order was canceled {}'.format(pd.Timestamp.now()))
break
如果您想取消KuCoin上的订单,您可以轻松使用以下API请求:
client.cancel_order(orderId)