تحلیل داده‌های با فرکانس بالا — پردازش داده‌های بازار در سطح تیک

معاملات با فرکانس بالا در ارزهای دیجیتال در مقیاس زمانی میلی‌ثانیه/میکروثانیه انجام می‌شود. پردازش میلیون‌ها تیک در روز، مدیریت جریان‌های داده‌ای پراکنده و استخراج سیگنال‌های ریزساختاری، معامله‌گران حرفه‌ای را از دیگران متمایز می‌کند. این راهنما به مدیریت داده‌های سطح تیک و تحلیل‌های بلادرنگ می‌پردازد که چرخه‌های به‌روزرسانی 5 دقیقه‌ای Smart Money API را پشتیبانی می‌کنند.

نکته کلیدی: نهنگ‌ها بازار را به‌صورت آنی حرکت نمی‌دهند. معاملات بلوکی آن‌ها امضاهای قابل تشخیصی در عدم تعادل دفتر سفارشات، اسپردهای پیشنهاد-درخواست و نسبت‌های حجم خریدار ایجاد می‌کنند. Smart Money API این امضاها را به‌صورت بلادرنگ ثبت می‌کند.

جمع‌آوری و ذخیره‌سازی داده‌های تیک

منابع داده

برای ارزهای دیجیتال، داده‌های تیک از این منابع می‌آیند:

ذخیره‌سازی کارآمد تیک با Parquet

ذخیره‌سازی داده‌های ستونی فشرده برای پرس‌وجوهای سریع:

Python — خط لوله داده‌های تیک
import pandas as pd
import pyarrow.parquet as pq
# بافر تیک بلادرنگ (برای 1 ساعت جمع‌آوری کنید، سپس ذخیره کنید)
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 = []

تحلیل دفتر سفارشات

تصاویر دفتر سفارشات سطح 2

دفتر سفارشات کامل را هر 100-500 میلی‌ثانیه ثبت کنید:

Python — پردازش دفتر سفارشات
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(تیک‌ها):
# تیک‌ها: لیستی از تاپل‌های (قیمت، حجم)
صورت = جمع(قیمت * حجم برای قیمت، حجم در تیک‌ها)
مخرج = جمع(حجم برای _, حجم در تیک‌ها)
بازگشت صورت / مخرج

نسبت خریدار/فروشنده تهیه‌کننده

تشخیص اینکه کدام طرف تهاجمی است:

پایتون — تحلیل تهیه‌کننده
تعریف گرفتن_جهت_تهیه‌کننده(تیک):
# اگر قیمت معامله = پیشنهاد، فروشنده تهاجمی بود (عرضه)
# اگر قیمت معامله = درخواست، خریدار تهاجمی بود (تقاضا)
اگر abs(تیک.قیمت - بهترین_پیشنهاد) < تیک.گام_قیمت:
بازگشت "فروش"
در غیر این صورت اگر abs(تیک.قیمت - بهترین_درخواست) < تیک.گام_قیمت:
بازگشت "خرید"
در غیر این صورت:
بازگشت "میان" # داخل اسپرد، احتمالاً استخر تاریک
حجم_خرید = جمع(ت.اندازه برای t در تیک‌ها اگر گرفتن_جهت_تهیه‌کننده(ت) == "خرید")
حجم_فروش = جمع(ت.اندازه برای t در تیک‌ها اگر گرفتن_جهت_تهیه‌کننده(ت) == "فروش")
بازگشت حجم_خرید / (حجم_خرید + حجم_فروش) # درصد خرید

معماری خط لوله بلادرنگ

پردازش جریان WebSocket

اتصال به WebSocket Bybit/Binance/Hyperliquid برای داده‌های زنده:

پایتون — مدیریت جریان زنده
وارد کردن asyncio
وارد کردن websockets
async تعریف اتصال_تیک‌های_بایبیت(نماد):
url = f"wss://stream.bybit.com/v5/public/spot"
async با websockets.connect(url) به عنوان ws:
# اشتراک در جریان معاملات
await ws.send(json.dumps({
"op": "subscribe",
"args": [f"publicTrade.{نماد}"]
}))
async برای پیام در ws:
داده = json.loads(پیام)
برای معامله در داده["data"]:
on_tick(
exchange="bybit",
symbol=symbol,
price=float(trade["price"]),
size=float(trade["size"]),
side=trade["side"],
timestamp=int(trade["time"])
)

پردازش توزیع‌شده با ردیس استریم

مدیریت میلیون‌ها تیک در روز با صف پیام:

پایتون — پردازش استریم ردیس
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 داده‌های تیک را از ۳ صرافی و بیش از ۲۵۰ کیف پول نهنگ جمع‌آوری می‌کند. از سیگنال‌های از پیش محاسبه‌شده ریزساختار بازار ما برای تقویت تحلیل لحظه‌ای خود استفاده کنید.

شروع رایگان امروز →