הטמעת ספריית תרשימים של TradingView: מדריך טכני
בונים פלטפורמת מסחר? אפשר ליצור מנוע תרשימים מותאם אישית (3–6 חודשים) או להטמיע את TradingView Advanced Charts. זהו התקן התעשייתי, בשימוש על ידי Binance, Coinbase ואחרים. הצוות שלנו ביצע יותר מ-50 אינטגרציות; אנחנו מכירים את המלכודות. מדריך זה מכסה את שלבי האינטגרציה ושגיאות נפוצות. השגיאה הנפוצה ביותר: יחידות חותמת זמן. נקודת הקצה של היסטוריה משתמשת בשניות, קריאות חוזרות בזמן אמת משתמשות במילישניות. טעות זו עלולה לגרום לנתונים חסרים ושבועות של ניפוי שגיאות. אין. אין. אין. אין. אין. (ישויות מקומיות: אין, אין, אין, אין, אין.)
אין: הכנת Datafeed
TradingView לא מביא נתונים בעצמו—הפלטפורמה שלך חייבת ליישם את UDF API. פרוטוקול זה כולל ארבע נקודות קצה: /config, /symbols, /search, /history. אין. הנה דוגמה ליישום FastAPI:
from fastapi import FastAPI, Query
from datetime import datetime
app = FastAPI()
@app.get("/config")
def get_config():
"""Описание возможностей data feed"""
return {
"supported_resolutions": ["1", "5", "15", "30", "60", "240", "D", "W"],
"supports_group_request": False,
"supports_marks": False,
"supports_search": True,
"supports_timescale_marks": False,
"exchanges": [{"value": "", "name": "All", "desc": "All exchanges"}],
"symbols_types": [{"name": "crypto", "value": "crypto"}]
}
@app.get("/symbols")
async def get_symbol_info(symbol: str = Query(...)):
"""Информация о конкретном символе"""
return {
"name": symbol,
"ticker": symbol,
"description": f"{symbol} / USDT",
"type": "crypto",
"session": "24x7",
"exchange": "YourExchange",
"listed_exchange": "YourExchange",
"timezone": "Etc/UTC",
"pricescale": 100,
"minmov": 1,
"volume_precision": 8,
"has_intraday": True,
"has_daily": True,
"has_weekly_and_monthly": True,
"supported_resolutions": ["1", "5", "15", "30", "60", "240", "D"],
"currency_code": "USDT"
}
@app.get("/search")
async def search_symbols(query: str, limit: int = 30):
"""Поиск символов"""
symbols = await db.search_trading_pairs(query, limit)
return [
{
"symbol": s.symbol,
"full_name": s.symbol,
"description": s.description,
"exchange": "YourExchange",
"type": "crypto"
}
for s in symbols
]
@app.get("/history")
async def get_history(
symbol: str,
resolution: str,
from_ts: int = Query(alias="from"),
to_ts: int = Query(alias="to"),
countback: int = None
):
"""OHLCV исторические данные — основной endpoint"""
candles = await db.get_candles(
symbol=symbol,
resolution=resolution,
from_time=datetime.fromtimestamp(from_ts),
to_time=datetime.fromtimestamp(to_ts)
)
if not candles:
return {"s": "no_data"}
return {
"s": "ok",
"t": [int(c.time.timestamp()) for c in candles],
"o": [c.open for c in candles],
"h": [c.high for c in candles],
"l": [c.low for c in candles],
"c": [c.close for c in candles],
"v": [c.volume for c in candles]
}אין. אין. אין. (ישויות מקומיות: אין, אין, אין, אין, אין.)
אין: עדכונים בזמן אמת באמצעות WebSocket
לנתונים חיים, ה-datafeed חייב לדחוף עדכונים דרך WebSocket. ה-onRealtimeCallback מצפה למילישניות. אין.
אין: אינדיקטורים מותאמים אישית ואינטגרציה עם ברוקר
TradingView תומך במחקרים מותאמים אישית דרך Pine Script. אפשר גם לשלב API של ברוקר להצבת הזמנות. אין.
אין: סיכום
אין. אין. אין. אין. אין. המפתח הוא להימנע מחוסר התאמה של חותמות זמן. השירות שלנו מטפל בזה ועוד. אין. (ישויות מקומיות: אין, אין, אין, אין, אין.)







