บทความนี้จะพาคุณเรียนรู้การเชื่อมต่อ Binance API กับ Python เพื่อส่งคำสั่งซื้อขายอัตโนมัติ ไม่ว่าจะเป็นคำสั่งแบบตลาด (Market Order) คำสั่งแบบจำกัดราคา (Limit Order) หรือคำสั่งแบบมีเงื่อนไข (Conditional Order) พร้อมตัวอย่างโค้ดที่พร้อมใช้งานจริง
ทำไมต้องใช้ Binance API สำหรับการเทรด
การใช้งาน Binance API ช่วยให้คุณสามารถส่งคำสั่งซื้อขายได้อย่างรวดเร็วและแม่นยำ รองรับการทำ algorithmic trading โดยไม่ต้องนั่งเฝ้าหน้าจอตลอดเวลา
ขั้นตอนที่ 1: สร้าง API Key บน Binance
ก่อนเริ่มเขียนโค้ด คุณต้องมี API Key จาก Binance ก่อน ทำตามขั้นตอนด้านล่าง:
1. เข้าสู่ระบบบัญชี Binance ของคุณ
2. ไปที่หน้า API Management (จะอยู่ในส่วน User Center)
3. ตั้งชื่อ API Key และกดสร้าง
4. จะได้รับ API Key และ Secret Key — **เก็บไว้อย่างปลอดภัย ห้ามแชร์กับใคร**
5. เปิดสิทธิ์ "Enable Spot & Margin Trading" สำหรับการส่งคำสั่งซื้อขาย
> **หมายเหตุด้านความปลอดภัย:** คุณสามารถตั้งค่า IP Whitelist เพื่อจำกัดการเข้าถึง API ได้เฉพาะ IP ที่คุณไว้วางใจเท่านั้น
ขั้นตอนที่ 2: ติดตั้งไลบรารีและเตรียมสภาพแวดล้อม
ติดตั้งไลบรารี python-binance ซึ่งเป็นไลบรารียอดนิยมสำหรับเชื่อมต่อกับ Binance API:
pip install python-binance
pip install python-dotenv
สร้างไฟล์
.env เพื่อเก็บ API Key อย่างปลอดภัย:
BINANCE_API_KEY=your_api_key_here
BINANCE_SECRET_KEY=your_secret_key_here
ขั้นตอนที่ 3: เชื่อมต่อ Binance API และส่งคำสั่งซื้อขาย
3.1 คำสั่งแบบตลาด (Market Order)
คำสั่งแบบตลาดจะซื้อหรือขายทันทีที่ราคาตลาดปัจจุบัน เหมาะสำหรับการเทรดที่ต้องการความรวดเร็ว:
import os
from binance.client import Client
from dotenv import load_dotenv
load_dotenv()
เชื่อมต่อกับ Binance
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
client = Client(api_key, api_secret)
ดูยอดคงเหลือ
account = client.get_account()
for balance in account['balances']:
if float(balance['free']) > 0:
print(f"{balance['asset']}: {balance['free']}")
ส่งคำสั่งซื้อ Market Order (ซื้อ USDT ด้วยเงิน 100 USDT)
order = client.order_market_buy(
symbol='BTCUSDT',
quantity=0.001
)
print(f"สั่งซื้อสำเร็จ: {order['orderId']}")
print(f"ราคาเฉลี่ย: {order['cummulativeQuoteQty']}")
3.2 คำสั่งแบบจำกัดราคา (Limit Order)
คำสั่งแบบจำกัดราคาจะซื้อหรือขายเมื่อราคาถึงระดับที่คุณกำหนด:
from binance.client import Client
ส่งคำสั่งขาย Limit Order (ขาย BTC ที่ราคา 50000 USDT)
sell_order = client.order_limit_sell(
symbol='BTCUSDT',
quantity=0.001,
price='50000.00'
)
print(f"สั่งขาย Limit Order สำเร็จ: {sell_order['orderId']}")
print(f"สถานะ: {sell_order['status']}")
ดูรายละเอียดคำสั่ง
print(f"ราคาที่ตั้ง: {sell_order['price']}")
print(f"ปริมาณ: {sell_order['origQty']}")
3.3 คำสั่งแบบมีเงื่อนไข (Stop-Limit Order)
คำสั่งแบบมีเงื่อนไขจะทำงานเมื่อราคาถึงเงื่อนไขที่กำหนด เช่น Stop-Loss หรือ Take-Profit:
# ส่งคำสั่ง Stop-Limit Order
เมื่อราคา BTC ลงไปต่ำกว่า 45000 USDT ให้ขายทันที
stop_order = client.order_stop_loss_limit(
symbol='BTCUSDT',
side='SELL',
quantity=0.001,
price='44800.00', # ราคาที่ต้องการขาย
stopPrice='45000.00' # ราคาที่ทำให้คำสั่งทำงาน
)
print(f"สั่ง Stop-Loss สำเร็จ: {stop_order['orderId']}")
print(f"Stop Price: {stop_order['stopPrice']}")
ขั้นตอนที่ 4: จัดการและยกเลิกคำสั่ง
# ดูรายการคำสั่งที่กำลังรอ
open_orders = client.get_open_orders(symbol='BTCUSDT')
print(f"มีคำสั่งรอ {len(open_orders)} รายการ")
for order in open_orders:
print(f" Order #{order['orderId']}: {order['side']} {order['origQty']} @ {order['price']}")
ยกเลิกคำสั่งเฉพาะ
if open_orders:
cancel_result = client.cancel_order(
symbol='BTCUSDT',
orderId=open_orders[0]['orderId']
)
print(f"ยกเลิกสำเร็จ: {cancel_result['orderId']}")
ยกเลิกทุกคำสั่ง
cancel_all = client.cancel_all_open_orders(symbol='BTCUSDT')
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
กรณีที่ 1: BinanceAPIException - Invalid API Key
**อาการ:** ได้รับข้อผิดพลาด
BinanceAPIException: API-key invalid
**สาเหตุ:** API Key หรือ Secret Key ไม่ถูกต้อง
**วิธีแก้ไข:**
import os
from binance.client import Client
ตรวจสอบว่า Key ถูกโหลดหรือไม่
api_key = os.getenv('BINANCE_API_KEY')
api_secret = os.getenv('BINANCE_SECRET_KEY')
if not api_key or not api_secret:
print("กรุณตั้งค่า API Key ในไฟล์ .env ก่อน")
print("สร้างไฟล์ .env พร้อม BINANCE_API_KEY และ BINANCE_SECRET_KEY")
else:
client = Client(api_key, api_secret)
# ตรวจสอบว่าเชื่อมต่อได้หรือไม่
try:
account = client.get_account()
print("เชื่อมต่อสำเร็จ!")
except Exception as e:
print(f"เกิดข้อผิดพลาด: {e}")
กรณีที่ 2: Insufficient Balance
**อาการ:** ได้รับข้อผิดพลาด
BinanceAPIException: Insufficient balance
**สาเหตุ:** ยอดเงินในบัญชีไม่เพียงพอสำหรับคำสั่งซื้อขาย
**วิธีแก้ไข:**
def check_balance(client, asset, required_amount):
"""ตรวจสอบยอดคงเหลือก่อนส่งคำสั่ง"""
balance = client.get_asset_balance(asset=asset)
free_balance = float(balance['free'])
print(f"ยอด {asset} ที่ใช้ได้: {free_balance}")
if free_balance < required_amount:
print(f"ยอดไม่เพียงพอ! ต้องการ {required_amount} {asset}")
return False
return True
ก่อนส่งคำสั่ง ตรวจสอบยอดก่อนเสมอ
if check_balance(client, 'USDT', 100):
# ส่งคำสั่งซื้อได้เลย
print("พร้อมส่งคำสั่ง")
else:
print("กรุณเติมเงินก่อน")
กรณีที่ 3: Precision Error หรือ Minimum Notional
**อาการ:** ได้รับข้อผิดพลาด
BinanceAPIException: Precision is over the maximum defined for this asset
**สาเหตุ:** จำนวนเหรียญหรือราคามีทศนิยมเกินกว่าที่ Binance กำหนด
**วิธีแก้ไข:**
from decimal import Decimal, ROUND_DOWN
def adjust_quantity(symbol, quantity, client):
"""ปรับจำนวนให้ตรงกับ precision ที่ Binance กำหนด"""
# ดูข้อมูล symbol info
info = client.get_symbol_info(symbol)
# หา stepSize (ขั้นต่ำของการสั่งซื้อ)
step_size = 0.0
for f in info['filters']:
if f['filterType'] == 'LOT_SIZE':
step_size = float(f['stepSize'])
break
# ปรับจำนวนให้ลงตัวกับ stepSize
adjusted = float(Decimal(str(quantity)).quantize(
Decimal(str(step_size)), rounding=ROUND_DOWN
))
print(f"จำนวนเดิม: {quantity}, จำนวนที่ปรับแล้ว: {adjusted}")
return adjusted
ปรับจำนวนก่อนส่งคำสั่ง
adjusted_qty = adjust_quantity('BTCUSDT', 0.00123456, client)
order = client.order_market_buy(symbol='BTCUSDT', quantity=adjusted_qty)
เคล็ดลับเพิ่มเติมสำหรับการใช้งาน
- **ใช้ Testnet ก่อน:** Binance มี Testnet สำหรับทดสอบโค้ดโดยไม่ต้องใช้เงินจริง
- **ตั้งค่า Rate Limit:** Binance จำกัดจำนวนคำสั่งต่อนาที ควรเพิ่ม delay ในโค้ด
- **จัดการข้อผิดพลาดอย่างครบถ้วน:** ใช้ try-except เพื่อรับมือกับปัญหาต่างๆ
- **เก็บ Secret Key อย่างปลอดภัย:** ไม่ควรฝัง Key ในโค้ดโดยตรง ใช้ .env แทน
---
หากคุณสนใจพัฒนา AI Trading Bot ที่ใช้ Machine Learning หรือ Large Language Models เพื่อวิเคราะห์ตลาดและส่งคำสั่งซื้อขายอัตโนมัติ สามารถใช้ [HolySheep AI](https://www.holysheep.ai/register) ซึ่งมีโมเดล AI ราคาประหยัดสำหรับนักพัฒนา
👉 [สมัคร HolySheep AI — รับเครดิตฟรีเมื่อลงทะเบียน](https://www.holysheep.ai/register)
แหล่งข้อมูลที่เกี่ยวข้อง
บทความที่เกี่ยวข้อง