
Quote Stream - Push real-time stock quotes in JSON over web-sockets with node.js - nodesocket
http://nodesocket.github.com/quote-stream/
======
corry
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)

~~~
getsat
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>

~~~
nodesocket
It should be realtime (not delayed 20 minutes), we will find out in 8 minutes
if this is true. :)

~~~
nodesocket
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"
        }

------
neiled
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.

~~~
nodesocket
In finance, real-time quotes means not delayed by 20 minutes. The price
returned should be real-time in those terms.

~~~
jrockway
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".

------
ruffyen
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" }

~~~
ananthrk
Came here to say the same thing (including trying MSFT) :)

Also, the URL "<http://xhv51cz0.nodesocket.com/quote-stream/MSFT/> works but
"<http://xhv51cz0.nodesocket.com/quote-stream/MSFT> does not (without "/" in
the end)

------
anonhacker
This would be neat if it was secure, unfortunately anyone can look up your
server from source and message it anything they please.

------
wowfat
On a related note we put out a tech demo showing nodejs and socketio recently.
<http://www.webdigi.co.uk/fun/space/>

It uses iPhone accelerometer to control the ship on your browser game!

------
manuscreationis
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

~~~
nodesocket
Yeah it's was a fun little project, hopefully useful for somebody. ;)

------
dodoflying
I guess this data can only for personal use but not public. Am I right?

~~~
julien_p
It's taking the data from google.com, for example
[http://www.google.com/finance/info?client=ig&q=AAPL](http://www.google.com/finance/info?client=ig&q=AAPL)
which AFAIK isn't a public Google API. As noted in other comments, real time
quote APIs tend to be subscription services that are somewhat expensive ...

------
jsavimbi
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.

~~~
anonDataUser
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.

~~~
jsavimbi
> 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.

~~~
cluda01
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.

