
Python調用Google Bard API 完整指南
此外,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)