Joined: |
May 10, 2004 11:47 PM |
Last Post: |
Nov 13, 2004 02:39 PM |
Last Visit: |
Dec 1, 2006 01:04 PM |
Website: |
|
Location: |
|
Occupation: |
Econometric software developer |
Interests: |
options and derivatives |
|
AIM: |
|
ICQ: |
|
MSN IM: |
|
Yahoo IM: |
|
|
ronsch99 has contributed to 8 posts out of 21251 total posts
(0.04%) in 7,456 days (0.00 posts per day).
20 Most recent posts:
A DTN salesman mentioned to me that there's a way to get best bid and offer. I'm trying to construct one minute market snapshots which only really need best bid and offer at each minute. I looked into documentation but I couldn't find it. Can someone help?
I fiddled with the program and got it down to 350 or so symbols -- I really only want three months of option chains -- but it still is bogged down. The printing to a file isn't slowing things because I had it just print the QQQ quote that it stored into the data base which happens only every minute, and the quotes still showed the stream bogged down. Nothing is getting printed to the console, if anything is printed it is to a file.
I am now wondering if my routine for parsing the update messages is the problem. I'm not a sophisticated C programmer and it could be inefficient. Another thing is that I really don't need to parse every update message. The datafeed generates hundreds of update messages in a minute and I really only need to parse some of them.
This problem isn't the timestamp, nor is it that the data isn't updating. The reason, as I've tried to explain, is that the update messages can't seem to keep up with the sheer volume of transactions in the QQQ. A half hour after the market has started, the update messages are still delivering information on trades less than a minute after the market has started. The timestamps are correct and the update messages are being sent. The problem is that there are hundreds, maybe thousands of transactions in QQQ in the first few minutes of the trading day, and the updating messages take an hour to catch up.
It also appears that the update messaging gets a little bogged down throughout the day, that is, the messaging can't keep up with the large number of transactions. The result is that I can't get timely quotes on the QQQ. I can go to a lot of effort to prove this, but I can assure you that it is happening. And I believe the solution is going to be finding out a way to get the quotes, that is, I'm doing something wrong.
All I want is the QQQ option chain. It just doesn't seem to me that that shouldn't be so hard to do. Along with the option chain I have to have the value of the underlying, i.e., the QQQ, and the risk-free interest rate, the IRX.XO. And I need them on some interval, one minute would be nice.
Right now I download the option chain symbols from the data feed, and construct a watch list including those symbols and the QQQ and the IRX.X0. Then in a loop I call recv() continously throughout the trading day parsing the update messages and filling an array for the option data, and two doubles for the QQQ and IRX.X0 quotes. Then every minute the contents of the array and two doubles are uploaded to a database. The problem occurs when the update messaging gets bogged down most likely due to a large quantity of transactions resulting in a large number of update messages which the data feed has trouble keeping up with, and as a result the QQQ quote doesn't get updated in a timely fashion.
I tried setting this up different. I tried shutting down and restarting the data feed after the one minute updating of the database, but I haven't been able to get this to work.
As I described in my post, I printed all of the updates for QQQ and QQQ options for one hour starting with the openning at 9:30 (which is when the markets open on the East Coast). The file is about one megabyte of updates. All of the updates in that file are time stamped between 9:30 and 9:31. There are hundreds (maybe thousands) of updates in that file, and I'll admit that some of the delay is in printing to the file, but even so it should be further ahead than 9:31.
Maybe part of the problem is that I have this large watch list, QQQ, IRX.XO (interest rate for Black and Scholes), and about 600 or so QQQ option contract symbols. I might be able to get timely data on the QQQ if that was the only symbol on my watch list, but I have to have the option data as well.
I can assure you there's a problem, and what I'm seeking is help. Has anybody else implemented the kind of watch list I have? How do they do it? The only thing I can think of is to log off the feed and then log back on in 60 seconds. As you state the QQQ is so active I don't need to watch more than a few seconds to get a timely update. The only problem with that is that I might have problems getting timely option data because some of the contracts are not as active as the underlying. So I'd rather watch continuously and store into a database at a selected interval. But I can assure you the continous updating is not working.
When I said constant over a 10 minute period, I mean that it was the same value for each of the minutes over the 10 minute period. It would be quite extraordinary for the fluctuations in the QQQ to have hit the same value for each of the minutes over the ten minutes. I'll try pulling the one minute history but comparison with the Yahoo intra day plots clearly show a discrepancy.
I had my program print out the buffer from the call to recv() for the first hour of the trading day and I found out what the problem might be. The Update string prints a time (field 18), and at 10:30 (an hour after trading has begun) the Update string was returning a time of 9:31. In other words, the datafeed was nearly an hour behind. The QQQ is a very highly traded equity and I suspect that the datafeed isn't able to keep up with the trading. It is trying to generate an update on every trade and there are hundreds of them in the first minutes of trading. I'm sure it's not as bad at other times of the day, but I suspect that the problems I'm having are due to the failure of the Update to keep up with the trading. This is a serious problem for my analysis. I absolutely require timely information on the QQQ.
My goal is to record into a database prices of an equity (QQQ) and its options by the minute. And I'm having problems getting results that look like what I'm observing on Yahoo or PCQuote.
I cloned the console_stream C++ example. The functions memset() and recv() are called in a loop during trading hours. The string returned by recv() is parsed, and any Fundamental ("P") or Update ("Q") for QQQ is parsed for "Last" and the result is stored in a double. Then once a minute (or so), the current stored value of QQQ stored is entered into a database. When I look at the sequence at the end of a trading day, I'm finding that the recorded values aren't really matching what I've observed at Yahoo or PCQuote. In particular a significant amount of the volatility is lost. The prices in the database are frequently constant over five to ten minutes and that doesn't appear to be right. There should be more variation in the QQQ than that. My measure of volatility is the most important part of my analysis, and the results I'm getting show a volatility that is far to low. It appears to me that the Update isn't updating as frequently as it should. Is there some better way to do this? Should I be recording the "asked" rather than the "last"?
Options pricing requires knowing the number of trading days to expiry. The Fundamental and Summary IQfeed reports return the total number of days, not the number of trading days, to expiry. I know that most traders who don't really know the math and who use software that uses total number of days because it's easier go with total number of days. And it is true that when expirys are more than a few months away the difference is not very large. But for the Black & Scholes and other models, as Hull states (in _Options,_Futures,_and_Other_Derivatives_), number of trading days is required. And it makes a difference when the time to expiry is less than a month. So I'd like an additional quantity, number of trading days to expiry.
It doesn't seem to be working. It indicates an open market even when the market is closed. I would really like to use this in my program which will be running 365/24/7 and I'd like to program it to sleep when the market's are closed. I could program it to run 9:30-16:00 Mon-Fri, and I could even give it a list of holidays. The problem is, though, that the markets I'm interested in sometimes close at noon and they don't post that information in advance.
Should this go on the wish list?
|
|