สวัสดีครับ ผมเป็นนักพัฒนาที่ทำงานเกี่ยวกับระบบเทรดอัตโนมัติมาหลายปี วันนี้จะมาแบ่งปันวิธีการดึงข้อมูล Funding Rate และ Mark Price จาก OKX ด้วย Python สำหรับคนที่เพิ่งเริ่มต้นเลย ไม่ต้องกังวลว่าจะยากเกินไป เพราะผมจะอธิบายทุกขั้นตอนแบบละเอียด
Funding Rate กับ Mark Price คืออะไร
ก่อนจะเข้าสู่โค้ด มาทำความเข้าใจคำศัพท์ที่ต้องรู้กันก่อนนะครับ
- Funding Rate — ค่าธรรมเนียมที่ผู้ถือสัญญา Long และ Short จ่ายให้กันทุก 8 ชั่วโมง ใช้ในการรักษาราคาสัญญาให้ใกล้เคียงราคา Spot
- Mark Price — ราคาที่ใช้คำนวณกำไรขาดทุนและ Liquidation ราคานี้คำนวณจากหลายปัจจัย ไม่ใช่ราคาตลาดโดยตรง
ข้อมูลทั้งสองอย่างนี้สำคัญมากสำหรับคนที่เทรด Futures เพราะช่วยให้เข้าใจต้นทุนการถือสัญญาระยะยาวและระดับราคาที่อาจถูก Liquidate
เตรียมเครื่องมือก่อนเริ่มต้น
สิ่งที่ต้องมี:
- Python 3.8 ขึ้นไป (ดาวน์โหลดได้ที่ python.org)
- pip (มาพร้อมกับ Python)
- บัญชี OKX (ถ้ายังไม่มี สมัครได้ที่ okx.com)
- โปรแกรมแก้ไขโค้ด เช่น VS Code หรือ PyCharm
ขั้นตอนการติดตั้ง 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
- ความเร็ว: Latency ต่ำกว่า 50 มิลลิวินาที เหมาะสำหรับระบบเทรดที่ต้องการความรวดเร็ว
- ราคาถูก: อัตราแลกเปลี่ยน ¥1=$1 ประหยัดได้มากกว่า 85% เมื่อเทียบกับผู้ให้บริการอื่น
- ชำระเงินง่าย: รองรับ WeChat Pay และ Alipay
- เครดิตฟรี: รับเครดิตทดลองใช้เมื่อลงทะเบียน
- API Compatible: ใช้งานได้ทันทีกับโค้ดที่มีอยู่
สรุป
วันนี้เราได้เรียนรู้วิธีการดึงข้อมูล Funding Rate และ Mark Price จาก OKX API ด้วย Python พร้อมวิธีจัดการข้อผิดพลาดที่พบบ่อย ข้อมูลเหล่านี้จะช่วยให้เข้าใจต้นทุนการถือสัญญา Futures และหลีกเลี่ยงการถูก Liquidation อย่างไม่คาดคิด
ถ้าต้องการนำข้อมูลไปวิเคราะห์ด้วย AI หรือสร้างระบบเทรดอัตโนมัติที่ซับซ้อน ผมแนะนำให้ลองใช้ HolySheep AI ดูครับ ราคาถูกและเชื่อมต่อเร็วมาก ลองสมัครดูได้เลย
โค้ดทั้งหมดในบทความนี้สามารถนำไปรันได้ทันที แต่อย่าลืมตรวจสอบ OKX API Documentation ล่าสุดก่อนใช้งานจริงนะครับ เพราะ API อาจมีการเปลี่ยนแปลง
👉 สมัคร HolySheep AI — รับเครดิตฟรีเมื่อลงทะเบียน