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()); }
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); }
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 } + ""); } }