บทความนี้จะพาคุณเรียนรู้การเชื่อมต่อ 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)