{"slug":"latency-models-in-hft-backtests","qid":"mid_drift","label":"mid_drift","post_title":"latency-models-in-hft-backtests","post_url":"/blog/latency-models-in-hft-backtests#q-mid_drift","columns":["latency_horizon","avg_mid_move_bps"],"rows":[{"latency_horizon":"0.1 s","avg_mid_move_bps":0.224},{"latency_horizon":"0.5 s","avg_mid_move_bps":0.591},{"latency_horizon":"1.0 s","avg_mid_move_bps":0.877},{"latency_horizon":"5.0 s","avg_mid_move_bps":2.232}],"shape":"ranking","sql":"WITH grid AS\n(\n    SELECT\n        intDiv(toUnixTimestamp64Milli(sip_timestamp), 100)                       AS slot,\n        argMax((toFloat64(bid_price) + toFloat64(ask_price)) / 2, sip_timestamp) AS mid\n    FROM global_markets.cache_stocks_quotes\n    WHERE ticker = 'AAPL'\n      AND sip_timestamp >= '2026-09-15 14:00:00'\n      AND sip_timestamp <  '2026-09-15 15:00:00'\n      AND bid_price > 0\n      AND ask_price > bid_price\n    GROUP BY slot\n),\nlagged AS\n(\n    SELECT\n        mid,\n        lagInFrame(mid, 1)  OVER w AS mid_100ms_ago,\n        lagInFrame(mid, 5)  OVER w AS mid_500ms_ago,\n        lagInFrame(mid, 10) OVER w AS mid_1s_ago,\n        lagInFrame(mid, 50) OVER w AS mid_5s_ago\n    FROM grid\n    WINDOW w AS (ORDER BY slot ASC ROWS BETWEEN 50 PRECEDING AND CURRENT ROW)\n),\nmoves AS\n(\n    SELECT *\n    FROM lagged\n    WHERE mid_100ms_ago > 0 AND mid_500ms_ago > 0 AND mid_1s_ago > 0 AND mid_5s_ago > 0\n)\nSELECT\n    horizon.1                                        AS latency_horizon,\n    round(10000 * avg(abs(horizon.2)) / avg(mid), 3) AS avg_mid_move_bps\nFROM moves\nARRAY JOIN\n[\n    ('0.1 s', mid - mid_100ms_ago),\n    ('0.5 s', mid - mid_500ms_ago),\n    ('1.0 s', mid - mid_1s_ago),\n    ('5.0 s', mid - mid_5s_ago)\n] AS horizon\nGROUP BY latency_horizon\nORDER BY avg_mid_move_bps ASC","computed_at":"2026-09-24T15:00:47.891911+00:00","elapsed":0.002009343}