27 comments

[ 2.7 ms ] story [ 62.3 ms ] thread
Weeeeeeeell damn...

I had exactly this idea a few weeks ago, and never put any time into it.

Just goes to show you...

This is pretty cool, good work

Yeah it's was a fun little project, hopefully useful for somebody. ;)
But, and correct me if I'm wrong obviously, this isn't sending quotes to the client real time, it's just sending them in 5 second batches?

I guess I'm struggling to see how:

"Stock quotes are pulled from Google Finance and are real-time."

and

"By default stock quotes are fetched every 5 seconds, and pushed to the client."

Work together...

Great work on sharing the code though, thanks.

In finance, real-time quotes means not delayed by 20 minutes. The price returned should be real-time in those terms.
In finance, real-time means receiving each tick or trade record. Aggregating prices over 5 seconds and sending that data every 5 seconds is "aggregated data over 5 seconds".
Upvoted.

"Real time. You keep using that phrase. I do not think it means what you think it means."

This would be neat if it was secure, unfortunately anyone can look up your server from source and message it anything they please.
A quick note for anyone thinking that this could help you build that finance app you've been putting off - getting actual real-time stock quotes legitimately is actually fairly expensive/involved.

Screen scraping Google / Yahoo finance and using that data in an app is (I believe) explicitly against their TOS. Whether or not they ever enforce that is another story...

The actual real-time data streams are highly controlled and regulated by a few big players.

(Just my $0.02 after having looked into it about a year ago for a social investing app I was building)

That data is also 15 minutes old (or older!) from what I recall. Probably not your best choice for anything remotely "realtime".

As parent said, you're better off getting a real market stream which will probably use FIX: http://en.wikipedia.org/wiki/Financial_Information_eXchange

It should be realtime (not delayed 20 minutes), we will find out in 8 minutes if this is true. :)
Confirmed real-time, just streamed in:

    {
	"ticker": "AAPL",
	"exchange": "NASDAQ",
	"price": "598.86",
	"change": "-9.48",
	"change_percent": "-1.56",
	"last_trade_time": "Apr 19, 9:30AM EDT"
    }
Yeah, while this is cool I'm sure it's a violation of Googles TOS. I'm sure they'd enforce it if this gets traction.
(comment deleted)
I guess this data can only for personal use but not public. Am I right?
Cool demo, but a real-time quote is measured in the ~20msec range. A real-time trade would be <50msec round trip.

A real-time quote provider is someone who's server is physically connected to a direct exchange feed, as in you have a 5' wire running from your box to one of the CME's servers, not someone who's obtaining web-based delayed quotes.

Everybody seems to be confusing the definition of real-time quotes in the context of consumer trading. When eTrade or Scottrade says they have real-time quotes, its the same as Google Finance (which this is pulling) in that, its not delayed 20 minutes. Beyond that, expecting a 5' or less connection to an exchange feed is just absurd.
You can get those feeds, but they're very expensive. High frequency trading is done using actual real time data at millisecond resolution. The barrier to entry is very high, which is why I think flash trading gives an unfair advantage to the wealthy. Of course, thats really the story of modern economics.....
To expand on this a bit:

Within the US there are a number of ECNs/exchanges. Each one publishes there own order book including prices and sizes on each side of the book. To get the most accurate information possible on market prices, you need to have a direct connection to each exchange and usually, you want to be co-located within the same data center as them. Unless you're a market maker, high-frequency trader, or run an institutional electronic trading platform, this level of data is not necessary.

For most human traders, a consolidated feed is sufficient; that data comes from an authority called the CTA. From wikipedia: "Since the late 1970s, all SEC-registered exchanges and market centers that trade NYSE or AMEX-listed securities send their trades and quotes to a central consolidator where the Consolidated Tape System (CTS) and Consolidated Quotation System (CQS) data streams are produced and distributed worldwide." The consolidation process delays the data by ~100 ms. This is still considered real-time by many people including professional traders.

Most HN readers are getting a conflated version of the consolidated feed. Google's "real-time" feed falls into this category and adding 5 seconds doesn't really matter at this point.

> For most human traders

You're living in the past.

> The consolidation process delays the data by ~100 ms. This is still considered real-time by many people including professional traders.

A couple of months ago we achieved round-trip [cleared] trades between Tokyo and New York of under 50ms. That's your barrier to entry.

You're not in business if you're looking at an average of 100ms.

Human traders = past? You should see the floor that I work on. There are plenty, and they're doing very well. No algo has ivy league connections.

> You're not in business if you're looking at an average of 100ms.

You're not in business if your business is latency arb. Buffett doesn't care about your 50 ms.

I'm not sure if this is possible. According to Wolfram Alpha the distance between NYC and Tokyo is ~10879 Kilometers (as the crow flies, not as the cable lies). The speed of light in Kilometers per second is 299,792.458

If we evaluate (10879 / 299792.458) * 1000 = 36.28. This is for a single leg. So we get 72.57 milliseconds just for as the crow flies transport. This does not include other factors that contribute to latency (network, processing, etc.)

For "round trip" as you say then this number should be multiplied by 2 as it has to go NYC -> Tokyo, Tokyo -> NYC.

Have you developed some sort of faster than the speed of light communication mechanism we haven't heard of? Inquiring minds demand to know.

Edit: One possible explanation is that you are using multiple time sources that are not synchronized. E.g. if you send a FIX message to an ECN and use the clock available on your machine and then use the ECN's timestamps somewhere in your calculation this renders the measurement invalid because you can't ensure that your clocks are synchronized.

I caught the stream changing things up right in the middle? What is the deal with this? -- ie this was on the main page where it is looking for AAPL and not MSFT

{ "ticker": "MSFT", "exchange": "NASDAQ", "price": "31.26", "change": "+0.12", "change_percent": "0.38", "last_trade_time": "Apr 19, 10:17AM EDT" } { "ticker": "AAPL", "exchange": "NASDAQ", "price": "598.27", "change": "-10.07", "change_percent": "-1.66", "last_trade_time": "Apr 19, 10:17AM EDT" }

Yeah, too tired to figure it out now, its a bug. Basically, clients are listening for a WebSocket event, and the server is broadcasting everything. If you can fix it up, would be amazing.