private void CalculateFiveBasicValues() { var sixtyEightLowLimit = StdDevResults.Where(t => t.ZScore <= (Decimal)(-1.0) && t.ZScore > (Decimal)(-2.0)).OrderByDescending(t => t.ZScore).FirstOrDefault(); var sixtyEightLowLimitPrice = sixtyEightLowLimit.StdDev * sixtyEightLowLimit.ZScore + sixtyEightLowLimit.Mean; var sixtyEightHighLimit = StdDevResults.Where(t => t.ZScore <= (Decimal)1.0 && t.ZScore > (Decimal)(0)).OrderByDescending(t => t.ZScore).FirstOrDefault(); var sixtyEightHighLimitPrice = sixtyEightHighLimit.StdDev * sixtyEightHighLimit.ZScore + sixtyEightHighLimit.Mean; var ninetyLowLimit = StdDevResults.Where(t => t.ZScore > (Decimal)(-2.0) && t.ZScore < (Decimal)(-1.0)).OrderBy(t => t.ZScore).FirstOrDefault(); var ninetyLowLimitPrice = ninetyLowLimit.StdDev * ninetyLowLimit.ZScore + ninetyLowLimit.Mean; var ninetyHighLimit = StdDevResults.Where(t => t.ZScore <= (Decimal)2.0 && t.ZScore > (Decimal)1.0).OrderByDescending(t => t.ZScore).FirstOrDefault(); var ninetynineHighLimitPrice = HistoricalQuotes.Max(q => q.Close); var mean = StdDevResults.Where(t => t.ZScore <(Decimal)(0) && t.ZScore>(Decimal)(-1)).OrderByDescending(t => t.ZScore).FirstOrDefault(); var meanPrice = mean.StdDev * mean.ZScore + mean.Mean; var List = new List <decimal> { sixtyEightLowLimitPrice.Value, sixtyEightHighLimitPrice.Value, meanPrice.Value, ninetynineHighLimitPrice, ninetyLowLimitPrice.Value }; var sorted = List.OrderBy(t => t).ToList(); FiveBasicNumber = new FiveBasicNumberValue { NinetyLow = sorted[0], SixtyEightLow = sorted[1], Mean = sorted[2], SixtyEightHigh = sorted[3], NinetyNineHigh = sorted[4] * ((decimal)1.1) }; }
private void CalculateHighAndLowLimitPriceForLowAlertInfo(AlertInfo stdLowAlertInfo, decimal maxStickerQuote, decimal minStickerQuote) { var maxStdResult = StdDevResults.Max(s => s.StdDev); var maxStdItem = StdDevResults.Where(s => s.StdDev == maxStdResult).FirstOrDefault(); var maxPrice = maxStdItem.StdDev * maxStdItem.ZScore + maxStdItem.Mean; //maxPrice = Math.Max(maxPrice.Value, maxStickerQuote); var minStdResult = StdDevResults.Min(s => s.StdDev); var minStdItem = StdDevResults.Where(s => s.StdDev == minStdResult).FirstOrDefault(); var minPrice = minStdItem.StdDev * minStdItem.ZScore + minStdItem.Mean; //minPrice = Math.Min(minPrice.Value, minStickerQuote); var priceResultRange = maxPrice.Value - minPrice.Value; var lowLimitPriceRange = priceResultRange * (stdLowAlertInfo.ExceptedLowPercentage / 100); stdLowAlertInfo.LowLimit = minPrice.Value; stdLowAlertInfo.HighLimit = lowLimitPriceRange + minPrice.Value; }