เรียนรู้วิธีการใช้ Python กับ Coinbase ในบทความเดียว
พื้นที่ 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
สรุป
สรุป
ลิงค์ต้นฉบับ


