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

เรียนรู้วิธีการใช้ Python กับ Coinbase ในบทความเดียว

ChinaDeFi
特邀专栏作者
2021-12-17 08:54
บทความนี้มีประมาณ 8779 คำ การอ่านทั้งหมดใช้เวลาประมาณ 13 นาที
จะใช้ API แบบเปิดเช่น Coinbase Pro เพื่อดึงข้อมูลตลาดได้อย่างไร
สรุปโดย AI
ขยาย
จะใช้ API แบบเปิดเช่น Coinbase Pro เพื่อดึงข้อมูลตลาดได้อย่างไร

พื้นที่ crypto เป็นวิธีที่ยอดเยี่ยมในการทดลองกับเทคโนโลยีต่างๆ ในบทความนี้ เราจะกล่าวถึงสิ่งต่อไปนี้:

  • จะโหลดข้อมูลจาก Coinbase Pro ไปยัง Pandas dataframe ได้อย่างไร?

  • จะแปลงและวิเคราะห์ข้อมูลตลาด cryptocurrency ย้อนหลังได้อย่างไร?

  • จะเพิ่ม Simple Moving Average (SMA), Exponential Moving Average (EMA), MACD, MACD Signal ได้อย่างไร?

  • วิธีแสดงข้อมูลตลาด Cryptocurrency โดยใช้ Plotly และ Python

บทความนี้แสดงเฉพาะรหัส Python ที่เกี่ยวข้องมากที่สุด

ในตอนท้ายของบทความ เราจะสามารถสร้างแผนภูมิแท่งเทียนของสกุลเงินดิจิทัล รวมถึงตัวบ่งชี้ประสิทธิภาพต่างๆ และแนวโน้มของตลาด เช่นนี้:

ผลลัพธ์สุดท้าย - แผนภูมิแท่งเทียน OHLC พร้อมแนวโน้มตลาด

ขั้นตอนที่ 1: เชื่อมต่อกับ 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

เราจะกำหนดค่าคงที่สองสามค่าเนื่องจากเราต้องการจำกัดจำนวนของสกุลเงินที่เราต้องการวิเคราะห์ ให้เลือกสกุลเงินหลัก เช่น 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'])

โหลดและจัดรูปแบบข้อมูลการตลาดตลอด 24 ชั่วโมงสำหรับสกุลเงินดิจิทัลทั้งหมดจาก Coinbase Pro

คำอธิบายภาพ

ข้อมูลและประสิทธิภาพ cryptocurrency ตลอด 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')

ในการดึงข้อมูล Timeslice เราต้องการข้อมูลต่อไปนี้:

  • วันที่เริ่มต้นในรูปแบบ 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)

คำอธิบายภาพ

ข้อมูลตลาดย้อนหลังของ Cryptocurrency พร้อมส่วนเวลารายวัน


ขั้นตอนที่สี่: เพิ่มเมตริก

ตอนนี้มาถึงส่วนที่ท้าทายที่สุด เราต้องการเพิ่มเมตริกการลงทุนที่กำหนดเองลงในข้อมูลของเรา สิ่งนี้จะช่วยปรับปรุงข้อมูลที่เราได้รับจากข้อมูลตลาดอย่างง่าย เราจะเพิ่มข้อมูลต่อไปนี้:

  • SMA3 และ SMA7 (ค่าเฉลี่ยเคลื่อนที่อย่างง่ายในช่วง 3 และ 7 ส่วนเวลาที่ผ่านมา): นี่คือตัวบ่งชี้ตามราคา ล้าหลัง (หรือโต้ตอบ) ที่แสดงราคาเฉลี่ยของหลักทรัพย์ในช่วงระยะเวลาหนึ่ง ค่าเฉลี่ยเคลื่อนที่จะลบ "สัญญาณรบกวน" เมื่อตีความแผนภูมิ เสียงรบกวนประกอบด้วยความผันผวนของราคาและปริมาณ Simple Moving Average เป็นค่าเฉลี่ยเคลื่อนที่แบบไม่ถ่วงน้ำหนัก ซึ่งหมายความว่าแต่ละช่วงเวลาในชุดข้อมูลมีความสำคัญเท่ากันและให้น้ำหนักเท่ากัน

  • EMA12 และ EMA26 (ค่าเฉลี่ยเคลื่อนที่แบบเอกซ์โปเนนเชียลในช่วง 12 และ 26 ส่วนเวลาที่ผ่านมา): EMA มีความหน่วงน้อยกว่า SMA มาก เนื่องจากให้น้ำหนักกับราคาล่าสุดมากกว่า ดังนั้นจึงหมุนเร็วกว่า SMA เราสามารถเลือกช่วงเวลาที่แตกต่างกันได้ แต่ 12 และ 26 เป็นระยะเวลาที่ใช้กันทั่วไป และเราจะใช้ในตัวอย่างของเรา

  • MACD (Moving Average Convergence/Divergence): ตัวบ่งชี้ที่ดีในการกำหนดแนวโน้มทั่วไปของการรักษาความปลอดภัยใดๆ ใช้ความแตกต่างระหว่าง EMA ระยะสั้นและ EMA ระยะยาว ค่า MACD ที่เป็นบวกเป็นตัวบ่งชี้แนวโน้มตลาดที่เป็นบวก ค่า MACD ติดลบเป็นตัวบ่งชี้แนวโน้มของตลาดที่เป็นลบ

  • สัญญาณ MACD: เส้นสัญญาณ MACD คือ EMA ในกลุ่มเสี้ยวเวลาเฉพาะของเส้น MACD โดยทั่วไป ค่านี้ถูกกำหนดเป็น 9 ส่วนเวลา

  • MACD Histogram: นี่คือความแตกต่างระหว่างเส้น MACD และเส้นสัญญาณ MACD การข้ามรั้นเกิดขึ้นเมื่อเส้น MACD ข้ามเหนือเส้นสัญญาณ MACD การข้ามขาลงเกิดขึ้นเมื่อเส้น MACD ข้ามใต้เส้นสัญญาณ MACD เราจะเห็นความหมายที่แท้จริงในภายหลังเมื่อเราแสดงภาพข้อมูล

  • ประสิทธิภาพแบบเปิดเพื่อปิด: สำหรับการแบ่งเวลาแต่ละครั้ง ความแตกต่างระหว่างราคาปิดและราคาเปิดสำหรับช่วงเวลาหนึ่งๆ จะแสดงเป็นเปอร์เซ็นต์

  • High-Low Span: เปอร์เซ็นต์ความเบี่ยงเบนระหว่างราคาสูงสุดและราคาต่ำสุดภายในช่วงเวลาหนึ่ง สิ่งนี้แสดงความผันผวนภายในเสี้ยวเวลา

  • ประสิทธิภาพสัมบูรณ์ใน 3 ช่วงเวลาล่าสุด: ตัวบ่งชี้นี้ใช้ประสิทธิภาพของ 3 ช่วงเวลาล่าสุดเป็นค่าสัมบูรณ์ (วัดในสกุลเงินหลักที่เรากำหนดในค่าคงที่)

  • เปอร์เซ็นต์ของประสิทธิภาพสำหรับ 3 ช่วงเวลาล่าสุด: ตัวบ่งชี้นี้แสดงประสิทธิภาพของการแบ่งเวลา 3 ช่วงเวลาล่าสุดในรูปแบบของค่าสัมพัทธ์ (เปอร์เซ็นต์)

  • กระทิงหรือหมี: ถ้ากราฟแท่ง MACD เป็นบวก ให้เขียนว่า "bull" ถ้าแท่งกราฟแท่ง MACD เป็นค่าลบ ให้เขียนว่า "หมี"

  • แนวโน้มตลาดต่อเนื่อง: เพื่อระบุการเปลี่ยนแปลงจากตลาดกระทิงเป็นตลาดหมีและในทางกลับกัน คอลัมน์นี้คือ "จริง" หากแนวโน้มจากการแบ่งส่วนครั้งก่อนยังคงดำเนินต่อไป และ "เท็จ" หากแนวโน้มมีการเปลี่ยนแปลง

ต้องขอบคุณการดำเนินการเวกเตอร์อันทรงพลังของ 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())

ขั้นตอนที่ห้า: ใช้ข้อมูลในการตัดสินใจ

คำอธิบายภาพ

ประสิทธิภาพของ cryptocurrencies ต่างๆ ในช่วง 90 วันที่ผ่านมา


ขั้นตอนที่หก: แสดงภาพข้อมูลตลาด Crypto

ในขั้นตอนสุดท้าย เราต้องการแสดงภาพข้อมูลพื้นฐานที่สร้างขึ้นจนถึงตอนนี้ สำหรับการสร้างภาพ เราจะใช้ไลบรารี 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 พร้อมช่วงเวลาขาขึ้นและขาลงที่ถูกบีบอัด


คำอธิบายภาพ

แผนภูมิแท่งเทียนสกุลเงินดิจิทัลที่ซับซ้อน รวมถึงตัวบ่งชี้ประสิทธิภาพและแนวโน้มของตลาด


แผนภูมินี้ใช้แกน y สองแกนใน Plotly แกน 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