สวัสดีครับ ผมเป็นนักพัฒนาที่ทำงานเกี่ยวกับระบบเทรดอัตโนมัติมาหลายปี วันนี้จะมาแบ่งปันวิธีการดึงข้อมูล Funding Rate และ Mark Price จาก OKX ด้วย Python สำหรับคนที่เพิ่งเริ่มต้นเลย ไม่ต้องกังวลว่าจะยากเกินไป เพราะผมจะอธิบายทุกขั้นตอนแบบละเอียด

Funding Rate กับ Mark Price คืออะไร

ก่อนจะเข้าสู่โค้ด มาทำความเข้าใจคำศัพท์ที่ต้องรู้กันก่อนนะครับ

ข้อมูลทั้งสองอย่างนี้สำคัญมากสำหรับคนที่เทรด Futures เพราะช่วยให้เข้าใจต้นทุนการถือสัญญาระยะยาวและระดับราคาที่อาจถูก Liquidate

เตรียมเครื่องมือก่อนเริ่มต้น

สิ่งที่ต้องมี:

ขั้นตอนการติดตั้ง Library ที่ต้องใช้:

pip install requests
pip install pandas
pip install python-dotenv

ดึงข้อมูล Funding Rate จาก OKX

OKX มี API ฟรีที่ใช้ได้โดยไม่ต้องมี API Key สำหรับอ่านข้อมูล มาเริ่มเขียนโค้ดกันเลยครับ

import requests
import json
from datetime import datetime

def get_funding_rate(inst_id="BTC-USDT-SWAP"):
    """
    ดึงข้อมูล Funding Rate ปัจจุบันของสัญญา Perpetual
    inst_id: รหัสสัญญา เช่น BTC-USDT-SWAP, ETH-USDT-SWAP
    """
    url = "https://www.okx.com/api/v5/market/funding-rate"
    
    params = {
        "instId": inst_id
    }
    
    try:
        response = requests.get(url, params=params)
        data = response.json()
        
        if data["code"] == "0":
            funding_info = data["data"][0]
            
            # แปลงเวลา timestamp
            next_funding_time = int(funding_info["nextFundingTime"])
            funding_time = datetime.fromtimestamp(next_funding_time / 1000)
            
            print(f"สัญญา: {inst_id}")
            print(f"Funding Rate ปัจจุบัน: {float(funding_info['fundingRate']) * 100:.4f}%")
            print(f"Funding Rate ล่าสุด: {float(funding_info['realizedRate']) * 100:.4f}%")
            print(f"รอบ Funding ถัดไป: {funding_time.strftime('%Y-%m-%d %H:%M:%S')}")
            
            return funding_info
        else:
            print(f"เกิดข้อผิดพลาด: {data['msg']}")
            return None
            
    except requests.exceptions.RequestException as e:
        print(f"เชื่อมต่อไม่ได้: {e}")
        return None

ทดสอบการใช้งาน

result = get_funding_rate("BTC-USDT-SWAP")

ดึงข้อมูล Mark Price จาก OKX

ต่อไปมาดึงข้อมูล Mark Price กันครับ จะเห็นว่าโครงสร้างคล้ายกันมาก

import requests
import json

def get_mark_price(inst_id="BTC-USDT-SWAP"):
    """
    ดึงข้อมูล Mark Price ของสัญญา Perpetual
    Mark Price ใช้สำหรับคำนวณ unrealized PnL และ Liquidation
    """
    url = "https://www.okx.com/api/v5/market/mark-price"
    
    params = {
        "instId": inst_id,
        "uly": inst_id.split("-")[0] + "-" + inst_id.split("-")[1]  # สร้าง underlying
    }
    
    try:
        response = requests.get(url, params=params)
        data = response.json()
        
        if data["code"] == "0":
            mark_info = data["data"][0]
            
            print(f"สัญญา: {inst_id}")
            print(f"Mark Price: ${float(mark_info['markPx']):,.2f}")
            
            return mark_info
        else:
            print(f"เกิดข้อผิดพลาด: {data['msg']}")
            return None
            
    except requests.exceptions.RequestException as e:
        print(f"เชื่อมต่อไม่ได้: {e}")
        return None

ทดสอบการใช้งาน

mark_data = get_mark_price("BTC-USDT-SWAP")

ดึงข้อมูลหลายสัญญาพร้อมกัน

ถ้าต้องการเปรียบเทียบ Funding Rate ของหลายเหรียญ ใช้ฟังก์ชันนี้ครับ

import requests
import pandas as pd
from datetime import datetime

def get_all_funding_rates():
    """
    ดึงข้อมูล Funding Rate ของสัญญา Perpetual ทั้งหมด
    """
    url = "https://www.okx.com/api/v5/market/funding-rate"
    
    # รายชื่อสัญญาที่นิยม
    symbols = [
        "BTC-USDT-SWAP",
        "ETH-USDT-SWAP", 
        "SOL-USDT-SWAP",
        "BNB-USDT-SWAP",
        "XRP-USDT-SWAP",
        "DOGE-USDT-SWAP",
        "ADA-USDT-SWAP"
    ]
    
    results = []
    
    for symbol in symbols:
        params = {"instId": symbol}
        
        try:
            response = requests.get(url, params=params, timeout=5)
            data = response.json()
            
            if data["code"] == "0" and len(data["data"]) > 0:
                info = data["data"][0]
                results.append({
                    "สัญญา": symbol,
                    "Funding Rate (%)": float(info['fundingRate']) * 100,
                    "รอบถัดไป": datetime.fromtimestamp(
                        int(info["nextFundingTime"]) / 1000
                    ).strftime('%H:%M')
                })
        except:
            continue
    
    df = pd.DataFrame(results)
    df = df.sort_values("Funding Rate (%)", ascending=False)
    print(df.to_string(index=False))
    
    return df

แสดงตารางเปรียบเทียบ

df = get_all_funding_rates()

สร้างระบบเตือน Funding Rate

จากประสบการณ์ของผม การติดตาม Funding Rate สูงๆ ช่วยให้หลีกเลี่ยงการถือสัญญาในช่วงที่ต้นทุนสูงมากได้ นี่คือตัวอย่างระบบแจ้งเตือนอย่างง่าย

import requests
from datetime import datetime

class FundingRateAlert:
    def __init__(self, threshold=0.05):
        """
        threshold: ระดับ Funding Rate ที่ต้องการแจ้งเตือน (%)
        """
        self.threshold = threshold
    
    def check_funding(self, inst_id="BTC-USDT-SWAP"):
        url = "https://www.okx.com/api/v5/market/funding-rate"
        
        response = requests.get(url, params={"instId": inst_id})
        data = response.json()
        
        if data["code"] == "0":
            info = data["data"][0]
            funding_rate = float(info['fundingRate']) * 100
            
            print(f"[{datetime.now().strftime('%H:%M:%S')}] "
                  f"{inst_id}: {funding_rate:.4f}%")
            
            if abs(funding_rate) > self.threshold:
                status = "สูง" if funding_rate > 0 else "ต่ำ"
                print(f"⚠️ Funding Rate {status}กว่าปกติ! "
                      f"ควรระวังการถือสัญญา")
            
            return funding_rate
        return None

ใช้งาน

alert = FundingRateAlert(threshold=0.05) alert.check_funding("BTC-USDT-SWAP") alert.check_funding("ETH-USDT-SWAP")

ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข

กรณีที่ 1: เกิดข้อผิดพลาด "Connection timeout"

สาเหตุ: เซิร์ฟเวอร์ OKX ปฏิเสธการเชื่อมต่อ หรือเน็ตเวิร์กบล็อก request

# วิธีแก้ไข: เพิ่ม timeout และ headers
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}

response = requests.get(
    url,
    params=params,
    headers=headers,
    timeout=30  # เพิ่ม timeout เป็น 30 วินาที
)

หรือใช้ try-except จัดการ error

try: response = requests.get(url, params=params, timeout=30) except requests.exceptions.Timeout: print("เชื่อมต่อช้าเกินไป ลองอีกครั้ง") except requests.exceptions.ConnectionError: print("ไม่สามารถเชื่อมต่อได้ ตรวจสอบอินเทอร์เน็ต")

กรณีที่ 2: ข้อมูล instId ไม่ถูกต้อง

สาเหตุ: รหัสสัญญาต้องเป็นไปตามรูปแบบที่ OKX กำหนด

# รูปแบบที่ถูกต้อง:

BTC-USDT-SWAP (Perpetual Futures)

BTC-USDT-221225 (Delivery Futures - มีวันหมดอายุ)

วิธีแก้ไข: ตรวจสอบรายชื่อสัญญาที่มีจาก API

def get_valid_instruments(): url = "https://www.okx.com/api/v5/public/instruments" params = {"instType": "SWAP"} response = requests.get(url, params=params) data = response.json() if data["code"] == "0": instruments = [item["instId"] for item in data["data"]] print(f"พบ {len(instruments)} สัญญา SWAP") return instruments

ดึงรายชื่อสัญญาที่ใช้ได้

valid_symbols = get_valid_instruments()

กรณีที่ 3: ข้อมูล Mark Price ไม่ตรงกับราคาจริง

สาเหตุ: Mark Price คำนวณจาก Spot Price + Premium ไม่ใช่ Last Trade Price

# วิธีแก้ไข: ใช้ both Mark Price และ Last Price ประกอบกัน
def get_full_price_info(inst_id="BTC-USDT-SWAP"):
    # ดึง Mark Price
    mark_url = "https://www.okx.com/api/v5/market/mark-price"
    mark_resp = requests.get(mark_url, params={"instId": inst_id})
    mark_price = float(mark_resp.json()["data"][0]["markPx"])
    
    # ดึง Last Price (ราคาซื้อขายล่าสุด)
    ticker_url = "https://www.okx.com/api/v5/market/ticker"
    ticker_resp = requests.get(ticker_url, params={"instId": inst_id})
    last_price = float(ticker_resp.json()["data"][0]["last"])
    
    # คำนวณ Premium
    premium = ((mark_price - last_price) / last_price) * 100
    
    print(f"Mark Price: ${mark_price:,.2f}")
    print(f"Last Price: ${last_price:,.2f}")
    print(f"Premium: {premium:.4f}%")
    
    return {"mark": mark_price, "last": last_price, "premium": premium}

info = get_full_price_info("BTC-USDT-SWAP")

ประยุกต์ใช้กับ AI Trading Bot

สำหรับคนที่อยากนำข้อมูลเหล่านี้ไปใช้กับ AI Trading Bot ต้องมี API Key จาก HolySheep AI เพื่อเรียกใช้ AI วิเคราะห์ข้อมูล ผมใช้ HolySheep AI มาสักพักแล้ว ชอบตรงที่ราคาถูกมากและเชื่อมต่อได้เร็วมาก สมัครที่นี่ รับเครดิตฟรีเมื่อลงทะเบียน

import requests

ใช้ HolySheep AI วิเคราะห์ Funding Rate

def analyze_with_ai(funding_data): """ ส่งข้อมูล Funding Rate ไปให้ AI วิเคราะห์ """ base_url = "https://api.holysheep.ai/v1" headers = { "Authorization": f"Bearer YOUR_HOLYSHEEP_API_KEY", "Content-Type": "application/json" } payload = { "model": "gpt-4.1", "messages": [ { "role": "system", "content": "คุณเป็นผู้เชี่ยวชาญด้าน Crypto Trading" }, { "role": "user", "content": f"วิเคราะห์ Funding Rate ต่อไปนี้: {funding_data}" } ], "temperature": 0.3 } response = requests.post( f"{base_url}/chat/completions", headers=headers, json=payload ) return response.json()

ตัวอย่างการใช้งาน

funding_info = {"BTC": "0.0150%", "ETH": "-0.0025%"} result = analyze_with_ai(funding_info) print(result["choices"][0]["message"]["content"])

เหมาะกับใคร / ไม่เหมาะกับใคร

กลุ่มเป้าหมายรายละเอียด
✓ นักเทรด Futures มือใหม่ต้องการเข้าใจต้นทุนการถือสัญญาและหลีกเลี่ยง Liquidation
✓ นักพัฒนา Trading Botต้องการข้อมูล Real-time สำหรับระบบอัตโนมัติ
✓ นักลงทุนระยะยาวต้องการประเมินค่าธรรมเนียมการถือสัญญา
✗ คนที่ไม่เคยใช้ Pythonควรเรียนพื้นฐาน Python ก่อน
✗ คนที่ต้องการเทรดโดยไม่มีความรู้API สำหรับดูข้อมูลเท่านั้น ไม่ใช่คำแนะนำเทรด

ราคาและ ROI

บริการราคาต่อล้าน Tokenหมายเหตุ
GPT-4.1 (OpenAI)$8.00ราคามาตรฐาน
Claude Sonnet 4.5 (Anthropic)$15.00ราคาสูงที่สุด
Gemini 2.5 Flash (Google)$2.50ตัวเลือกคุ้มค่า
DeepSeek V3.2$0.42ถูกที่สุดในกลุ่ม
HolySheep AI¥1 = $1 (ประหยัด 85%+)ราคาพิเศษสำหรับผู้ใช้ในจีน

ทำไมต้องเลือก HolySheep

สรุป

วันนี้เราได้เรียนรู้วิธีการดึงข้อมูล Funding Rate และ Mark Price จาก OKX API ด้วย Python พร้อมวิธีจัดการข้อผิดพลาดที่พบบ่อย ข้อมูลเหล่านี้จะช่วยให้เข้าใจต้นทุนการถือสัญญา Futures และหลีกเลี่ยงการถูก Liquidation อย่างไม่คาดคิด

ถ้าต้องการนำข้อมูลไปวิเคราะห์ด้วย AI หรือสร้างระบบเทรดอัตโนมัติที่ซับซ้อน ผมแนะนำให้ลองใช้ HolySheep AI ดูครับ ราคาถูกและเชื่อมต่อเร็วมาก ลองสมัครดูได้เลย

โค้ดทั้งหมดในบทความนี้สามารถนำไปรันได้ทันที แต่อย่าลืมตรวจสอบ OKX API Documentation ล่าสุดก่อนใช้งานจริงนะครับ เพราะ API อาจมีการเปลี่ยนแปลง

👉 สมัคร HolySheep AI — รับเครดิตฟรีเมื่อลงทะเบียน