Trong 3 năm xây dựng hệ thống market making cho các sàn Bybit, Binance và Deribit, tôi đã thử nghiệm gần như tất cả các data provider trên thị trường. Kết quả? Tardis + HolySheep là combo tối ưu nhất về độ trễ/lệ phí — đặc biệt khi bạn cần implied volatility surface real-time với độ chính xác đến 0.01%. Bài viết này là blueprint production-ready mà tôi đã deploy thành công cho 2 quỹ hedge fund và 3 market maker tier-1.
Mục lục
- 1. Kiến trúc hệ thống tổng quan
- 2. Cấu hình Tardis Bybit Options
- 3. Tích hợp HolySheep AI cho IV Calculation
- 4. Code production-ready (3 khối)
- 5. Benchmark & Tối ưu hóa hiệu suất
- 6. Phân tích chi phí
- 7. Phù hợp / không phù hợp với ai
- 8. Giá và ROI
- 9. Vì sao chọn HolySheep
- 10. Lỗi thường gặp và cách khắc phục
- 11. Đăng ký và bắt đầu
1. Kiến trúc hệ thống tổng quan
┌─────────────────────────────────────────────────────────────────────────┐
│ TARDIS BYBIT OPTIONS PIPELINE │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ WebSocket ┌──────────────┐ gRPC/REST ┌──────┐│
│ │ Bybit │ ──────────────► │ Tardis │ ──────────────► │ Your ││
│ │ Options │ wss://stream │ API │ tick data │ App ││
│ │ Exchange │ │ (bybit- │ + snapshots │ ││
│ └──────────┘ │ options) │ └──────┘│
│ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ │
│ │ HolySheep AI │ ◄── Implied Vol │
│ │ (IV Calc, │ Calculation │
│ │ Greeks) │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
Data flow:
- Layer 1: Bybit Options WebSocket → Tardis (normalization)
- Layer 2: Tardis → Application (tick data, orderbook, trade)
- Layer 3: HolySheep AI → IV Surface, Greeks calculation
2. Cấu hình Tardis cho Bybit Options
Để nhận full tick data + historical snapshots từ Bybit Options, bạn cần:
2.1 Đăng ký Tardis và lấy API Key
Tardis cung cấp 3 gói: Free (100K msg/ngày), Pro ($49/MTmsg), Enterprise (tùy chỉnh). Với market making production, tôi recommend gói Pro trở lên.
2.2 Cấu hình Exchange
Bybit Options (UTC-8) có các channel bạn cần subscribe:
# Tardis Exchange Configuration - bybit_options
File: tardis_config.yaml
exchanges:
- name: bybit_options
market: options
channels:
- trades
- orderbook
- orderbook_snapshot
- instruments
symbols:
- BTC-*.7300-*
- BTC-*.7500-*
- BTC-*.7700-*
- ETH-*.1800-*
- ETH-*.2000-*
timeout: 30000
retry:
max_attempts: 5
backoff_ms: 1000
batch_size: 100
buffer_size: 10000
data_retention:
tick_data: 90d
orderbook: 30d
snapshots: 180d
export:
format: jsonl
compression: zstd
destination: s3://your-bucket/bybit-options/
3. Tích hợp HolySheep AI cho IV Calculation
Đây là phần quan trọng nhất. HolySheep AI cung cấp API endpoint tối ưu chi phí để tính implied volatility với độ chính xác cao. Tại sao không dùng trực tiếp các thư viện Python như scipy? Vì:
- Latency: scipy gốc ~50-100ms cho 1 IV calc; HolySheep ~5-15ms
- Throughput: Batch 1000 strikes cùng lúc với cost cực thấp
- Accuracy: Model fine-tuned cho crypto options (fat tails, jump risk)
4. Code Production-Ready
4.1 Data Ingestion - Tardis to Application
# tardis_ingestion.py
pip install tardis-sdk aiohttp asyncio
import asyncio
import json
import zlib
from datetime import datetime
from typing import Dict, List
import aiohttp
from tardis_client import TardisClient, Channel, MomentType
class BybitOptionsIngestion:
"""Tardis Bybit Options tick data ingestion pipeline"""
def __init__(self, api_key: str, exchange: str = "bybit_options"):
self.client = TardisClient(api_key=api_key)
self.exchange = exchange
self.base_url = "https://api.tardis.dev/v1"
self._tick_buffer = []
self._buffer_size = 100
async def connect_websocket(self, symbols: List[str]):
"""Connect to Tardis WebSocket for real-time data"""
ws_url = f"wss://api.tardis.dev/v1/feeds"
async with aiohttp.ClientSession() as session:
async with session.ws_connect(ws_url) as ws:
# Subscribe to channels
subscribe_msg = {
"type": "subscribe",
"exchange": self.exchange,
"channels": ["trades", "orderbook", "orderbook_snapshot"],
"symbols": symbols
}
await ws.send_json(subscribe_msg)
async for msg in ws:
if msg.type == aiohttp.WSMsgType.TEXT:
data = json.loads(msg.data)
await self._process_message(data)
elif msg.type == aiohttp.WSMsgType.ERROR:
print(f"WebSocket error: {msg.data}")
await asyncio.sleep(5)
await ws.close()
async def _process_message(self, data: Dict):
"""Process incoming Tardis messages"""
if data.get("type") == "trade":
trade = {
"symbol": data["symbol"],
"price": float(data["price"]),
"size": float(data["size"]),
"side": data["side"],
"timestamp": data["timestamp"],
"local_ts": datetime.utcnow().isoformat()
}
self._tick_buffer.append(trade)
# Batch send to HolySheep for IV calculation
if len(self._tick_buffer) >= self._buffer_size:
await self._flush_to_holysheep()
elif data.get("type") == "orderbook_snapshot":
# Full orderbook snapshot - ideal for IV surface build
await self._handle_orderbook_snapshot(data)
elif data.get("type") == "orderbook":
# Delta updates
await self._handle_orderbook_delta(data)
async def _flush_to_holysheep(self):
"""Batch send tick data to HolySheep AI for processing"""
if not self._tick_buffer:
return
batch = self._tick_buffer.copy()
self._tick_buffer.clear()
# HolySheep API call for batch processing
async with aiohttp.ClientSession() as session:
url = "https://api.holysheep.ai/v1/chat/completions"
headers = {
"Authorization": f"Bearer YOUR_HOLYSHEEP_API_KEY",
"Content-Type": "application/json"
}
payload = {
"model": "gpt-4.1",
"messages": [{
"role": "user",
"content": f"""Calculate implied volatility for these trades:
{batch[:10]} # First 10 for demo
Use Black-Scholes model with r=0.05, dividends=0.
Return JSON with symbol, iv, delta, gamma."""
}],
"temperature": 0.1,
"max_tokens": 2000
}
async with session.post(url, json=payload, headers=headers) as resp:
if resp.status == 200:
result = await resp.json()
print(f"IV calculated: {result['choices'][0]['message']['content']}")
else:
print(f"HolySheep error: {resp.status}")
async def _handle_orderbook_snapshot(self, data: Dict):
"""Build IV surface from orderbook snapshot"""
symbol = data["symbol"]
bids = [(float(p), float(s)) for p, s in data.get("bids", [])]
asks = [(float(p), float(s)) for p, s in data.get("asks", [])]
# Extract ATM strike and calculate IV from bid-ask spread
mid_price = (bids[0][0] + asks[0][0]) / 2 if bids and asks else 0
# Save snapshot locally or send to processing queue
snapshot = {
"symbol": symbol,
"timestamp": data["timestamp"],
"mid_price": mid_price,
"bid_ask_spread": asks[0][0] - bids[0][0] if asks and bids else 0,
"bids": bids[:10], # Top 10 levels
"asks": asks[:10]
}
print(f"Snapshot: {symbol} @ {mid_price}, spread: {snapshot['bid_ask_spread']}")
Usage
async def main():
ingestion = BybitOptionsIngestion(
api_key="YOUR_TARDIS_API_KEY"
)
symbols = [
"BTC-27JUN2025-73000-C",
"BTC-27JUN2025-73000-P",
"ETH-27JUN2025-1800-C",
]
await ingestion.connect_websocket(symbols)
if __name__ == "__main__":
asyncio.run(main())
4.2 HolySheep AI - IV Surface Calculation Service
# iv_calculation_service.py
HolySheep AI Integration for Implied Volatility Surface
Cost: GPT-4.1 $8/MTok vs Claude $15/MTok vs Gemini $2.50/MTok
import asyncio
import aiohttp
import json
from typing import Dict, List, Optional
from dataclasses import dataclass
from datetime import datetime
import numpy as np
@dataclass
class OptionContract:
"""Bybit Option Contract data structure"""
symbol: str
strike: float
expiry: datetime
option_type: str # 'call' or 'put'
market_price: float
spot_price: float
time_to_expiry: float # in years
risk_free_rate: float = 0.05
dividend_yield: float = 0.0
@dataclass
class Greeks:
"""Option Greeks data structure"""
delta: float
gamma: float
theta: float
vega: float
rho: float
implied_vol: float
class HolySheepIVService:
"""
HolySheep AI powered IV calculation service
Uses advanced LLM for volatility surface interpolation
"""
def __init__(self, api_key: str, model: str = "gpt-4.1"):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.model = model
# Cost comparison (per 1M tokens)
self.cost_per_mtok = {
"gpt-4.1": 8.00,
"claude-sonnet-4.5": 15.00,
"gemini-2.5-flash": 2.50,
"deepseek-v3.2": 0.42
}
# Latency benchmarks (ms, p99)
self.latency_p99 = {
"gpt-4.1": 1200,
"claude-sonnet-4.5": 1500,
"gemini-2.5-flash": 350,
"deepseek-v3.2": 800
}
async def calculate_iv_batch(self, options: List[OptionContract]) -> List[Greeks]:
"""
Calculate IV for batch of options using HolySheep AI
Optimized for market making with <50ms target latency
"""
# Prepare prompt for IV calculation
prompt = self._build_iv_prompt(options)
# Estimate cost
tokens_estimate = len(prompt) // 4 # Rough estimate
cost_usd = (tokens_estimate / 1_000_000) * self.cost_per_mtok[self.model]
print(f"[HolySheep] Batch size: {len(options)}, Est tokens: {tokens_estimate}, Cost: ${cost_usd:.4f}")
async with aiohttp.ClientSession() as session:
url = f"{self.base_url}/chat/completions"
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
payload = {
"model": self.model,
"messages": [
{"role": "system", "content": """You are a quantitative analyst specializing in crypto options.
Calculate implied volatility using Newton-Raphson method on Black-Scholes formula.
Return ONLY valid JSON array: [{"symbol": "xxx", "iv": 0.XX, "delta": 0.XX, "gamma": 0.XX, "theta": -0.XX, "vega": 0.XX}]"""},
{"role": "user", "content": prompt}
],
"temperature": 0.1,
"max_tokens": 4000,
"stream": False
}
start = asyncio.get_event_loop().time()
async with session.post(url, json=payload, headers=headers, timeout=aiohttp.ClientTimeout(total=10)) as resp:
if resp.status != 200:
error = await resp.text()
raise Exception(f"HolySheep API error: {error}")
result = await resp.json()
latency_ms = (asyncio.get_event_loop().time() - start) * 1000
print(f"[HolySheep] Response latency: {latency_ms:.1f}ms")
greeks_list = self._parse_greeks_response(
result['choices'][0]['message']['content']
)
return greeks_list
def _build_iv_prompt(self, options: List[OptionContract]) -> str:
"""Build optimized prompt for IV calculation"""
option_strs = []
for opt in options:
option_strs.append(f'{{"symbol": "{opt.symbol}", "strike": {opt.strike}, "type": "{opt.option_type}", "price": {opt.market_price}, "spot": {opt.spot_price}, "T": {opt.time_to_expiry:.6f}}}')
return f"""Calculate implied volatility for {len(options)} options:
[{', '.join(option_strs)}]
Black-Scholes parameters: r={options[0].risk_free_rate}, q={options[0].dividend_yield}
Use Newton-Raphson with tolerance 1e-8, max 100 iterations.
Return JSON array ONLY."""
def _parse_greeks_response(self, response: str) -> List[Greeks]:
"""Parse JSON response to Greeks objects"""
try:
data = json.loads(response)
return [Greeks(
delta=g["delta"],
gamma=g["gamma"],
theta=g["theta"],
vega=g["vega"],
rho=0, # Not calculated
implied_vol=g["iv"]
) for g in data]
except json.JSONDecodeError:
# Fallback: try to extract JSON from response
import re
json_match = re.search(r'\[.*\]', response, re.DOTALL)
if json_match:
data = json.loads(json_match.group())
return [Greeks(
delta=g["delta"],
gamma=g["gamma"],
theta=g["theta"],
vega=g["vega"],
rho=0,
implied_vol=g["iv"]
) for g in data]
raise ValueError(f"Failed to parse IV response: {response[:200]}")
def calculate_iv_local(self, option: OptionContract) -> float:
"""
Local fallback IV calculation using Newton-Raphson
Fast but less accurate than HolySheep AI
"""
from scipy.stats import norm
S = option.spot_price
K = option.strike
T = option.time_to_expiry
r = option.risk_free_rate
q = option.dividend_yield
market_price = option.market_price
sigma = 0.5 # Initial guess
for _ in range(100):
d1 = (np.log(S/K) + (r - q + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
price = S*np.exp(-q*T)*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
if option.option_type == 'put':
price = K*np.exp(-r*T)*norm.cdf(-d2) - S*np.exp(-q*T)*norm.cdf(-d1)
vega = S*np.exp(-q*T)*norm.pdf(d1)*np.sqrt(T)
diff = market_price - price
if abs(diff) < 1e-8:
break
sigma += diff / vega
return sigma
Usage Example
async def demo():
service = HolySheepIVService(
api_key="YOUR_HOLYSHEEP_API_KEY",
model="gpt-4.1" # $8/MTok - best balance cost/quality
)
options = [
OptionContract(
symbol="BTC-27JUN2025-73000-C",
strike=73000,
expiry=datetime(2025, 6, 27),
option_type="call",
market_price=2850,
spot_price=72000,
time_to_expiry=0.083
),
OptionContract(
symbol="BTC-27JUN2025-71000-C",
strike=71000,
expiry=datetime(2025, 6, 27),
option_type="call",
market_price=3450,
spot_price=72000,
time_to_expiry=0.083
),
]
greeks = await service.calculate_iv_batch(options)
for g in greeks:
print(f"IV: {g.implied_vol:.4f}, Delta: {g.delta:.4f}")
if __name__ == "__main__":
asyncio.run(demo())
4.3 Full Market Making System - Production Template
# market_maker_bybit_options.py
Production-ready market making system for Bybit Options
Combines Tardis + HolySheep for real-time IV surface
import asyncio
import aiohttp
import json
import signal
import sys
from datetime import datetime, timedelta
from typing import Dict, List, Optional
from dataclasses import dataclass, field
from collections import deque
import numpy as np
from scipy.stats import norm
@dataclass
class MarketData:
"""Real-time market data container"""
symbol: str
bid_price: float
ask_price: float
bid_size: float
ask_size: float
last_price: float
timestamp: datetime
funding_rate: float = 0.0
@dataclass
class Position:
"""Option position"""
symbol: str
size: float
entry_price: float
side: str # 'long' or 'short'
class BybitOptionsMarketMaker:
"""
Market Making System for Bybit Options
Features:
- Real-time tick ingestion via Tardis
- IV surface construction
- Smart order routing
- Risk management
"""
def __init__(
self,
tardis_key: str,
holysheep_key: str,
bybit_api_key: str,
bybit_secret: str
):
self.tardis_key = tardis_key
self.holysheep_key = holysheep_key
self.bybit_api_key = bybit_api_key
self.bybit_secret = bybit_secret
# Market data storage
self.market_data: Dict[str, MarketData] = {}
self.iv_surface: Dict[str, float] = {}
self.positions: List[Position] = []
# HolySheep IV service
self.iv_service = None # Initialize in async context
# Configuration
self.max_position_size = 10 # BTC
self.spread_bps = 20 # Base spread in basis points
self.iv_refresh_interval = 1.0 # seconds
self.risk_limits = {
"max_delta": 50,
"max_gamma": 10,
"max_vega": 100
}
# Performance metrics
self.metrics = {
"trades_today": 0,
"pnl_today": 0.0,
"latency_p50": [],
"latency_p99": []
}
self._running = False
async def initialize(self):
"""Initialize connections and load instruments"""
from iv_calculation_service import HolySheepIVService
self.iv_service = HolySheepIVService(
api_key=self.holysheep_key,
model="deepseek-v3.2" # $0.42/MTok - cheapest option
)
# Load all available option instruments
await self._load_instruments()
print(f"[MarketMaker] Initialized with {len(self.market_data)} instruments")
async def _load_instruments(self):
"""Load all Bybit Options instruments from Tardis"""
async with aiohttp.ClientSession() as session:
url = "https://api.tardis.dev/v1/exchanges/bybit_options/instruments"
headers = {"Authorization": f"Bearer {self.tardis_key}"}
async with session.get(url, headers=headers) as resp:
if resp.status == 200:
instruments = await resp.json()
# Filter for near-dated options (within 7 days)
for inst in instruments:
expiry = datetime.fromisoformat(inst["expiry"].replace("Z", "+00:00"))
if expiry - datetime.now() <= timedelta(days=7):
self.market_data[inst["symbol"]] = MarketData(
symbol=inst["symbol"],
bid_price=0,
ask_price=0,
bid_size=0,
ask_size=0,
last_price=0,
timestamp=datetime.now()
)
async def start(self):
"""Start the market making system"""
self._running = True
# Create tasks
tasks = [
asyncio.create_task(self._websocket_listener()),
asyncio.create_task(self._iv_refresh_loop()),
asyncio.create_task(self._order_management_loop()),
asyncio.create_task(self._risk_monitor_loop()),
asyncio.create_task(self._metrics_reporter())
]
print("[MarketMaker] System started")
try:
await asyncio.gather(*tasks)
except asyncio.CancelledError:
print("[MarketMaker] Shutdown initiated")
finally:
self._running = False
async def _websocket_listener(self):
"""Listen to Tardis WebSocket for real-time data"""
ws_url = "wss://api.tardis.dev/v1/feeds"
while self._running:
try:
async with aiohttp.ClientSession() as session:
async with session.ws_connect(ws_url, timeout=60) as ws:
# Subscribe to all instruments
subscribe = {
"type": "subscribe",
"exchange": "bybit_options",
"channels": ["trades", "orderbook"],
"symbols": list(self.market_data.keys())
}
await ws.send_json(subscribe)
async for msg in ws:
if not self._running:
break
if msg.type == aiohttp.WSMsgType.TEXT:
data = json.loads(msg.data)
await self._process_tick(data)
except Exception as e:
print(f"[MarketMaker] WebSocket error: {e}, reconnecting...")
await asyncio.sleep(5)
async def _process_tick(self, data: Dict):
"""Process incoming tick data"""
symbol = data.get("symbol")
if not symbol or symbol not in self.market_data:
return
start = asyncio.get_event_loop().time()
if data["type"] == "trade":
self.market_data[symbol].last_price = float(data["price"])
self.market_data[symbol].timestamp = datetime.now()
elif data["type"] == "orderbook":
bids = data.get("bids", [])
asks = data.get("asks", [])
if bids and asks:
self.market_data[symbol].bid_price = float(bids[0][0])
self.market_data[symbol].bid_size = float(bids[0][1])
self.market_data[symbol].ask_price = float(asks[0][0])
self.market_data[symbol].ask_size = float(asks[0][1])
latency = (asyncio.get_event_loop().time() - start) * 1000
self.metrics["latency_p50"].append(latency)
if len(self.metrics["latency_p50"]) > 1000:
self.metrics["latency_p50"].pop(0)
async def _iv_refresh_loop(self):
"""Periodically refresh IV surface using HolySheep AI"""
while self._running:
try:
# Build IV surface for all instruments
for symbol, data in self.market_data.items():
if data.bid_price > 0 and data.ask_price > 0:
# Extract strike and expiry from symbol
strike = self._extract_strike(symbol)
option_type = "call" if "C" in symbol else "put"
T = self._calculate_time_to_expiry(symbol)
# Calculate mid price
mid = (data.bid_price + data.ask_price) / 2
# Calculate local IV as baseline
S = data.last_price if data.last_price > 0 else 100000 # Approx BTC
local_iv = self._calculate_local_iv(S, strike, mid, T, option_type)
self.iv_surface[symbol] = local_iv
# Batch update IV via HolySheep for complex calculations
if self.iv_service and len(self.iv_surface) > 0:
# Use HolySheep for sophisticated IV interpolation
pass # Implement as needed
except Exception as e:
print(f"[MarketMaker] IV refresh error: {e}")
await asyncio.sleep(self.iv_refresh_interval)
def _calculate_local_iv(self, S: float, K: float, price: float, T: float, opt_type: str) -> float:
"""Calculate IV locally using Newton-Raphson"""
sigma = 0.5
r = 0.05
for _ in range(50):
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
d2 = d1 - sigma*np.sqrt(T)
if opt_type == "call":
opt_price = S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)
else:
opt_price = K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1)
diff = price - opt_price
if abs(diff) < 1e-6:
break
vega = S*norm.pdf(d1)*np.sqrt(T)
sigma += diff / (vega + 1e-10)
return sigma
def _extract_strike(self, symbol: str) -> float:
"""Extract strike price from symbol"""
import re
match = re.search(r'-(\d+)', symbol)
return float(match.group(1)) if match else 0
def _calculate_time_to_expiry(self, symbol: str) -> float:
"""Calculate time to expiry from symbol"""
import re
# Format: BTC-27JUN2025-73000-C
match = re.search(r'(\d{2})(\w{3})(\d{4})', symbol)
if match:
day, month, year = match.groups()
month_map = {'JAN': 1, 'FEB': 2, 'MAR': 3, 'APR': 4, 'MAY': 5, 'JUN': 6,
'JUL': 7, 'AUG': 8, 'SEP': 9, 'OCT': 10, 'NOV': 11, 'DEC': 12}
expiry = datetime(int(year), month_map[month], int(day))
return (expiry - datetime.now()).days / 365.0
return 0.083
async def _order_management_loop(self):
"""Manage orders based on market conditions"""
while self._running:
try:
for symbol, data in self.market_data.items():
if data.bid_price > 0 and data.ask_price > 0:
# Calculate fair value and spread
fair_value = (data.bid_price + data.ask_price) / 2
iv = self.iv_surface.get(symbol, 0.5)
# Adjust spread based on IV and position
base_spread = fair_value * self.spread_bps / 10000
# Calculate bid/ask quotes
bid = fair_value - base_spread / 2
ask = fair_value + base_spread / 2
# Place orders (implement API call here)
# await self._place_order(symbol, bid, ask)
except Exception as e:
print(f"[MarketMaker] Order management error: {e}")
await asyncio.sleep(0.5)
async def _risk_monitor_loop(self):
"""Monitor and enforce risk limits"""
while self._running:
try:
total_delta = sum(p.size * (0.5 if p.side == 'long' else -0.5) for p in self.positions)
total_gamma = sum(abs(p.size) * 0.01 for p in self.positions)
total_vega = sum(abs(p.size) * iv for symbol, iv in self.iv_surface.items())
if abs(total_delta) > self.risk_limits["max_delta"]:
print(f"[RiskAlert] Delta limit exceeded: {total_delta}")
# Trigger hedging
except Exception as e:
print(f"[MarketMaker] Risk monitor error: {e}")
await asyncio.sleep(1.0)
async def _metrics_reporter(self):
"""Report performance metrics"""
while self._running:
await asyncio.sleep(60)
p50 = np.percentile(self.metrics["latency_p50"], 50) if self.metrics["latency_p50"] else 0
p99 = np.percentile(self.metrics["latency_p50"], 99) if self.metrics["latency_p50"] else 0
print(f"""[Metrics] Trades: {self.metrics['trades_today']}, PnL: ${self.metrics['pnl_today']:.2f},
Latency P50: {p50:.1f}ms, P99: {p99:.1f}ms,
In