Market Data API - رفرنس کامل¶
توضیحات کلی¶
این API برای دریافت دادههای بازار شامل تیکرها، عمق بازار و اطلاعات قیمت استفاده میشود. این اندپوینتها عمومی هستند و نیازی به احراز هویت ندارند (به جز برخی موارد خاص).
ساختار داده Ticker¶
{
"symbol": "BTC-IRR",
"last_price": "1000000000",
"daily_volume": "50000000000",
"bid": "999000000",
"bid_size": "10000000000",
"ask": "1001000000",
"ask_size": "15000000000",
"daily_change": "50000000",
"daily_change_relative": "0.05",
"high": "1020000000",
"low": "980000000",
"timestamp": 1735555200,
"properties": {
"base": "BTC",
"quote": "IRR"
}
}
فیلدها¶
- symbol: نماد معاملاتی
- last_price: قیمت آخرین معامله
- daily_volume: حجم معاملات امروز
- bid: بهترین قیمت خرید
- bid_size: حجم بهترین قیمت خرید
- ask: بهترین قیمت فروش
- ask_size: حجم بهترین قیمت فروش
- daily_change: تغییر قیمت نسبت به دیروز
- daily_change_relative: تغییر نسبی (درصد)
- high: بالاترین قیمت امروز
- low: پایینترین قیمت امروز
- timestamp: زمان (Unix timestamp)
- properties: ویژگیهای نماد
اندپوینتها¶
1. List Tickers (لیست تیکرها)¶
GET /api/exchange/v1/tickers
توضیحات: - دریافت لیست تیکرها برای تمام نمادها - شامل دادههای بازار
پارامترهای Query:
- offset (integer, optional, default: 0)
- limit (integer, optional, default: 10, max: 10)
دسترسی: همه کاربران (نیازی به احراز هویت ندارد)
نمونه موفق¶
درخواست:
پاسخ (200 OK):
{
"heads": {
"symbol": "نماد",
"last_price": "قیمت آخر",
"daily_volume": "حجم روزانه",
"bid": "بهترین خرید",
"ask": "بهترین فروش",
"daily_change": "تغییر قیمت"
},
"items": [
{
"symbol": "BTC-IRR",
"last_price": "1000000000",
"daily_volume": "50000000000",
"bid": "999000000",
"bid_size": "10000000000",
"ask": "1001000000",
"ask_size": "15000000000",
"daily_change": "50000000",
"daily_change_relative": "0.05",
"high": "1020000000",
"low": "980000000",
"timestamp": 1735555200,
"properties": {
"base": "BTC",
"quote": "IRR"
}
},
{
"symbol": "ETH-IRR",
"last_price": "35000000",
"daily_volume": "30000000000",
"bid": "34900000",
"bid_size": "5000000000",
"ask": "35100000",
"ask_size": "7000000000",
"daily_change": "500000",
"daily_change_relative": "0.014",
"high": "35500000",
"low": "34500000",
"timestamp": 1735555200,
"properties": {
"base": "ETH",
"quote": "IRR"
}
},
{
"symbol": "USDT-IRR",
"last_price": "50000",
"daily_volume": "100000000000",
"bid": "49990",
"bid_size": "50000000000",
"ask": "50010",
"ask_size": "60000000000",
"daily_change": "10",
"daily_change_relative": "0.0002",
"high": "50100",
"low": "49900",
"timestamp": 1735555200,
"properties": {
"base": "USDT",
"quote": "IRR"
}
}
],
"total": 3,
"offset": 0,
"limit": 10
}
2. Get Ticker (تیکر نماد خاص)¶
GET /api/exchange/v1/tickers/{symbol}
توضیحات: - دریافت دادههای بازار برای یک نماد خاص
پارامترهای Path:
- symbol (string, required): نام نماد (مثلاً BTC-IRR)
دسترسی: همه کاربران
نمونه موفق¶
درخواست:
پاسخ (200 OK):
{
"symbol": "BTC-IRR",
"last_price": "1000000000",
"daily_volume": "50000000000",
"bid": "999000000",
"bid_size": "10000000000",
"ask": "1001000000",
"ask_size": "15000000000",
"daily_change": "50000000",
"daily_change_relative": "0.05",
"high": "1020000000",
"low": "980000000",
"timestamp": 1735555200,
"properties": {
"base": "BTC",
"quote": "IRR"
}
}
نمونه ناموفق: نماد یافت نشد¶
درخواست:
پاسخ (404 Not Found):
3. Get Depth (عمق بازار)¶
GET /api/exchange/v1/depth/{symbol}
توضیحات: - دریافت دفتر سفارشات (Order Book) - شامل لیست خریداران و فروشندگان
پارامترهای Path:
- symbol (string, required): نام نماد
پارامترهای Query:
- limit (integer, optional, default: 20, max: 100): تعداد سطوح
دسترسی: همه کاربران
نمونه موفق¶
درخواست:
پاسخ (200 OK):
{
"symbol": "BTC-IRR",
"tenant_id": "tenant_001",
"last_updated": "2025-12-30T10:00:00Z",
"last_price": "1000000000",
"bids": [
{
"price": "999000000",
"quantity": "0.5"
},
{
"price": "998000000",
"quantity": "1.2"
},
{
"price": "997000000",
"quantity": "2.0"
},
{
"price": "996000000",
"quantity": "0.8"
},
{
"price": "995000000",
"quantity": "1.5"
}
],
"asks": [
{
"price": "1001000000",
"quantity": "0.3"
},
{
"price": "1002000000",
"quantity": "0.7"
},
{
"price": "1003000000",
"quantity": "1.0"
},
{
"price": "1004000000",
"quantity": "0.5"
},
{
"price": "1005000000",
"quantity": "2.0"
}
]
}
نمونه ناموفق: نماد یافت نشد¶
درخواست:
پاسخ (404 Not Found):
توضیحات دادههای بازار¶
1. Ticker (تیکر)¶
تیکر خلاصهای از وضعیت بازار یک نماد است.
اجزای کلیدی: - last_price: قیمت آخرین معامله - bid/ask: بهترین قیمتهای خرید/فروش - spread: تفاوت bid و ask - volume: حجم معاملات - change: تغییرات قیمت
مثال:
BTC-IRR:
- قیمت آخر: 1,000,000,000 IRR
- بهترین خرید: 999,000,000 IRR
- بهترین فروش: 1,001,000,000 IRR
- اسپرد: 2,000,000 IRR (0.2%)
- حجم: 50 BTC
- تغییر: +50,000,000 IRR (+5%)
2. Depth (عمق بازار)¶
دفتر سفارشات کامل شامل تمام سفارشات فعال.
اجزای کلیدی: - bids: لیست سفارشات خرید (از بالاترین قیمت) - asks: لیست سفارشات فروش (از پایینترین قیمت) - last_updated: زمان آخرین بهروزرسانی
مثال:
Bids (خرید):
1. 999,000,000 IRR - 0.5 BTC
2. 998,000,000 IRR - 1.2 BTC
3. 997,000,000 IRR - 2.0 BTC
Asks (فروش):
1. 1,001,000,000 IRR - 0.3 BTC
2. 1,002,000,000 IRR - 0.7 BTC
3. 1,003,000,000 IRR - 1.0 BTC
مثالهای کاربردی¶
نمونه 1: دریافت قیمت لحظهای¶
کاربرد: نمایش قیمت در اپلیکیشن
درخواست:
پاسخ:
{
"symbol": "BTC-IRR",
"last_price": "1000000000",
"daily_change": "50000000",
"daily_change_relative": "0.05",
"timestamp": 1735555200
}
نمایش به کاربر:
نمونه 2: تحلیل عمق بازار¶
کاربرد: تصمیمگیری برای ثبت سفارش
درخواست:
تحلیل:
data = response.json()
# حجم کل خرید در ۵ سطح اول
total_bid = sum(bid['quantity'] for bid in data['bids'][:5])
# = 0.5 + 1.2 + 2.0 + 0.8 + 1.5 = 6.0 BTC
# حجم کل فروش در ۵ سطح اول
total_ask = sum(ask['quantity'] for ask in data['asks'][:5])
# = 0.3 + 0.7 + 1.0 + 0.5 + 2.0 = 4.5 BTC
# نتیجه: خرید بیشتر از فروش = احتمال رشد قیمت
نمونه 3: نمایش چارت¶
کاربرد: دادههای چارت قیمت
درخواست:
پردازش:
// برای هر نماد
tickers.forEach(ticker => {
const price = parseFloat(ticker.last_price);
const change = parseFloat(ticker.daily_change_relative) * 100;
// نمایش در چارت
updateChart(ticker.symbol, price, change);
});
محاسبات بازار¶
1. اسپرد (Spread)¶
spread = ask - bid
spread_percent = (spread / bid) * 100
# مثال:
# bid = 999,000,000
# ask = 1,001,000,000
# spread = 2,000,000
# spread% = 0.2%
2. میانگین وزنی قیمت (VWAP)¶
# فرض کنیم معاملات امروز:
trades = [
{"price": 1000000000, "quantity": 0.5},
{"price": 1001000000, "quantity": 0.3},
{"price": 999000000, "quantity": 0.2}
]
total_value = sum(t['price'] * t['quantity'] for t in trades)
total_quantity = sum(t['quantity'] for t in trades)
vwap = total_value / total_quantity
# = (500M + 300.3M + 199.8M) / 1.0 = 1,000,100,000 IRR
3. حجم معاملات انباشته¶
# محاسبه حجم انباشته در عمق بازار
bids = [
{"price": 999000000, "quantity": 0.5},
{"price": 998000000, "quantity": 1.2},
{"price": 997000000, "quantity": 2.0}
]
cumulative = 0
for bid in bids:
cumulative += bid['quantity']
bid['cumulative'] = cumulative
# نتیجه:
# 999M: 0.5 BTC (cum: 0.5)
# 998M: 1.2 BTC (cum: 1.7)
# 997M: 2.0 BTC (cum: 3.7)
بهترین روشها¶
1. کشینگ¶
# تیکرها را کش کنید (بهروزرسانی هر ۵ ثانیه)
import time
cache = {}
cache_time = 0
def get_ticker(symbol):
global cache_time, cache
if time.time() - cache_time > 5:
response = requests.get(f"{BASE_URL}/api/exchange/v1/tickers/{symbol}")
cache = response.json()
cache_time = time.time()
return cache
2. پولینگ (Polling)¶
// بهروزرسانی خودکار هر ۲ ثانیه
setInterval(async () => {
const ticker = await fetch(`${BASE_URL}/api/exchange/v1/tickers/BTC-IRR`);
updateUI(ticker);
}, 2000);
3. مدیریت خطاها¶
def get_market_data(symbol):
try:
ticker = get_ticker(symbol)
depth = get_depth(symbol, limit=10)
return {
"ticker": ticker,
"depth": depth
}
except requests.exceptions.RequestException as e:
print(f"Error fetching market data: {e}")
return None
چکلیست استفاده¶
برای نمایش قیمت¶
- [ ] استفاده از
GET /tickers/{symbol} - [ ] نمایش last_price
- [ ] نمایش تغییرات روزانه
برای تحلیل بازار¶
- [ ] استفاده از
GET /depth/{symbol} - [ ] بررسی حجمهای خرید/فروش
- [ ] محاسبه اسپرد
برای لیست نمادها¶
- [ ] استفاده از
GET /tickers - [ ] نمایش لیست کامل
نکات امنیتی¶
- نرخ محدودیت (Rate Limit)
- این اندپوینتها عمومی هستند
-
ممکن است محدودیت نرخ داشته باشند
-
دادههای زنده
- دادهها ممکن است با تاخیر باشند
-
برای معاملات دقیق، از API اصلی استفاده کنید
-
تاخیر دادهها
- دادهها ممکن است چند ثانیه تاخیر داشته باشند
- برای معاملات فوری، از WebSocket استفاده کنید
خلاصه¶
| اندپوینت | متد | توضیحات | نیاز به احراز |
|---|---|---|---|
/tickers |
GET | لیست تیکرها | خیر |
/tickers/{symbol} |
GET | تیکر نماد | خیر |
/depth/{symbol} |
GET | عمق بازار | خیر |
بعدی: مطالعه مثالهای کاربردی