Esempio n. 1
0
        private int CalcCorridorBySplitHeights3(IList <Rate> rates)
        {
            var        ratesReversedOriginal = rates.ReverseIfNot().SafeArray();
            var        stDev      = StDevByPriceAvg.Avg(StDevByHeight);
            Func <int> getDefault = () => {
                var startDate = CorridorStats.Rates.CopyLast(1).Select(r => r.StartDate).DefaultIfEmpty().First();
                return(ratesReversedOriginal.TakeWhile(r => r.StartDate >= startDate).Count());
            };

            return(RunSplits(rates, _priceAvg, CorrelationMinimum.ToInt()).RunIfEmpty(getDefault).Max());
        }
Esempio n. 2
0
        private int CalcCorridorBySplitHeights(IList <Rate> rates)
        {
            var ratesReversedOriginal = rates.ReverseIfNot().SafeArray();
            var stDev = StDevByPriceAvg.Max(StDevByHeight);

            for (var i = 2; i < ratesReversedOriginal.Length; i += 2)
            {
                if (ratesReversedOriginal.CopyToArray(i / 2, i / 2).Height()
                    .Min(ratesReversedOriginal.SafeArray().CopyToArray(i / 2).Height()) > stDev)
                {
                    return(i);
                }
            }
            return(ratesReversedOriginal.Length);
        }
Esempio n. 3
0
 private Func<double> GetHeightMinFunc(CorridorByStDevRatio func) {
   switch(func) {
     case CorridorByStDevRatio.HPAverage:
       return () => StDevByPriceAvg.Avg(StDevByHeight);
     case CorridorByStDevRatio.Height:
       return () => StDevByHeight;
     case CorridorByStDevRatio.Price:
       return () => StDevByPriceAvg;
     case CorridorByStDevRatio.HeightPrice:
       return () => StDevByPriceAvg + StDevByHeight;
     case CorridorByStDevRatio.Height2:
       return () => StDevByHeight * 2;
     case CorridorByStDevRatio.Price12:
       return () => StDevByPriceAvg * _stDevUniformRatio / 2;
     case CorridorByStDevRatio.Price2:
       return () => StDevByPriceAvg * 2;
     default:
       throw new NotSupportedException(new { CorridorByStDevRatioFunc } + "");
   }
 }