private static DatedDataCollectionGen<double> getZScores(DatedDataCollectionGen<double> pxs_, double convention_, int windowLength_, bool scoreIsFromMean_)
    {
      var vol = HelperMethods.GetRollingStat(pxs_.ToReturns(), windowLength_, Statistics.Stdev);

      if (!scoreIsFromMean_)
      {
        var rets = getPeriodReturns(pxs_, convention_, windowLength_);

        var dates = vol.Length < rets.Length ? vol.Dates : rets.Dates;

        var vals = new double[dates.Length];

        for (int i = 0; i < dates.Length; ++i)
        {
          vals[i] = rets.ValueOnDate(dates[i]) / (vol.ValueOnDate(dates[i]) * Math.Sqrt(Convert.ToDouble(windowLength_)));
        }

        return new DatedDataCollectionGen<double>(dates, vals);
      }
      else
      {
        var ma = HelperMethods.GetEMA(pxs_, windowLength_);

        var numerator = pxs_.Minus(ma);
        var denominator = vol.ProcessEachValue(x => x*Math.Sqrt(Convert.ToDouble(windowLength_)));

        return numerator.DivideBy(denominator);
      }
    }