I'm not sure where the problem is and I think there is
more than one problem to solve. My assumption at present is that I have
done something really silly. I hope someone can help me out.
I have constructed a volume calculation for Aussie sector
indexes using the SetForeign function. The code works great on EOD
local data (even where some of the constituent stocks have missing
bars) BUT it performs totally differently for intraday data.
Data sources tested:
A. EOD Data only
B. Marketcast RT plugin (1 minute data local storage in AB)
C. Local data store of 1 minute data
Cut down version of the code is provided at the base of
this post.
On EOD data, whilst displaying XIJ, the volume indicator
provides a summation of each days volume as a histogram and details the
individual volumes in the interpretation section. I consciously delete
a couple of daily bars for CPU and the code correctly replaced the gaps
with zero volume for that period.
However, when switching to the intraday databases, holes
suddenly appear in the data when each constituent ticker has valid data
for that period. i.e. if I display the daily price/volume chart for
each ticker, the code below shows the correct volume for today for the
same ticker (and every period as there are no missing days in the data
for any ticker). However there are zero volume values for some of the
other tickers 9depending on which bar is selected) even though
individually each has volume for that day.
It is very hard to describe, so I hope someone understands
what I am getting at. It appears to me that when the intraday data is
compressed to provide daily bars, some empty bar characteristics may be
propogating to a daily bar, but only when accessed via GetForeign. Or
rather, I have made an obvious and silly coding error. I truly hope it
is the later. What concerns me is that I cannot replicate the problem
on the EOD data whilst viewing daily/weekly/monthly charts. But it is
easily reproduced using daily/30 minute/weekly etc charts with a 1
minute database. Note that the tickers DO have gaps between 1 minute
bars as the stocks are not continuously traded. This is the norm for
Aus as mentioned in a recent query on pitch forks.
The code below allows for fill to be enabled, this
produces some more interesting (but undesirable) effects which deserve
their own post. Once again, I hope it is my code that has stuffed up
(and easily rectified). But one problem at a time.
regards
Chris (Shawky)
P.S. I really like the new formula environment, include
files, parameter options etc, drag and drop, especially the insert
linked facility. Looking forward to an Overlay Linked option in the
future ;)
The code:
PadEmptyBars=ParamToggle("Pad
Empty Bars","No|Yes",0);
tickers="CPU,BCA,IRE,VSL";
MyVol = 0;
for ( num = 0; ( sym = StrExtract(tickers,num) ) != "" ; num++)
{
if ( SetForeign(sym,PadEmptyBars) )
{
VarSet("Vol"+num, IIf(IsNull(V),0,V) );
RestorePriceArrays();
}
else
{
printf("Ticker "+sym+" not found\n");
VarSet("Vol"+num, 0);
}
}
for ( i = 0; i < num; i++ )
{
MyVol = MyVol + VarGet("Vol"+i);
}
Plot( MyVol, _DEFAULT_NAME(),
IIf( C > O, ParamColor("Price Up Color", colorLightGrey ),
ParamColor("Price Down Color", colorGrey50 ) ),
ParamStyle( "Price Style", styleHistogram | styleThick |
styleOwnScale, maskHistogram )
);
for ( i = 0; i < num; i++ )
printf( " " + StrExtract(tickers,i) + " " +
WriteVal(VarGet("Vol"+i),10.0) + "\n");