คุณเคยอยากได้ข้อมูลราคา Bitcoin หรือเหรียญอื่น ๆ ย้อนหลังหลายเดือนเพื่อนำมาวิเคราะห์ไหม? บทความนี้จะสอนคุณใช้งาน Binance API เพื่อดึงข้อมูล Candlestick หรือที่เรียกกันว่า "กราฟเทียน" ได้อย่างง่ายดาย ไม่ต้องมีพื้นฐานการเขียนโค้ดมาก่อนก็ทำตามได้
Binance Historical Candle Data API คืออะไร?
API ย่อมาจาก Application Programming Interface ซึ่งเป็นช่องทางให้คอมพิวเตอร์ของเราสามารถ "พูดคุย" กับระบบของ Binance ได้ สมมติว่าคุณอยากรู้ว่าราคา Bitcoin เป็นเท่าไหร่เมื่อ 30 วันก่อน คุณก็ส่งคำขอไปที่ Binance แล้วเขาก็จะส่งข้อมูลกลับมาให้เรานั่นเอง
ข้อดีของการใช้ API คือ:
- ได้ข้อมูลที่แม่นยำ 100% เพราะมาจากแหล่งข้อมูลต้นทาง
- สามารถดึงข้อมูลจำนวนมากได้อย่างรวดเร็ว
- ไม่ต้องเปิดหน้าเว็บ Binance ทั้งวัน
- สามารถนำข้อมูลไปวิเคราะห์ต่อได้ตามต้องการ
เตรียมตัวก่อนเริ่มต้น
สิ่งที่คุณต้องมี:
- คอมพิวเตอร์ที่ติดตั้ง Python 3.7 ขึ้นไป
- โปรแกรม Text Editor (แนะนำ VS Code หรือ PyCharm)
- Internet Connection
หากยังไม่มี Python สามารถดาวน์โหลดได้ฟรีจาก python.org เลือกดาวน์โหลดเวอร์ชันล่าสุดแล้วติดตั้งตามขั้นตอนที่หน้าจอแนะนำ
หลังจากติดตั้งเสร็จ ให้เปิด Command Prompt (Windows) หรือ Terminal (Mac/Linux) แล้วพิมพ์คำสั่งติดตั้งไลบรารีที่จำเป็น:
pip install requests pandas
ดึงข้อมูล Candle จาก Binance อย่างง่าย
เริ่มต้นด้วยโค้ดพื้นฐานที่สุด เปิดโปรแกรม Text Editor แล้วพิมพ์โค้ดด้านล่างนี้:
import requests
import pandas as pd
กำหนดคู่เทรดที่ต้องการ (BTCUSDT = Bitcoin ต่อ USDT)
symbol = "BTCUSDT"
กำหนด Timeframe (1h = 1 ชั่วโมง, 1d = 1 วัน)
interval = "1h"
จำนวนข้อมูลที่ต้องการ (max 1000 ต่อครั้ง)
limit = 100
URL ของ Binance API
url = f"https://api.binance.com/api/v3/klines?symbol={symbol}&interval={interval}&limit={limit}"
ส่งคำขอไปยัง Binance
response = requests.get(url)
แปลงข้อมูลเป็น JSON
data = response.json()
แสดงผล 5 รายการแรก
print("ข้อมูล 5 รายการแรก:")
for candle in data[:5]:
print(f"เวลา: {candle[0]}")
print(f" เปิด: {candle[1]}")
print(f" สูง: {candle[2]}")
print(f" ต่ำ: {candle[3]}")
print(f" ปิด: {candle[4]}")
print()
เมื่อรันโค้ดนี้ คุณจะเห็นข้อมูลราคา Bitcoin ย้อนหลัง 100 ชั่วโมงล่าสุด แสดงราคาเปิด สูงสุด ต่ำสุด และราคาปิดของแต่ละชั่วโมง
บันทึกข้อมูลเป็นไฟล์ Excel
ต่อไปเราจะปรับปรุงโค้ดให้สามารถบันทึกข้อมูลเป็นไฟล์ CSV หรือ Excel เพื่อนำไปใช้วิเคราะห์ได้สะดวกขึ้น:
import requests
import pandas as pd
from datetime import datetime
ตั้งค่าพารามิเตอร์
symbol = "ETHUSDT" # Ethereum
interval = "1d" # ข้อมูลรายวัน
limit = 500 # ดึงข้อมูล 500 วันย้อนหลัง
เรียก API
url = f"https://api.binance.com/api/v3/klines?symbol={symbol}&interval={interval}&limit={limit}"
response = requests.get(url)
data = response.json()
สร้าง DataFrame จากข้อมูล
df = pd.DataFrame(data, columns=[
'เวลาเปิด', 'เปิด', 'สูง', 'ต่ำ', 'ปิด', 'Volume',
'เวลาปิด', 'Quote Asset Volume', 'Number of Trades',
'Taker Buy Base', 'Taker Buy Quote', 'Ignore'
])
แปลงเวลา Unix Timestamp เป็นวันที่ปกติ
df['เวลาเปิด'] = pd.to_datetime(df['เวลาเปิด'], unit='ms')
df['เวลาปิด'] = pd.to_datetime(df['เวลาปิด'], unit='ms')
เลือกเฉพาะคอลัมน์ที่ต้องการ
df_clean = df[['เวลาเปิด', 'เปิด', 'สูง', 'ต่ำ', 'ปิด', 'Volume', 'Number of Trades']]
แปลงข้อมูลเป็นตัวเลข
for col in ['เปิด', 'สูง', 'ต่ำ', 'ปิด', 'Volume']:
df_clean[col] = pd.to_numeric(df_clean[col])
บันทึกเป็นไฟล์ CSV
df_clean.to_csv('eth_price_data.csv', index=False, encoding='utf-8-sig')
print(f"บันทึกสำเร็จ! ได้ข้อมูล {len(df_clean)} รายการ")
print(df_clean.head(10))
หลังจากรันโค้ดนี้ คุณจะได้ไฟล์ชื่อ eth_price_data.csv ที่มีข้อมูลราคา Ethereum ย้อนหลัง 500 วัน พร้อมให้เปิดดูใน Excel ได้ทันที
Timeframe ที่ Binance รองรับ
Binance API รองรับ Timeframe หลายรูปแบบ คุณสามารถเปลี่ยนค่า interval ในโค้ดได้ตามต้องการ:
- 1m — ข้อมูลรายนาที (เหมาะสำหรับ Scalping)
- 5m — ข้อมูลทุก 5 นาที
- 15m — ข้อมูลทุก 15 นาที
- 1h — ข้อมูลรายชั่วโมง
- 4h — ข้อมูลทุก 4 ชั่วโมง
- 1d — ข้อมูลรายวัน
- 1w — ข้อมูลรายสัปดาห์
หากต้องการข้อมูลย้อนหลังมากกว่า 1000 รายการ สามารถดึงข้อมูลเป็นช่วง ๆ โดยใช้พารามิเตอร์ startTime และ endTime แทน limit
ดึงข้อมูลหลายเหรียญพร้อมกัน
หากคุณต้องการเปรียบเทียบข้อมูลหลายเหรียญพร้อมกัน สามารถใช้โค้ดด้านล่างนี้:
import requests
import pandas as pd
รายชื่อเหรียญที่ต้องการ
symbols = ["BTCUSDT", "ETHUSDT", "BNBUSDT", "SOLUSDT"]
interval = "1d"
limit = 100
all_data = {}
for symbol in symbols:
url = f"https://api.binance.com/api/v3/klines?symbol={symbol}&interval={interval}&limit={limit}"
response = requests.get(url)
data = response.json()
# ดึงเฉพาะราคาปิด
close_prices = [float(candle[4]) for candle in data]
timestamps = [pd.to_datetime(candle[0], unit='ms') for candle in data]
all_data[symbol] = close_prices
สร้าง DataFrame รวม
df = pd.DataFrame(all_data, index=timestamps)
df.index.name = 'วันที่'
บันทึกไฟล์
df.to_csv('multiple_coins.csv', encoding='utf-8-sig')
print("ข้อมูลทั้งหมด:")
print(df.tail())
โค้ดนี้จะดึงข้อมูลราคาปิดของ Bitcoin, Ethereum, BNB และ Solana ย้อนหลัง 100 วัน มาวางในตารางเดียวกัน สะดวกสำหรับการเปรียบเทียบผลตอบแทนของแต่ละเหรียญ
เหมาะกับใคร / ไม่เหมาะกับใคร
การใช้งาน Binance API เพื่อดึงข้อมูล Historical Candle มีจุดเด่นและข้อจำกัดที่ควรพิจารณา:
| เหมาะกับ | ไม่เหมาะกับ |
|---|---|
| นักวิเคราะห์ทางเทคนิคที่ต้องการข้อมูลย้อนหลังเพื่อทดสอบกลยุทธ์ | ผู้ที่ต้องการทำเทรดอัตโนมัติแบบเต็มรูปแบบ (ต้องใช้ API Key ของ Binance) |
| นักพัฒนาที่กำลังสร้างโปรแกรมวิเคราะห์หรือ Bot เทรด | ผู้ที่ไม่มีพื้นฐานการใช้งานคอมพิวเตอร์เลย |
| นักศึกษาที่ศึกษาเกี่ยวกับ Cryptocurrency และ Data Science | ผู้ที่ต้องการข้อมูล Real-time (ต้องใช้ WebSocket API แทน) |
| ผู้ที่ต้องการ Export ข้อมูลไปใช้ใน Excel, Python หรือเครื่องมืออื่น | ผู้ที่ต้องการดึงข้อมูลที่ละเกิน 1000 รายการต่อครั้ง (ต้องทำ Loop เอง) |
ราคาและ ROI
Binance Historical API นั้นฟรีสำหรับการใช้งานทั่วไป (Rate Limit: 1200 requests/minute) แต่หากคุณต้องการนำข้อมูลไปประมวลผลด้วย AI เพื่อวิเคราะห์แนวโน้มหรือสร้างสัญญาณเทรด คุณอาจต้องใช้บริการ AI API เพิ่มเติม
ตารางเปรียบเทียบราคา AI API ยอดนิยม 2026:
| โมเดล | ราคา/ล้าน Token | เหมาะกับงาน |
|---|---|---|
| DeepSeek V3.2 | $0.42 | วิเคราะห์ข้อมูลทั่วไป ประหยัดมาก |
| Gemini 2.5 Flash | $2.50 | งานที่ต้องการความเร็วสูง |
| GPT-4.1 | $8.00 | งานวิเคราะห์เชิงลึก |
| Claude Sonnet 4.5 | $15.00 | งานเขียนโค้ดและการวิเคราะห์ขั้นสูง |
ทำไมต้องเลือก HolySheep
หากคุณวางแผนจะใช้ AI ในการวิเคราะห์ข้อมูลที่ดึงมาจาก Binance สมัครที่นี่ HolySheep AI เพราะมีข้อได้เปรียบด้านราคาที่เหนือกว่า:
- อัตราแลกเปลี่ยนพิเศษ: ¥1 = $1 ประหยัดกว่า 85% เมื่อเทียบกับผู้ให้บริการอื่นที่คิดอัตราปกติ
- ความเร็ว: Response Time ต่ำกว่า 50ms เหมาะสำหรับงานที่ต้องการประมวลผลเร็ว
- รองรับหลายโมเดล: เลือกใช้ได้ตามความเหมาะสม ตั้งแต่ DeepSeek V3.2 ราคาถูกสุด ($0.42/MTok) ไปจนถึง Claude Sonnet 4.5 สำหรับงานวิเคราะห์ขั้นสูง
- ชำระเงินง่าย: รองรับ WeChat Pay และ Alipay สำหรับผู้ใช้ในไทยและเอเชีย
- เครดิตฟรี: เมื่อสมัครสมาชิกใหม่จะได้รับเครดิตทดลองใช้งานฟรี
ข้อมูลที่ได้จาก Binance Candle API
แต่ละแท่งเทียน (Candle) ที่ได้จาก API จะประกอบด้วยข้อมูลสำคัญดังนี้:
- Open Time: เวลาที่แท่งเทียนเปิด
- Open: ราคาเปิด
- High: ราคาสูงสุดในช่วงเวลานั้น
- Low: ราคาต่ำสุดในช่วงเวลานั้น
- Close: ราคาปิด
- Volume: ปริมาณการซื้อขาย
- Close Time: เวลาที่แท่งเทียนปิด
- Quote Asset Volume: มูลค่าการซื้อขายเป็น USDT
- Number of Trades: จำนวนคำสั่งซื้อขายทั้งหมด
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
1. ข้อผิดพลาด: ConnectionError หรือ Timeout Error
# วิธีแก้ไข: เพิ่ม Try-Except และ Retry Logic
import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def fetch_with_retry(url, max_retries=3):
session = requests.Session()
retries = Retry(total=max_retries, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
session.mount('https://', HTTPAdapter(max_retries=retries))
try:
response = session.get(url, timeout=10)
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
print(f"เกิดข้อผิดพลาด: {e}")
return None
ใช้งาน
data = fetch_with_retry(url)
if data:
print("ดึงข้อมูลสำเร็จ!")
2. ข้อผิดพลาด: Rate Limit (429 Too Many Requests)
# วิธีแก้ไข: เพิ่ม Delay ระหว่าง Request
import time
def fetch_multiple_data(urls, delay=0.5):
all_data = []
for i, url in enumerate(urls):
response = requests.get(url)
if response.status_code == 200:
all_data.append(response.json())
elif response.status_code == 429:
print(f"รอเนื่องจากถูก Rate Limit... (รอ {delay} วินาที)")
time.sleep(delay)
response = requests.get(url)
all_data.append(response.json())
else:
print(f"ข้อผิดพลาด: Status {response.status_code}")
# รอก่อนดึงข้อมูลถัดไป
if i < len(urls) - 1:
time.sleep(delay)
return all_data
ดึงข้อมูล 3 เหรียญพร้อม Delay
urls = [
"https://api.binance.com/api/v3/klines?symbol=BTCUSDT&interval=1d&limit=100",
"https://api.binance.com/api/v3/klines?symbol=ETHUSDT&interval=1d&limit=100",
"https://api.binance.com/api/v3/klines?symbol=SOLUSDT&interval=1d&limit=100"
]
data = fetch_multiple_data(urls)
3. ข้อผิดพลาด: Invalid JSON Response
# วิธีแก้ไข: ตรวจสอบ Response ก่อน Parse
response = requests.get(url)
print(f"Status Code: {response.status_code}")
print(f"Content: {response.text[:200]}") # ดู 200 ตัวอักษรแรก
if response.status_code == 200:
try:
data = response.json()
print(f"ได้ข้อมูล {len(data)} รายการ")
except ValueError as e:
print(f"JSON Parse Error: {e}")
else:
print(f"Request ล้มเหลว: {response.text}")
4. ข้อผิดพลาด: Symbol Not Found
# วิธีแก้ไข: ตรวจสอบ Symbol ก่อนใช้งาน
def get_valid_symbol(symbol):
# ลบช่องว่างและ uppercase
symbol = symbol.replace(" ", "").upper()
# เพิ่ม USDT ถ้ายังไม่มี
if not symbol.endswith("USDT"):
symbol = symbol + "USDT"
return symbol
ตัวอย่า�