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

相關文章

  • EVM 存儲機制詳解:深入理解乙太坊技術與安全問題!

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

    2023 年 2 月 28 日
  • 函數式程式設計技術解析:使用 Rust 和 Elixir 讀寫乙太坊智慧合約!

    本系列將重點介紹兩種函數式編程語言:Rust&Elixir。本篇分享函數式編程的思想和實踐。 在這篇文章中將展示Elixir&Rust讀取以太坊智能合約的功能。重要的是,該程序不僅在以太坊上工作,而且還在任何支持EVM的區塊鏈上工作,例如,Polkadot上的Moonbeam ! Ethereumex & ExABI 我更喜歡 Eli…

    2023 年 2 月 28 日
  • 不斷進擊的乙太坊:EIP-1559 之後的 EIP-3074

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

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

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

    2023 年 2 月 28 日
  • DeFi 安全攻略:保障您的數字資產安全!

    無論是開發DeFi協議還是其他的智能合約應用,在上線到區塊鏈主網前都需要考慮到許多安全因素。很多團隊在審核代碼時只關注Solidity相關的陷阱,但要確保dApp的安全性足夠支撐上線主網,通常還有很多工作要做。了解大多數流行的DeFi安全漏洞可能會為你和你的用戶節省數十億美元并且免除后續的各種煩惱,如預言機攻擊、暴力攻擊和許多其他威脅等。 考慮到這一點,我們…

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