ดึงราคาเหรียญในอดีตจาก Binance ด้วย Python

NUTHDANAI WANGPRATHAM
QUANT I LOVE U
Published in
2 min readMay 10, 2022

ในหลายครั้งเราต้องการดึงข้อมูลราคาของ Crypto เพื่อมาลองสร้างโมเดลเล่นกันจะมีตลาดไหนดีไปกว่า binance ดังนั้นวันนี้เราจะลองมาดึงราคาเหรียญต่าง ๆ จาก binance เพื่อไว้ทำโมเดลเล่นกันนะครับ สำหรับใครที่สนใจศึกษา python-binance api เบื้องต้นคลิ๊กที่นี้เลยนะครับ หรือถ้าอยากรู้วิธีการดึงราคาเหรียญแบบ Real Time ก็คลิ๊กที่นี้เลยนะครับ

มาเริ่มกันเลย

ก่อนอื่นเราต้อง import binance api แล้วใส่ api key และ secret key สำหรับใครไม่ทราบว่าเอา key binance ยังไงคลิ๊กเลย

from binance.client import Client #import binance apiapi_key =  
api_secret =
client = Client(api_key, api_secret)

เราก็สามารถดึงข้อมูลด้วย code เพียงบรรทัดเดียวแต่เราจะทำให้ดูง่ายขึ้นโดยแยกเหรียญที่ต้องการดึงข้อมูล และดึงมาเป็นรายอะไร รวมถึง start date ข้อมูล

symbol = "BTCUSDT" interval='1h' 
start_date = "1 Jan,2019"
klines = client.get_historical_klines(symbol, interval,start_date)

สำหรับตัวแปรคาบเวลาดังนี้เลยนะครับ

1MINUTE = ‘1m’
3MINUTE = ‘3m’
5MINUTE = ‘5m’
15MINUTE = ‘15m’
30MINUTE = ‘30m’
1HOUR = ‘1h’
2HOUR = ‘2h’
4HOUR = ‘4h’
6HOUR = ‘6h’
8HOUR = ‘8h’
12HOUR = ‘12h’
1DAY = ‘1d’
3DAY = ‘3d’
1WEEK = ‘1w’
1MONTH = ‘1M’

หลังจากนั้นเราจะแปลข้อมูลให้อยู่ในรูปแบบของ data frame เพื่อให้ง่ายต่อการนำไปใช้

data = pd.DataFrame(klines) #สร้างข้อมูลให้อยู่ในรูปแบบ data frame

แล้วก็ตั้งชื่อคอลัมน์

data.columns = ['datetime', 'open', 'high', 'low', 'close', 'volume','close_time', 'qav', 'num_trades','taker_base_vol', 'taker_quote_vol', 'ignore']

จัดรูปแบบเวลานิดนึง

data.index = [dt.datetime.fromtimestamp(x/1000.0) for x in data.close_time]data.head(5)

ก็จะได้ข้อมูลออกมาดังนี้

เขียน loop เพื่อดึงหลายๆเหรียญ

ที่นี้เราจะมาเขียน loop เพื่อดึงข้อมูลหลายๆเหรียญกัน

ก่อนอื่นสร้าง list ของเหรียญที่เราอยากจะดึงขึ้นมา

coinlist = ["ETHUSDT","BNBUSDT", "SOLUSDT", "FTMUSDT","EGLDUSDT", "MATICUSDT", "ONEUSDT" ,"AVAXUSDT", "LUNAUSDT"]

หลังจากนั้นสร้าง dataframe มารับค่า

df_coin = None

ระบุความถี่ของข้อมูลที่ต้องการดึง พร้อมกับวันเริ่มต้น พร้อมกับสร้าง dummy สำหรับ loop

interval = '1h' #ระบุความถี่ของข้อมูลที่ต้องการดึงstart_date = "1 Jan,2019"n = 0 

หลังจากนั้นก็สร้าง loop

สังเกต code ในส่วนนี้ให้ดีผมต้องการแปลงข้อมูลให้อยู่ในรูปแบบ long format ไม่เขียนก็ได้แต่ต้องต่อข้อมูแบบ merg

data = pd.melt(data , value_vars=[ 'open', 'high', 'low', 'close', 'volume','close_time', 'qav', 'num_trades','taker_base_vol', 'taker_quote_vol', 'ignore'], ignore_index=False)

ง่ายๆแค่นี้เราก็จะมีข้อมูลราคาเหรียญเพื่อไปสร้างโมเดลกันได้แล้ว

สำหรับใครที่ต้องการลองดูตัวอย่างการใช้ API สามารถคลิ๊กตามลิงค์ด้านล่างเลย

ดึงราคาเหรียญปัจจุบัน

ดึงราคาเหรียญในอดีต

ดึงพอร์ต

order

Note book

https://colab.research.google.com/drive/1xPsEHtGMVESUVBdqJO5mjoEJE0kaUYhK?usp=sharing

--

--

NUTHDANAI WANGPRATHAM
QUANT I LOVE U

I am a learner and have a multipotential life. You can contact me at nutdnuy@gmail.com