Worked perfectly. I didn't do any scientific testing, but I think this method is probably on the order of 25X faster than my previous 'shifting array elements' method.
On Wed, Aug 5, 2009 at 5:27 PM, ShaggsTheStud <[email protected]>wrote: > No problem. Tell me how it works out for you. > > > On Wed, Aug 5, 2009 at 3:12 AM, MKoistinen <[email protected]> wrote: > >> >> I was at first concerned about using such 'heavy' structures as a >> LinkedList, but as the size of the window gets larger, this is far >> superior -- thanks, Shaggs. >> >> On Aug 5, 2:59 am, ShaggsTheStud <[email protected]> wrote: >> > Now you are starting to talk about what I write every day for work. >> > >> > First thing that comes to mind for a sliding window is to use a linked >> > list. Add to the end, remove from the begging. >> > >> > For running sums, you do something like this (very rough pseudocode): >> > >> > LinkedList Xs; >> > LinkedLIst Ys; >> > >> > void calculate(newX, newY) >> > { >> > Xs.addLast(newX); >> > Ys.addLast(newY); >> > >> > oldX = Xs.getFirst(); >> > oldY = Ys.getFirst(); >> > Xs.removeFirst(); >> > Ys.removeFirst(); >> > >> > Xsum -= oldX; >> > Ysum -= oldY; >> > XXsum -= oldX * oldX; >> > XYsum -= oldX * oldY; >> > >> > Xsum += newX; >> > Ysum += newY; >> > XXsum += newX * newX; >> > XYsum += newX * newY; >> > >> > } >> > >> > Now you don't waste so much time summing squares, etc. >> > >> > Another bit of advice: for large amounts of accumulation, integer values >> may >> > be more predictable, as they don't accumulate weird bits of noise from >> > floating point errors. I have not verified this actually happens in the >> > real world. >> > >> > And another option is to store less data and create "weighted average >> bars", >> > covering longer amounts of time. >> > >> > On Tue, Aug 4, 2009 at 8:22 AM, nonlinear5 <[email protected]> >> wrote: >> > >> > > I have a new indicator, called DepthPriceCorrelation. It's not in the >> > > release yet, but it's in SVN >> > >> > >http://code.google.com/p/jbooktrader/source/browse/trunk/source/com/j. >> .. >> > >> > > The indicator is based on the idea that current price can be >> > > considered "fair" when the correlation between market depth balances >> > > and market prices is positive. This positive correlation occurs when: >> > >> > > -- high depth balances are accompanied by higher prices >> > > or >> > > -- low depth balances are accompanied by lower prices >> > >> > > When the correlation is negative, the prices are moving in the >> > > direction opposite from the direction of depth balances, and I call it >> > > a "high tension" condition. This is when my strategy gets into a >> > > position on the bet that the tension will ease and the correlation >> > > will return to its "normal" positive value. Here is an example of such >> > > a strategy: >> > >> > >http://code.google.com/p/jbooktrader/source/browse/trunk/source/com/j. >> .. >> > >> > > Now, to calculate the correlation, the indicator simply updates the >> > > running sums for prices and balances, and then uses a standard >> > > correlation coefficient formula to come up with the result. This is >> > > very efficient, and it works well. The problem is, sometime in the >> > > second half of the trading session, the indicator becomes too "stale", >> > > because it uses all the data accumulated so far during the trading >> > > session. So, at say, 2pm, the indicator would represent the >> > > correlation between balances and prices based on all the data from >> > > 9:30am to 2pm, while my strategy is looking for a shorter term >> > > correlation, such as the last 2 hours. It's certainly possible to >> > > recalculate the indicator based on this 2-hour moving window, but it >> > > would be very computationally expensive, since every time, I would >> > > need to loop through the last two hours of values, instead of simply >> > > updating the running sums. >> > >> > > So, here is the question for the algorithmically inclined. How do I >> > > *efficiently* calculate the correlation between X and Y in a moving >> > > time window? >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "JBookTrader" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/jbooktrader?hl=en -~----------~----~----~----~------~----~------~--~---
