تحليل البيانات عالية التردد — معالجة بيانات السوق على مستوى التيك

يعمل التداول عالي التردد في مجال العملات الرقمية على مستويات زمنية تصل إلى المللي ثانية/الميكرو ثانية. معالجة ملايين التيكات يوميًا، والتعامل مع تدفقات البيانات المتقطعة، واستخراج إشارات البنية الدقيقة هي ما يميز المتداولين المحترفين عن غيرهم. يقدم هذا الدليل نظرة على إدارة بيانات مستوى التيك والتحليلات الفورية التي تدعم دورات التحديث كل 5 دقائق في Smart Money API.

الفكرة الرئيسية: الحيتان لا تحرك الأسواق على الفور. صفقاتها الكبيرة تخلق بصمات يمكن اكتشافها في اختلال سجل الطلبات، وفروق الأسعار بين العرض والطلب، ونسب حجم المُتلقّي. يلتقط Smart Money API هذه البصمات في الوقت الفعلي.

جمع وتخزين بيانات التيك

مصادر البيانات

بالنسبة للعملات الرقمية، تأتي بيانات التيك من:

تخزين التيك بكفاءة باستخدام Parquet

تخزين البيانات العمودية المضغوطة للاستعلامات السريعة:

بايثون — خط أنابيب بيانات التيك
import pandas as pd
import pyarrow.parquet as pq
# مخزن التيك المؤقت (يتراكم لمدة ساعة، ثم يحفظ)
tick_buffer = []
def on_tick(exchange, symbol, price, size, side, timestamp):
tick_buffer.append({
"timestamp": timestamp,
"exchange": exchange,
"symbol": symbol,
"price": price,
"size": size,
"side": side # "buy" أو "sell"
})
# كل ساعة، يتم ضغط البيانات وحفظها
if len(tick_buffer) > 1_000_000:
df = pd.DataFrame(tick_buffer)
pq.write_table(
pa.Table.from_pandas(df),
f"ticks/{symbol}_{timestamp:%Y%m%d_%H}.parquet",
compression="snappy"
)
tick_buffer = []

تحليل سجل الطلبات

لقطات سجل الطلبات من المستوى الثاني

التقاط سجل الطلبات الكامل كل 100-500 مللي ثانية:

بايثون — معالجة سجل الطلبات
class OrderBook:
def __init__(self):
self.bids = {} # السعر -> الحجم
self.asks = {} # السعر -> الحجم
def update(self, side, price, size):
if side == "bid":
if size == 0: del self.bids[price]
else: self.bids[price] = size
else:
if size == 0: del self.asks[price]
else: self.asks[price] = size
def get_imbalance(self, depth=10):
# الحصول على أفضل 10 عروض وطلبات
top_bids = sorted(self.bids.items(), reverse=True)[:depth]
top_asks = sorted(self.asks.items())[:depth]
bid_volume = sum(size for _, size in top_bids)
ask_volume = sum(size for _, size in top_asks)
# اختلال التوازن: >1 = صعودي (ضغط شراء أكبر)
إرجاع حجم العطاء / حجم الطلب إذا حجم الطلب > 0 إلا 1.0
تعريف الحصول على الفارق(الذات):
أفضل عرض = الحد الأقصى(الذات.العروض.المفاتيح())
أفضل طلب = الحد الأدنى(الذات.الطلبات.المفاتيح())
إرجاع (أفضل طلب - أفضل عرض) / أفضل عرض # نسبة الفارق

إشارات البنية الدقيقة

استخراج إشارات قابلة للتنفيذ من هيكل كتاب الطلبات:

مقاييس البنية الدقيقة للسوق

متوسط السعر المرجح بالحجم (VWAP)

معيار تنفيذ أفضل من سعر الإغلاق البسيط:

بايثون — حساب VWAP
تعريف حساب_vwap(القراد):
# القراد: قائمة من مجموعات (السعر، الحجم)
البسط = مجموع(السعر * الحجم لـ السعر، الحجم في القراد)
المقام = مجموع(الحجم لـ _، الحجم في القراد)
إرجاع البسط / المقام

نسبة المشتري/البائع

تحديد الجانب العدواني:

بايثون — تحليل المشتري
تعريف الحصول على_اتجاه_المشتري(القراد):
# إذا كان سعر الصفقة = العرض، فإن البائع كان عدوانيًا (عرض)
# إذا كان سعر الصفقة = الطلب، فإن المشتري كان عدوانيًا (طلب)
إذا القيمة المطلقة(القراد.السعر - أفضل عرض) < القراد.خطوة_السعر:
إرجاع "بيع"
وإلا إذا القيمة المطلقة(القراد.السعر - أفضل طلب) < القراد.خطوة_السعر:
إرجاع "شراء"
وإلا:
إرجاع "منتصف" # داخل الفارق، ربما بركة مظلمة
حجم_الشراء = مجموع(ر.الحجم لـ t في القراد إذا الحصول على_اتجاه_المشتري(ر) == "شراء")
حجم_البيع = مجموع(ر.الحجم لـ t في القراد إذا الحصول على_اتجاه_المشتري(ر) == "بيع")
إرجاع حجم_الشراء / (حجم_الشراء + حجم_البيع) # ٪ شراء

هندسة خط الأنابيب في الوقت الحقيقي

معالجة تدفق WebSocket

الاتصال بـ Bybit/Binance/Hyperliquid WebSocket للبيانات الحية:

بايثون — معالج البث المباشر
استيراد asyncio
استيراد websockets
غير متزامن تعريف الاتصال_بقراد_بايت(الرمز):
رابط = f"wss://stream.bybit.com/v5/public/spot"
غير متزامن مع websockets.connect(رابط) كـ ws:
# الاشتراك في تدفق التداول
انتظر ws.send(json.dumps({
"op": "اشتراك",
"args": [f"publicTrade.{الرمز}"]
}))
غير متزامن لـ رسالة في ws:
البيانات = json.loads(رسالة)
لـ صفقة في data["data"]:
on_tick(
exchange="bybit",
symbol=symbol,
price=float(trade["price"]),
size=float(trade["size"]),
side=trade["side"],
timestamp=int(trade["time"])
)

المعالجة الموزعة باستخدام تدفقات Redis

تعامل مع ملايين التيكات يوميًا باستخدام طابور الرسائل:

Python — معالجة تدفق Redis
import redis
r = redis.Redis(host='localhost', port=6379)
# المُنتج: إرسال التيكات إلى التدفق
def publish_tick(exchange, symbol, tick):
stream_key = f"ticks:{exchange}:{symbol}"
r.xadd(stream_key, {
"price": tick.price,
"size": tick.size,
"side": tick.side,
"ts": tick.timestamp
})
# مجموعة المستهلكين تقرأ مع تتبع التأخر
r.xgroup_create(stream_key, "analytics", id="$", mkstream=True)

أضف إشارات في الوقت الحقيقي إلى تحليلاتك

تجمّع Smart Money API بيانات التيك من 3 بورصات وأكثر من 250 محفظة لحيتان السوق. استخدم إشارات البنية الدقيقة المحسوبة مسبقًا لتعزيز تحليلك في الوقت الحقيقي.

ابدأ مجانًا اليوم →