Hi all,

I needed to have a months worth of ES (S&P 500 eMini) 5 second data  
for my backtesting.  eSignal only provides 10 days of backfill though  
for the 5 second data.  They have a continuous contract, but when it  
rolls over it changes the oldest prices, so it would have to be  
backfilled.  I have collected 200K bars of the December contracts  
which just rolled to the March contracts.

I wrote an AFL to produce a continuous contract for ES by combining  
the two contracts into an ATC ticker (~ES).  Then I use this ticker  
to run my real time indicator chart of ES.   I have only run into two  
problems.  The first is it takes almost one second to run the AFL to  
generate the real time contract ticker.  The second is I need to have  
that chart ticker pointing to something that has all the 5 second  
bars for 30 days back in order for the other two contracts to have a  
place to store their quotes (using foreign).  I don't have such a  
beast.  The closest I can come is to use the oldest contract ticker  
which will work for a week until the contract expires.

With all that background, here are my questions:

Is there a faster and easier way to do this?

I need all the bars in both the two contract tickers to merge them.   
How do I get all the bars I need to make my 200K bar ATC ticker?

Thanks for your help.  Here is my AFL.

//////////////////////////////////////////////////////////////////////// 
///
// Continious Contract on 5 sec database (by Dennis Brown 12/16/2007)
//
// This chart is used to generate Continious Contract data for  
another chart.
// This runs on a 5 second database to merge contract prices and volume.
// Last quarters contract prices are adjusted down by the premium.
// Volumes are just added.
// Merged data is saved to "~ES" ATC ticker every pass.
// Edit the Tick size: .25, and Point value: 50 for the ~ES ticker
// Other chart must use the ticker "~ES".
//
// set the realtime data also using static variables
// "bidRT","askRT","lastRT"

Version(5.0); //minimum version required
SetChartOptions(2,chartShowDates);
SetBarsRequired(1000000,1000000);
tick = TickSize; if(tick==0){tick=.01;}
flag=0;

function StaticArraySet(VarName,array){AddToComposite 
(array ,"~SA_"+VarName ,"X",atcFlagEnableInIndicator|atcFlagDefaults);}

//ChartTicker = StaticVarGetText("ChartTicker"); //name from main chart

//if(ChartTicker =="~ES"){
ATCname="~ES"; OldContract="ES Z7"; NewContract="ES H8"; flag=1;
//}
if(flag)
{
        SetForeign(OldContract); //older ticker
        O1=O; H1=H; L1=L; C1=C; V1=V;
        Title=OldContract + " Through "+ NewContract;
        SetForeign(NewContract); //newer ticker
        diff = MA((H1+L1)/2,2160) - MA((H+L)/2,2160); //3 Hour average price  
difference
        Vxover = MA(V,17280) > MA(V1,17280); //24 hr ave volume crossover
        for(i=BarCount-1; i>0 AND Vxover[i]==1; i--){V[i]+=V1[i];} //add  
both volumes together
        delta = round(diff[i]*(1/tick))/(1/tick); //move to closest tick
        for(i=i; i>=0; i--)
                {O[i]=O1[i]-delta; H[i]=H1[i]-delta; L[i]=L1[i]-delta; 
C[i]=C1[i]- 
delta; V[i]+=V1[i];} //offset old array bars

        AddToComposite(O ,ATCname ,"O",atcFlagEnableInIndicator| 
atcFlagDeleteValues);
        AddToComposite(H ,ATCname ,"H",atcFlagEnableInIndicator);
        AddToComposite(L ,ATCname ,"L",atcFlagEnableInIndicator);
        AddToComposite(C ,ATCname ,"C",atcFlagEnableInIndicator);
        AddToComposite(V ,ATCname ,"V",atcFlagEnableInIndicator);

        StaticVarSet("bidRT",GetRTDataForeign("Bid",NewContract));
        StaticVarSet("askRT",GetRTDataForeign("Ask",NewContract));
        StaticVarSet("lastRT",GetRTDataForeign("Last",NewContract));
}
//Plot(C,"",IIf(Vxover,colorBlack,colorRed),styleBar);
//Plot(V,"",colorLightGrey,styleHistogram|styleOwnScale);
RequestTimedRefresh(2,0);

Reply via email to