Coinbase API 教程:Python 在 Coinbase 上的應用!

加密領域是試驗不同技術的好方法。在本文中,我們將涵蓋以下內容:

如何從Coinbase Pro加載數據到Pandas數據框?

如何轉化和分析歷史加密貨幣市場數據?

如何添加簡單移動平均線(SMA),指數移動平均線(EMA), MACD, MACD信號?

如何使用Plotly和Python可視化加密貨幣市場數據?

本文只展示最相關的Python代碼。

Python在Coinbase上的應用

在文章的最后,我們將能夠產生一個加密貨幣蠟燭棒圖表,包括各種性能指標和市場趨勢,像這樣:

Python在Coinbase上的應用

最終結果——包含市場趨勢的 OHLC 蠟燭圖

第一步:連接Coinbase Pro

在cbpro庫的幫助下,連接到Coinbase Pro是一條單線:

import cbpro

public_client = cbpro.PublicClient()

server_time = public_client.get_time()

# Server time does not comply to iso format, therefore slight modification of string needed

server_time_now = datetime.fromisoformat(server_time['iso'].replace('T', ' ', 1)[0:19])

print(server_time_now)

啟動公共客戶端到 Coinbase Pro

我們將定義幾個常量,因為我們想要限制想要分析的貨幣數量。讓我們還可以選擇一個基礎貨幣,如美元或歐元,我們想要使用它們來顯示每種貨幣的價值。

FIAT_CURRENCIES = ['EUR','USD']

MY_BASE_CURRENCY = FIAT_CURRENCIES[0]

MY_CRYPTO_CURRENCIES = ["BTC","ETH","LTC","ALGO","SHIB","MANA"]

GRANULARITIES = ['daily','60min','15min','1min']

定義常量

第二步:最近24小時的負載統計

接下來,我們將回顧過去24小時內每種加密貨幣的基本統計數據。我們還將添加一個自定義列“表現”,它將顯示報表期間從開始到結束的表現。代碼的其余部分負責數字格式化。

currency_rows = []

for currency in MY_CRYPTO_CURRENCIES:

data = public_client.get_product_24hr_stats(currency+'-'+MY_BASE_CURRENCY)

currency_rows.append(data)

df_24hstats = pd.DataFrame(currency_rows, index = MY_CRYPTO_CURRENCIES)

df_24hstats['currency'] = df_24hstats.index

df_24hstats['open'] = df_24hstats['open'].astype(float)

df_24hstats['high'] = df_24hstats['high'].astype(float)

df_24hstats['low'] = df_24hstats['low'].astype(float)

df_24hstats['volume'] = df_24hstats['volume'].astype(float)

df_24hstats['last'] = df_24hstats['last'].astype(float)

df_24hstats['volume_30day'] = df_24hstats['volume_30day'].astype(float)

df_24hstats['performance'] = ((df_24hstats['last']-df_24hstats['open']) / df_24hstats['open']) * 100

df_24hstats_formatted = df_24hstats.copy()

df_24hstats_formatted['performance'] = df_24hstats_formatted['performance'].apply(lambda x: "{:.2f}%".format((x)))

df_24hstats_formatted['open'] = df_24hstats_formatted['open'].apply(lambda x: "{:,.2f}€".format((x)))

df_24hstats_formatted['high'] = df_24hstats_formatted['high'].apply(lambda x: "{:,.2f}€".format((x)))

df_24hstats_formatted['low'] = df_24hstats_formatted['low'].apply(lambda x: "{:,.2f}€".format((x)))

df_24hstats_formatted['last'] = df_24hstats_formatted['last'].apply(lambda x: "{:,.2f}€".format((x)))

df_24hstats_formatted.style.hide_columns(['volume','volume_30day'])

從Coinbase Pro加載并格式化所有加密貨幣的24小時市場數據

Pandas數據框的格式化輸出如下所示:

Python在Coinbase上的應用

24小時加密貨幣數據和表現

第三步:加載不同粒度的歷史數據

接下來,我們將使用不同的時間片粒度下載歷史市場數據。因此,我們需要像步驟2那樣遍歷所有貨幣。下面是如何檢索每日數據的例子:

currency_history_rows = []

for currency in MY_CRYPTO_CURRENCIES:

start_date = (server_time_now - timedelta(days=90)).isoformat()

end_date = server_time_now.isoformat()

data = public_client.get_product_historic_rates(currency+'-'+MY_BASE_CURRENCY, start=start_date, end=end_date, granularity=86400)

[x.append(currency) for x in data]

[x.append('daily') for x in data]

currency_history_rows.extend(data)

df_history = pd.DataFrame(currency_history_rows)

df_history.columns = ['time','low','high','open','close','volume','currency','granularity']

df_history['date'] = pd.to_datetime(df_history['time'], unit='s')

為了檢索時間片數據,我們需要以下信息:

所需時間段的ISO格式開始日期

所需時間段的ISO格式結束日期

以秒為單位的粒度(在本例中為86400秒,等于24小時)

如果你想獲得過去300小時的每小時數據,可以執行以下操作:

start_date = (server_time_now - timedelta(hours=300)).isoformat()

end_date = server_time_now.isoformat()

data = public_client.get_product_historic_rates(currency+'-'+MY_BASE_CURRENCY, start=start_date, end=end_date, granularity=3600)

現在我們的Pandas數據框如下(為了更好的可讀性,增加了一些額外的列,如年、月、日):

Python在Coinbase上的應用

帶有每日時間片的加密貨幣歷史市場數據

第四步:添加指標

現在是最具挑戰性的部分。我們想在我們的數據中添加一些自定義的投資指標。這將增強我們從簡單的市場數據中獲得的信息。我們將添加以下信息:

SMA3和SMA7(過去3和7個時間片的簡單移動平均線):這是一個基于價格的、滯后的(或反應性的)指標,顯示某一段時間內某一證券的平均價格。在解釋圖表時,移動平均線消除了“噪音”。噪音是由價格和音量的波動構成的。簡單移動平均線是一種未加權移動平均線。這意味著數據集中的每個時間段都具有同等的重要性,并且具有同等的權重。

EMA12和EMA26(過去12和26個時間片上的指數移動平均線):EMA 的滯后比 SMA 少得多,因為它更重視最近的價格。因此,它的旋轉速度比SMA快。我們可以選擇不同的時間片,但是12和26是常用的持續時間,我們將在示例中使用它們。

MACD(移動平均收斂/背離):一個很好的指標來確定任何證券的總體趨勢。它需要短期 EMA 和長期 EMA 之間的差。正的 MACD 值是一個積極的市場趨勢的指標。負的 MACD 值是負面市場趨勢的指標。

MACD信號:MACD信號線是MACD線的特定時間片組上的 EMA。通常,該值設置為9個時間片。

MACD柱:這是MACD線和MACD信號線之間的區別。當 MACD 線在 MACD 信號線上方交叉時,就會出現看漲交叉。當 MACD 線在 MACD 信號線下方交叉時,就會出現看跌交叉。稍后,當我們將數據可視化時,就將確切地看到這意味著什麼。

從開盤到收盤的表現:對于每一個時間片,特定時期的收盤價和開盤價之間的差異以百分比表示。

高低跨度:在一個時期內最高價格和最低價格之間的百分比偏差。這顯示了一個時間片內的波動。

最近3個時期的絕對表現:該指標將最近3個時間片的表現作為一個絕對值(用我們在常數中定義的選擇的基礎貨幣度量)。

最近3個時間段的表現百分比:該指標以相對值(百分比)的形式提供最近3個時間片的表現。

牛或熊:如果MACD直方圖為正,就寫“牛”;如果MACD直方圖為負,就寫“熊”。

持續的市場趨勢:為了識別從牛市到熊市的轉變,反之亦然,如果從前一個時間片的趨勢繼續,這一欄為“True”,如果趨勢發生了變化,則為“False”。

多虧了Panda強大的向量運算和內置函數,我們只用了幾行代碼就實現了這一點。

currency_history_rows_enhanced = []

for currency in MY_CRYPTO_CURRENCIES:

for granularity in GRANULARITIES:

df_history_currency = df_history.query('granularity == @granularity & currency == @currency').copy()

df_history_currency = df_history_currency.sort_values(['date'], ascending=True)

df_history_currency['SMA3'] = df_history_currency['close'].rolling(window=3).mean()

df_history_currency['SMA7'] = df_history_currency['close'].rolling(window=7).mean()

df_history_currency['EMA12'] = df_history_currency['close'].ewm(span=12, adjust=False).mean()

df_history_currency['EMA26'] = df_history_currency['close'].ewm(span=26, adjust=False).mean()

df_history_currency['MACD'] = df_history_currency['EMA12'] - df_history_currency['EMA26']

df_history_currency['MACD_signal'] = df_history_currency['MACD'].ewm(span=9, adjust=False).mean()

df_history_currency['macd_histogram'] = ((df_history_currency['MACD']-df_history_currency['MACD_signal']))

df_history_currency['open_to_close_perf'] = ((df_history_currency['close']-df_history_currency['open']) / df_history_currency['open'])

df_history_currency['high_low_span'] = ((df_history_currency['high']-df_history_currency['low']) / df_history_currency['high'])

df_history_currency['open_perf_last_3_period_abs'] = df_history_currency['open'].rolling(window=4).apply(lambda x: x.iloc[1] - x.iloc[0])

df_history_currency['open_perf_last_3_period_per'] = df_history_currency['open'].rolling(window=4).apply(lambda x: (x.iloc[1] - x.iloc[0])/x.iloc[0])

df_history_currency['bull_bear'] = np.where(df_history_currency['macd_histogram']< 0, 'Bear', 'Bull')

currency_history_rows_enhanced.append(df_history_currency)

df_history_enhanced = pd.concat(currency_history_rows_enhanced, ignore_index=True)

df_history_enhanced = df_history_enhanced.sort_values(['currency','granularity','date'], ascending=True)

df_history_enhanced['market_trend_continued'] = df_history_enhanced.bull_bear.eq(df_history_enhanced.bull_bear.shift()) & df_history_enhanced.currency.eq(df_history_enhanced.currency.shift()) & df_history_enhanced.granularity.eq(df_history_enhanced.granularity.shift())

第五步:利用信息進行決策

現在我們已經為進一步的分析創建了良好的基礎,我們可以利用這些信息并創建一個定制的Pandas數據框。它保存了我們選擇的加密貨幣的一些基本表現信息:

Python在Coinbase上的應用

過去90天內各種加密貨幣的表現

第六步:可視化加密市場數據

在最后一步中,我們希望可視化到目前為止構建的基礎數據。為了可視化,我們將使用強大的Plotly庫。

在我們能夠可視化數據之前,我們需要再創建一個Pandas數據框,它將包含繪制下圖中看跌(紅色)和看漲(綠色)框所需的信息。因此,我們需要構建一個表,它將給出牛市和熊市的時間周期,包括開始和結束的時間周期。多虧了Pandas,我們可以通過以下代碼片段輕松實現這一點:

market_trend_interval_rows = []

for currency in MY_CRYPTO_CURRENCIES:

for granularity in GRANULARITIES:

df_history_market_trend_intervals = df_history_enhanced.query('currency == @currency and market_trend_continued == False and granularity == @granularity').copy()

df_history_market_trend_intervals['next_period_date'] = df_history_market_trend_intervals.date.shift(-1)

df_history_market_trend_intervals['next_period_date'] = df_history_market_trend_intervals['next_period_date']

df_history_market_trend_intervals.next_period_date = df_history_market_trend_intervals.next_period_date.fillna(datetime.now())

df_history_market_trend_intervals['color'] = df_history_market_trend_intervals['bull_bear'].apply(lambda x: GREEN_COLOR if x == 'Bull' else RED_COLOR)

df_history_market_trend_intervals = df_history_market_trend_intervals[['currency','granularity','bull_bear','color','date','next_period_date']].rename(columns={"date": "start_date", "next_period_date": "finish_date"})

market_trend_interval_rows.append(df_history_market_trend_intervals)

df_history_market_trend_intervals = pd.concat(market_trend_interval_rows, ignore_index=True)

強大的 Pandas 功能來改變我們的時間片

這段代碼將給我們一個Pandas數據框,如下所示:

Python在Coinbase上的應用

壓縮看漲和看跌時間段的 Pandas 數據框

關于Plotly代碼,可以在Jupyter Notebook中操作。Plotly的輸出如下所示:

Python在Coinbase上的應用

復雜的加密貨幣蠟燭圖,包括性能指標和市場趨勢

這個圖表使用了Plotly中的兩個y軸。右邊的y軸是用來繪制蠟燭圖的。左邊的y軸用于繪制MACD和MACD信號線。

每當MACD線越過MACD信號線上方時,我們就進入一個牛市周期,這個周期用綠色方框表示。每當MACD線跌破MACD信號線,我們就進入熊市周期。后一種情況用一個紅框表示。

小結

到目前為止,我們已經學習了如何利用Coinbase Pro等開放API來提取市場數據,并根據需求進行轉換。

發文者:鏈站長,轉載請註明出處:https://www.jmb-bio.com/4151.html

讚! (0)
Donate 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Previous 2023 年 2 月 28 日 下午 2:42
Next 2023 年 2 月 28 日 下午 2:50

相關文章

  • 不斷進擊的乙太坊:EIP-1559 之後的 EIP-3074

     Ropsten 測試網已于 6 月 24 日上線,區塊高度為 10,499,401。 ▪️ 自部署以來,約有 88,500 個測試網以太坊被燒毀,價值 1.776 億美元。 ▪️ 大約在 Eth3 啟動的同時,價值 2 億美元的 10 萬以太坊已經被存入 Eth3 的質押合約。 備受期待的以太坊改進提案 EIP-1559 最終…

    2023 年 2 月 28 日
  • EVM 存儲機制詳解:深入理解乙太坊技術與安全問題!

    前言 EVM 是一個輕量級的虛擬機,其設計初衷就是提供一種可以忽略硬件、操作系統等兼容性的虛擬的執行環境供以太坊網絡運行智能合約。 簡單來說 EVM 是一個完全獨立的沙盒,在 EVM 中運行的代碼是無法訪問網絡、文件系統和其他進程的,以此來避免錯誤的代碼能讓智能合約毀滅或者影響外部環境。 在此基礎上,知道創宇區塊鏈安全實驗室 帶大家一起深入理解 E…

    2023 年 2 月 28 日
  • 虛擬通道技術詳解:如何創建狀態通道網路!

    在本文中,我們介紹了一種叫作虛擬通道(virtual channel)的新型狀態通道結構。虛擬通道不僅使得付費文件流(點擊此處,查看 demo!)等新型應用場景成為可能,還可以簡化去中心化的 Graph 查詢支付、Filecoin 內容檢索、帶有經濟激勵機制的狀態提供者網絡等有趣的應用場景。 動機 讓我們來設計一個免信任的付費文件流支付系統。這個系統中有 s…

    2023 年 2 月 28 日
  • Vitalik Buterin:乙太坊的設計理念(一)

    盡管以太坊的許多理念在早先的密碼學貨幣(如比特幣)上已經運用并測試了5年之久,但從某些協議功能的處理方法上來說,以太坊與常見方式仍有許多不同。而且,以太坊可用于開發全新的經濟工具,因為它具有其他系統不具備的許多功能。本文會詳細描述以太坊所有的潛在優點,以及在構建以太坊協議過程中某些有爭議的地方。另外,也會指出我們的方案及替代方案的潛在風險。 原則 以太坊協議…

    2023 年 2 月 28 日
  • PolyYeld Finance 被攻擊事件全解析:代幣 YELD 價格跳水歸零!

    北京時間7月28日,安全公司Rugdoc在推特表示,收益耕作協議PolyYeld Finance遭到攻擊,所有者已宣布合約已被利用并鑄造了大量YELD代幣。CoinGeckko行情顯示,YELD代幣價格直線跳水歸零,狂跌100%。 事件概覽 攻擊如何發生 Event overview PolyYeld Finance 是 Polygon 網絡上的下一代產量農…

    2023 年 2 月 28 日
每日鏈頭條給你最新幣圈相關資訊!