[Test]
public void Test1()
{
avgs.Clear();
// get 500 symbols
string[] syms = TradeLink.Research.RandomSymbol.GetSymbols(4, 500);
// prepare to hold tickdata
GenericTracker<Tick[]> tickdata = new GenericTracker<Tick[]>(syms.Length);
// process
const int maxtickspersym = 10000;
foreach (string sym in syms)
{
// get some tickdata
var ticks = TradeLink.Research.RandomTicks.GenerateSymbol(sym, maxtickspersym);
// timestamp it
DateTime cur = DateTime.Now;
int date = Util.ToTLDate(cur);
for (int i = 0; i < ticks.Length; i++)
{
ticks[i].date = date;
ticks[i].time = Util.ToTLTime(cur);
if ((i % 10) == 0)
cur = cur.AddMinutes(1);
}
tickdata.addindex(sym,ticks);
}
// prepare to track time per run
List<double> runms = new List<double>(700);
// prepare to hold bardata
blt = new BarListTracker(BarInterval.Minute);
blt.GotNewBar += new SymBarIntervalDelegate(blt_GotNewBar);
// prepare to track time
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
// run our simulation
string lastsym = string.Empty;
for (int i = 0; i < maxtickspersym; i++)
{
// get current computation count
int curavgcount = avgs.Count;
// start timer
sw.Restart();
foreach (string sym in syms)
{
// build bars
blt.newTick(tickdata[sym][i]);
lastsym = sym;
}
// stop
sw.Stop();
// if we did something, record time
if (avgs.Count>curavgcount)
runms.Add(sw.Elapsed.TotalMilliseconds);
}
// compute average run
double avgrun = Calc.Avg(runms.ToArray());
g.d("symbols with bars: " + blt.SymbolCount);
g.d("bars per symbol: " + blt[lastsym].Count);
g.d("averages computed: " + avgs.Count);
g.d("average calc time (ms): " + avgrun);
Assert.Greater(500,avgrun);
}
// save averages
List<decimal> avgs = new List<decimal>();
BarListTracker blt = new BarListTracker();
void blt_GotNewBar(string symbol, int interval)
{
BarList bl = blt[symbol, interval];
// if we have 300 bars compute averages
if (bl.Has(300,(BarInterval)interval) && bl.RecentBar.isNew)
{
avgs.Add(Calc.Avg(bl.Close()));
}
}