{"id":996,"date":"2026-07-13T20:38:25","date_gmt":"2026-07-13T20:38:25","guid":{"rendered":"https:\/\/david.bookstaber.com\/?p=996"},"modified":"2026-07-13T20:57:29","modified_gmt":"2026-07-13T20:57:29","slug":"streaming-real-time-market-data-into-excel-why-rtd-beats-an-api-for-analysts","status":"publish","type":"post","link":"https:\/\/david.bookstaber.com\/?p=996","title":{"rendered":"Streaming Real-Time Market Data into Excel: Why RTD Beats an API for Analysts"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">An analyst doesn&#8217;t so much use Excel as live in it. &nbsp;The spreadsheet is where the models, the risk, and the intuition already sit. &nbsp;So when &#8220;get live market data into your model&#8221; turns into &#8220;learn our REST API, manage an auth token, write a polling loop, and reshape JSON,&#8221; the work has quietly moved out of the environment where you&#8217;re fluent and into one where you aren&#8217;t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I ran a live trading dashboard in Excel for years, and before RTD it was a Rube Goldberg machine. &nbsp;Positions and account values came in over DDE, which required (a) a separate &#8220;feeder&#8221; Excel process with its own workbook just to receive the DDE, and (b) a Java socket bridge connecting the DDE to the broker&#8217;s trading platform. &nbsp;Real-time market data came through yet another Excel add-in. &nbsp;I got the polling cycle from feeder to dashboard running about as well as it could run. &nbsp;It could still stumble or break, and the poll-and-populate cycle was most disruptive when I could least afford it: during peak market periods, like the minutes just before the close. &nbsp;Three processes and a Java bridge, just to keep one workbook current.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There&#8217;s an older, better-fit answer hiding in plain sight: RTD (Real-Time Data), a Microsoft protocol that has been sitting in Excel since 2002. &nbsp;Twenty-four years! &nbsp;Unlike a =WEBSERVICE() call you have to nudge to recalculate, an RTD server hands Excel updates as fast as they change and as fast as Excel can receive them. &nbsp;The implementation matches the mental model: a cell is a subscription, not a snapshot. &nbsp;The spreadsheet stays live without the analyst writing anything more than a native Excel formula.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">What does polling actually cost? &nbsp;A timer-driven refresh refetches mostly unchanged data, so it&#8217;s expensive, and it still lags the moves you care about, so it&#8217;s slow. &nbsp;RTD only updates what changes when it changes. &nbsp;But the bigger difference is one you feel rather than measure: hardened RTD just works \u2013 transparently, reliably. &nbsp;You never hesitate before editing a cell, wondering whether this keystroke will upset the whole contraption and freeze the workbook, flip it into manual-calculation mode, or silently wedge the feeder. &nbsp;I never tracked latency statistics \u2013 I don&#8217;t do ultra-high-frequency work anymore \u2013 and the old system did run at the refresh rates we needed. &nbsp;It was just heavy and fragile, and the replacement isn&#8217;t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There&#8217;s also a hidden tax in the API path that rarely gets billed honestly: reshaping. &nbsp;JSON is a tree and a spreadsheet is a grid, and every analyst who consumes a web API ends up owning that transform. &nbsp;RTD lands data already cell-shaped.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The general principle shows up in <a href=\"https:\/\/david.bookstaber.com\/?page_id=976\">everything I build<\/a>: meet people in the environment where they&#8217;re already fluent, and tuck the plumbing behind a wall they never have to think about breaking open. \u00a0The analyst&#8217;s environment is a grid of live cells. \u00a0Give them realtime data, not snapshots.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>An analyst doesn&#8217;t so much use Excel as live in it. &nbsp;The spreadsheet is where the models, the risk, and&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[15,14],"tags":[42],"class_list":["post-996","post","type-post","status-publish","format-standard","hentry","category-finance","category-technology","tag-excel-rtd","post-archive"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=\/wp\/v2\/posts\/996","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=996"}],"version-history":[{"count":2,"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=\/wp\/v2\/posts\/996\/revisions"}],"predecessor-version":[{"id":999,"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=\/wp\/v2\/posts\/996\/revisions\/999"}],"wp:attachment":[{"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=996"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=996"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/david.bookstaber.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=996"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}