//
// Find the 100 most active companies over the last 50 days
// using total volume
//

RANGE(-50,_LASTDATE)

CLOSE =LOAD(_TICKER,CLOSE)
VOLUME=LOAD(_TICKER,VOLUME)
RANK1 = INIT(_TICKER)
RANK2 = INIT(_TICKER)

//
// We only consider companies that do not have
// any missing days
//

STOPIF (CLOSE,45)

// Interpolate for missing values

ICLOSE =INTERPOLATE(CLOSE)
IVOLUME=INTERPOLATE(VOLUME)

CPP: double TotalVolume;
CPP: TotalVolume = 0.0;
CPP: for (int i=0;i<_SIZE;i++)
CPP: {
CPP:     if (VOLUME(i) != 1e9) TotalVolume = TotalVolume + VOLUME(i);
CPP: }
CPP: DBSaveDouble("_TICKER","Rank1",TotalVolume); 

RUNCODE()

RANK2   = UPDAYS(IVOLUME)


//
// The following commands are processed only
// when program is done applying formula to all stocks
//

FIELDS: TICKER,NAME,RANK1,RANK2 
CONDITION: (RANK1>1000) AND (RANK2>22) AND (LastClose > 1.00)
OUTPUT: EARLY_RISERS
ORDERBY: RANK1 DESC
TOP: 100