為什么我應(yīng)該使用 Coinbase Pro API?

為什么我不應(yīng)該使用 Coinbase Pro API?

Coinbase 和 Coinbase Pro 一樣嗎?

是也不是。這兩個(gè)平臺(tái)均歸 Coinbase Global Inc 所有,但 Coinbase 更像是您的虛擬錢包,而 Coinbase Pro 則適合交易高級(jí)且準(zhǔn)備與其他用戶交易的人。

Coinbase Pro API 是否比 Coinbase API 更好?

我們可以有力地論證說,Coinbase Pro API 比普通的 Coinbase API 更好,因?yàn)樗试S更多高級(jí)功能和端點(diǎn)。

Coinbase Pro API 在我的國(guó)家/地區(qū)可用嗎?

Coinbase Pro API 可在 100 多個(gè)國(guó)家/地區(qū)使用,完整列表可在此處找到。為了方便您,我在下圖中匯總了所有獲準(zhǔn)的國(guó)家/地區(qū):

使用 Coinbase Pro API 有哪些替代方案?

Coinbase Pro API 可以替換為其他更適合您需求的交易所。以下是其中一些:

Coinbase Pro API 有哪些客戶端可用?

Coinbase Pro API 的可用和維護(hù)的客戶端如下:

如何開始使用 Coinbase Pro API?

有兩種方法可以開始使用 Coinbase Pro。第一種方法是直接在 Coinbase Pro 登錄頁(yè)面上創(chuàng)建一個(gè)帳戶,第二種方法是將其與已創(chuàng)建的 Coinbase 帳戶集成。

讓我們先從后者開始。轉(zhuǎn)到以下鏈接上的 Coinbase Pro 頁(yè)面:Coinbase Pro | 數(shù)字資產(chǎn)交易所

到達(dá)那里后,點(diǎn)擊右上角的藍(lán)色“開始”按鈕。然后,您需要指定您的基本帳戶詳細(xì)信息并驗(yàn)證您的電子郵件地址并通過電話進(jìn)行身份驗(yàn)證。

根據(jù)您所在的地區(qū),您將被要求提供您的姓名、出生日期、地址、意圖、資金來源、職業(yè)和雇主。您還應(yīng)該準(zhǔn)備好您的身份證件,因?yàn)槟鷮⒈灰筇峁┥矸葑C件的照片。

身份驗(yàn)證后,系統(tǒng)會(huì)要求您關(guān)聯(lián)銀行賬戶。您可以跳過此步驟,稍后再選擇“開始交易”選項(xiàng)返回。第一種方法就是這樣。

第二種方式是使用您的 Coinbase 帳戶憑證登錄,這將自動(dòng)鏈接兩者并允許在它們之間轉(zhuǎn)移資金。

如果您想選擇第二種選擇,但沒有 Coinbase 帳戶,您可以查看我們的Coinbase 文章入門部分。

現(xiàn)在點(diǎn)擊右上角的賬戶圖標(biāo)和 API,然后點(diǎn)擊“+ 新 API 密鑰”按鈕。然后您將指定 API 密鑰權(quán)限、昵稱和密碼。

之后,您可以創(chuàng)建 API 密鑰。系統(tǒng)將提示您輸入驗(yàn)證碼,完成后將顯示應(yīng)安全存儲(chǔ)的密鑰。

現(xiàn)在我們的 API 密鑰已創(chuàng)建并可運(yùn)行,我們可以通過檢查最常用的公共和私有端點(diǎn)來測(cè)試其功能。請(qǐng)務(wù)必使用以下命令安裝 Python 客戶端:

pip install cbpro

如何使用 Coinbase Pro API 獲取交易對(duì)信息?

可以使用get_products 帶有 Coinbase Pro API python 庫(kù)的端點(diǎn)獲取交易對(duì)。

現(xiàn)在,讓我們導(dǎo)入庫(kù),初始化客戶端,獲取我們的產(chǎn)品數(shù)據(jù),并將其放入 pandas 數(shù)據(jù)框中以便更好地觀察:

import cbpro
import pandas as pd
c = cbpro.PublicClient()

data = pd.DataFrame(c.get_products())
data.tail().T

這是相當(dāng)可觀的交易對(duì)數(shù)量,但還可以更多。

如何使用 Coinbase Pro API 獲取價(jià)格數(shù)據(jù)?

可以使用 Coinbase Pro API 的get_product_ticker端點(diǎn)獲取價(jià)格數(shù)據(jù)。您需要指定要獲取數(shù)據(jù)的股票代碼參數(shù)。

讓我們獲取 Cardano 資產(chǎn)的數(shù)據(jù):

ticker = c.get_product_ticker(product_id='ADA-USD')
ticker
{'trade_id': 15598647,
'price': '1.7446',
'size': '27.35',
'time': '2021-05-26T18:24:17.9723252',
'bid': '1.7435',
'ask': '1.7444',
'volume': '223045485.25'}

您還可以使用Coinbase Pro REST API端點(diǎn)通過以下方式獲取數(shù)據(jù):

import requests

ticker = requests.get('https://api.pro.coinbase.com/products/ADA-USD/ticker').json()
ticker
{'trade_id': 16369597,
'price': '1.6106',
'size': '1012.91',
'time': '2021-05-30T08:39:31.8363332',
'bid': '1.6106',
'ask': '1.6111',
'volume': '197711129.46'}

如何使用 Coinbase Pro API 獲取歷史數(shù)據(jù)?

可以使用 Coinbase Pro API 的 get_product_historic_rates 端點(diǎn)獲取歷史數(shù)據(jù)。您可以將粒度、開始和結(jié)束日期指定為 API 請(qǐng)求的參數(shù)。

讓我們使用默認(rèn)參數(shù)獲取 ETH-USD 的歷史數(shù)據(jù),并將其排列到已清理的 pandas 數(shù)據(jù)框中。我們將重命名列,將 Unix 時(shí)間轉(zhuǎn)換為標(biāo)準(zhǔn)時(shí)間,并按此對(duì)數(shù)據(jù)進(jìn)行排序。

historical = pd.DataFrame(c.get_product_historic_rates(product_id='ETH-USD'))
historical.columns= ["Date","Open","High","Low","Close","Volume"]
historical['Date'] = pd.to_datetime(historical['Date'], unit='s')
historical.set_index('Date', inplace=True)
historical.sort_values(by='Date', ascending=True, inplace=True)
historical

現(xiàn)在我們可以使用這些數(shù)據(jù)來創(chuàng)建一個(gè)簡(jiǎn)單的指標(biāo)并生成一個(gè)交互式燭臺(tái)圖。

如何使用 Coinbase Pro API 訪問 20 SMA 等技術(shù)指標(biāo)?

Coinbase Pro API 不提供任何預(yù)設(shè)指標(biāo),但我們可以使用一些內(nèi)置的 pandas 功能來制作簡(jiǎn)單指標(biāo),或者依靠 btalib 庫(kù)來制作更復(fù)雜的指標(biāo)。

在本例中,我們將使用 pandas 創(chuàng)建一個(gè)簡(jiǎn)單的 20 SMA 指標(biāo):

historical['20 SMA'] = historical.Close.rolling(20).mean()
historical.tail()

現(xiàn)在我們擁有使用 plotly 庫(kù)創(chuàng)建漂亮的交互式圖表所需的所有數(shù)據(jù):

import plotly.graph_objects as go
fig = go.Figure(data=[go.Candlestick(x = historical.index,
open = historical['Open'],
high = historical['High'],
low = historical['Low'],
close = historical['Close'],
),
go.Scatter(x=historical.index, y=historical['20 SMA'], line=dict(color='purple', width=1))])

fig.show()

如何使用 Coinbase Pro API 獲取訂單簿數(shù)據(jù)?

可以使用get_product_order_book Coinbase Pro API 端點(diǎn)獲取訂單簿數(shù)據(jù)。您需要指定要在其上設(shè)置訂單簿的資產(chǎn)。

讓我們獲取 BTC-USD 的訂單簿數(shù)據(jù),并將買入價(jià)和賣出價(jià)排列到單獨(dú)的 pandas 數(shù)據(jù)框中。之后,我將向您展示如何將兩者合并在一起。

order_book = c.get_product_order_book('BTC-USD')
order_book

現(xiàn)在我們創(chuàng)建兩個(gè)數(shù)據(jù)框:

bids = pd.DataFrame(order_book['bids'])
asks = pd.DataFrame(order_book['asks'])

bids.head()

現(xiàn)在我們將兩者合并,并將列重命名為信息豐富的名稱:

df = pd.merge(bids, asks, left_index=True, right_index=True)
df = df.rename({"0_x":"Bid Price","1_x":"Bid Size", "2_x":"Bid Amount",
"0_y":"Ask Price","1_y":"Ask Size", "2_y":"Ask Amount"}, axis='columns')
df.head()

如何使用 Coinbase Pro API 獲取交易數(shù)據(jù)?

可以使用端點(diǎn)通過 Coinbase Pro API 獲取交易數(shù)據(jù)get_product_trades。必需參數(shù)是您要獲取數(shù)據(jù)的資產(chǎn)。

由于 Python 庫(kù)可能會(huì)因?yàn)檫M(jìn)行幾個(gè)調(diào)用而卡住,因此我們將使用 REST API。

trades = pd.DataFrame(requests.get('https://api.pro.coinbase.com/products/ETH-USD/trades').json())
trades.tail()

如何使用 Coinbase Pro WebSockets?

Coinbase Pro WebSockets 可通過 WebscoketClient 端點(diǎn)訪問。借助此功能,您可以輕松流式傳輸并及時(shí)了解您感興趣的數(shù)據(jù)。

讓我們從一個(gè)獲取股票價(jià)格數(shù)據(jù)的基本 WebSocket 連接開始。

import cbpro

wsc = cbpro.WebsocketClient(url="wss://ws-feed.pro.coinbase.com",
products="ADA-USD",
channels=["ticker"])

要關(guān)閉 WebSocket,請(qǐng)編寫以下命令:

wsc.close()

現(xiàn)在,讓我們創(chuàng)建一個(gè)類,它將獲取一定數(shù)量的 WebSocket 消息的股票價(jià)格數(shù)據(jù)并將其打印出來:

import time, cbpro
class myWebsocketClient(cbpro.WebsocketClient):
def on_open(self):
self.url = "wss://ws-feed.pro.coinbase.com/"
self.products = ["ETH-USDT"]
self.channels=["ticker"]
self.message_count = 0
def on_message(self, msg):
self.message_count += 1
if 'price' in msg and 'type' in msg:
print ("Message type:", msg["type"],
"\t@ {:.3f}".format(float(msg["price"])))
def on_close(self):
print("Closing")

wsClient = myWebsocketClient()
wsClient.start()
print(wsClient.url, wsClient.products, wsClient.channels)
while (wsClient.message_count < 50):
print ("\nmessage_count =", "{} \n".format(wsClient.message_count))
time.sleep(1)
wsClient.close()

當(dāng) BTC 達(dá)到某個(gè)價(jià)格時(shí),如何使用 Coinbase Pro API 對(duì) ETH 執(zhí)行交易?

在這個(gè)第一個(gè)例子中,我將向您展示如何正確安全地啟動(dòng)具有指定要求的訂單。我們想要做的是當(dāng) BTC 達(dá)到某個(gè)價(jià)格(例如 38500 美元)時(shí)啟動(dòng) ETH 交易。

為了實(shí)現(xiàn)這一點(diǎn),我們需要設(shè)置訂單基礎(chǔ),然后創(chuàng)建一個(gè)循環(huán)來檢查價(jià)格水平是否被觸及。如果價(jià)格被觸及,我們將執(zhí)行市價(jià)訂單。否則,我們將繼續(xù)循環(huán)。

當(dāng)價(jià)格執(zhí)行后,我們會(huì)等待幾秒鐘并檢查訂單是否真的已完成。這一額外步驟對(duì)于添加到您的交易策略中非常重要,因?yàn)榻灰姿?wù)器可能會(huì)遇到一些問題。

現(xiàn)在邏輯已經(jīng)設(shè)置好了,讓我們導(dǎo)入相關(guān)的庫(kù)并設(shè)置 API:

import cbpro
import base64
import json
from time import sleep

key = ''
secret = ''
passphrase = ''

encoded = json.dumps(secret).encode()
b64secret = base64.b64encode(encoded)
auth_client = cbpro.AuthenticatedClient(key=key, b64secret=secret, passphrase=passphrase)
c = cbpro.PublicClient()

現(xiàn)在來看看主要的交易邏輯。請(qǐng)注意我們?nèi)绾瓮ㄟ^采用當(dāng)前的 ETH-USD 價(jià)格并在其上方加幾美元來下限價(jià)訂單。這樣做是為了讓訂單更安全。

while True:
try:
ticker = c.get_product_ticker(product_id='BTC-USD')
except Exception as e:
print(f'Error obtaining ticker data: {e}')

if float(ticker['price']) >= 38500.00:
try:
limit = c.get_product_ticker(product_id='ETH-USD')
except Exception as e:
print(f'Error obtaining ticker data: {e}')

try:
order=auth_client.place_limit_order(product_id='ETH-USDT',
side='buy',
price=float(limit['price'])+2,
size='0.007')
except Exception as e:
print(f'Error placing order: {e}')

sleep(2)

try:
check = order['id']
check_order = auth_client.get_order(order_id=check)
except Exception as e:
print(f'Unable to check order. It might be rejected. {e}')

if check_order['status'] == 'done':
print('Order placed successfully')
print(check_order)
break
else:
print('Order was not matched')
break
else:
print(f'The requirement is not reached. The ticker price is at {ticker["price"]}')
sleep(10)

當(dāng) BTC 在過去 5 分鐘內(nèi)波動(dòng) 5% 時(shí),如何使用 Coinbase Pro API 執(zhí)行 ETH 交易?

主要任務(wù)是當(dāng) BTC 在過去 5 分鐘內(nèi)波動(dòng) 5% 時(shí)執(zhí)行 ETH 交易。這意味著我們需要?jiǎng)?chuàng)建一個(gè)循環(huán)來獲取兩種加密貨幣的價(jià)格并計(jì)算兩者之間的百分比變化。

如果百分比變化小于 5%,程序?qū)⑿菝?5 分鐘并再次計(jì)算百分比變化。如果百分比變化等于或大于 5%,則交易將執(zhí)行。

交易執(zhí)行后,我們將休眠幾秒鐘,然后檢查交易是否已完成。請(qǐng)記住,庫(kù)和 API 設(shè)置與上一個(gè)示例相同。

現(xiàn)在已經(jīng)設(shè)置了邏輯,是時(shí)候編寫代碼了:

while True:
try:
ticker_old = c.get_product_ticker(product_id='BTC-USD')
except Exception as e:
print(f'Error obtaining ticker data: {e}')

sleep(300)

try:
ticker_new = c.get_product_ticker(product_id='BTC-USD')
except Exception as e:
print(f'Error obtaining ticker data: {e}')

percent = ((float(ticker_new['price']) - float(ticker_old['price']))*100)/float(ticker_old['price'])

if percent >= 5:
try:
limit = c.get_product_ticker(product_id='ETH-USDT')
except Exception as e:
print(f'Error obtaining ticker data: {e}')

try:
order=auth_client.place_limit_order(product_id='ETH-USDT',
side='buy',
price=float(limit['price'])+2,
size='0.007')
except Exception as e:
print(f'Error placing order: {e}')

sleep(2)

try:
check = order['id']
check_order = auth_client.get_order(order_id=check)
except Exception as e:
print(f'Unable to check order. It might be rejected. {e}')

if check_order['status'] == 'done':
print('Order placed successfully')
print(check_order)
break
else:
print('Order was not matched')
break
else:
print(f'The requirement is not reached. The percent change is at {percent}')

如何使用 Coinbase Pro API 取消訂單?

要使用 Coinbase Pro API 取消訂單,您需要做的就是訪問cancel_orderAPI 端點(diǎn)并將訂單 ID 作為參數(shù)傳遞。

client.cancel_order(order_id = "ORDER-ID-HERE")

上一篇:

OKX API – 入門指南

下一篇:

Kraken API – 完整指南
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)