⚡ Bolt: Use binary search for time-series lookups#67
Conversation
Co-authored-by: toreleon <42534763+toreleon@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
Also bump dependencies (undici, ws) to fix high severity vulnerabilities failing CI audit. Co-authored-by: toreleon <42534763+toreleon@users.noreply.github.com>
💡 What: Replaced
Array.prototype.filterwith a customfindLastBarIndexbinary search function for time-based lookups on chronologically sorted market data arrays.🎯 Why: In the backtesting hot loop (
backtestRunner.ts), simulating historical data (priceOverride,vnindexAt) was previously scanning the entire time-series array via.filter(b => b.time <= asOf)on every single turn for every ticker. This resulted in O(N) array traversals and unnecessary array allocation in memory for every step of the backtest.📊 Impact: Reduces simulation loop time complexity for data lookups from O(N) to O(log N) per turn, avoiding large object allocations entirely. This should make backtests spanning many tickers and periods noticeably faster.
🔬 Measurement: Run
pnpm test(which executestests/clock.test.tsto verify the clipping logic). Monitor standard backtest execution times before and after this change.PR created automatically by Jules for task 2207404779910620713 started by @toreleon