BTC
ETH
HTX
SOL
BNB
View Market
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

Python が Coinbase にどのように適用されるかを 1 つの記事で学びましょう

ChinaDeFi
特邀专栏作者
2021-12-17 08:54
この記事は約8779文字で、全文を読むには約13分かかります
Coinbase Pro などのオープン API を使用して市場データを抽出するにはどうすればよいですか?
AI要約
展開
Coinbase Pro などのオープン API を使用して市場データを抽出するにはどうすればよいですか?

暗号空間は、さまざまなテクノロジーを実験するのに最適な方法です。この記事では、次の内容について説明します。

  • Coinbase Pro から Pandas データフレームにデータをロードするにはどうすればよいですか?

  • 過去の仮想通貨市場データを変換して分析するにはどうすればよいですか?

  • 単純移動平均 (SMA)、指数移動平均 (EMA)、MACD、MACD シグナルを追加するにはどうすればよいですか?

  • Plotly と Python を使用して暗号通貨市場データを視覚化する方法?

この記事では、最も関連性の高い Python コードのみを示します。

この記事の最後では、次のようなさまざまなパフォーマンス指標や市場動向を含む暗号通貨のローソク足チャートを生成できるようになります。

最終結果 - 市場トレンドを含む OHLC ローソク足チャート

ステップ 1: Coinbase Pro に接続する

cbpro ライブラリの助けを借りて、Coinbase Pro への接続は 1 行で完了します。

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へのパブリッククライアントを起動する

分析する通貨の数を制限したいため、いくつかの定数を定義します。各通貨の価値を表示するために使用する USD や EUR などの基本通貨も選択しましょう。

FIAT_CURRENCIES = ['EUR','USD']
MY_BASE_CURRENCY = FIAT_CURRENCIES[0]
MY_CRYPTO_CURRENCIES = ["BTC","ETH","LTC","ALGO","SHIB","MANA"]

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

定数を定義する

ステップ 2: 過去 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 時間市場データをロードしてフォーマットします

画像の説明

24 時間の暗号通貨データとパフォーマンス


ステップ 3: さまざまな粒度の履歴データをロードする

次に、さまざまなタイム スライス粒度を使用して過去の市場データをダウンロードします。したがって、ステップ 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)

画像の説明

毎日のタイムスライスを含む仮想通貨の過去の市場データ


ステップ 4: メトリクスを追加する

ここからが最も難しい部分です。いくつかのカスタム投資指標をデータに追加したいと考えています。これにより、単純な市場データから得られる情報が強化されます。次の情報を追加します。

  • 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())

ステップ 5: 情報を使用して意思決定を行う

画像の説明

過去 90 日間のさまざまな暗号通貨のパフォーマンス


ステップ 6: 暗号通貨市場データを視覚化する

最後のステップでは、これまでに構築された基礎となるデータを視覚化します。視覚化には、強力な Plotly ライブラリを使用します。

データを視覚化する前に、下の画像に弱気 (赤) および強気 (緑) のボックスをプロットするために必要な情報を含む Pandas データ フレームをもう 1 つ作成する必要があります。したがって、開始期間と終了期間を含む強気市場と弱気市場の期間を示すテーブルを作成する必要があります。 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 データフレーム


画像の説明

パフォーマンス指標や市場動向を含む、洗練された暗号通貨ローソク足チャート


このグラフでは、Plotly で 2 つの y 軸を使用しています。右側の y 軸はローソク足の描画に使用されます。左側の Y 軸は、MACD と MACD シグナル ラインをプロットするために使用されます。

まとめ

まとめ

元のリンク

元のリンク

Coinbase
Odaily公式コミュニティへの参加を歓迎します
購読グループ
https://t.me/Odaily_News
チャットグループ
https://t.me/Odaily_GoldenApe
公式アカウント
https://twitter.com/OdailyChina
チャットグループ
https://t.me/Odaily_CryptoPunk