public void appendParameterFuturePrice(string parameterName, ParameterFuturePriceTableInformation dataToAppend) { string filepath = _baseFolder + $@"\{parameterName}_ParameterFuturePriceTable.txt"; using (var sw = new StreamWriter(filepath, true, Encoding.Default)) { sw.WriteLine(dataToAppend.ToString()); } }
public void getParameterFuturePriceTableDataToAppend(Dictionary <string, List <ParameterFuturePriceTableInformation> > allDataToAppend) { display = ""; var parameterIndex = AnalyzedDataInformation.parameterIndexForScore; var dateList = from q in futurePriceData select q.date; foreach (var parameterNameAndIndex in parameterIndex) { allDataToAppend.Add(parameterNameAndIndex.Key, new List <ParameterFuturePriceTableInformation>()); foreach (var date in dateList) { var matchedFuturePriceData = futurePriceData.Find(x => x.date == date); if (matchedFuturePriceData.futurePriceRank.Contains(null) || matchedFuturePriceData.futurePrices.Contains(null) ) { break; } var matchedAnalyzedData = analyzedData.Find(x => x.date == date); var newParameterFuturePriceToAdd = new ParameterFuturePriceTableInformation(); newParameterFuturePriceToAdd.parameterValue = matchedAnalyzedData.parameters[parameterNameAndIndex.Value].GetValueOrDefault(); for (int i = 0; i < matchedFuturePriceData.futurePrices.Length; i++) { var currentFuturePrice = matchedFuturePriceData.futurePrices[i].GetValueOrDefault(); var currentFuturePriceLog = Math.Log(((currentFuturePrice / 100) + 1).getDoubleFromDecimal()); newParameterFuturePriceToAdd.futurePriceLogs[i] = currentFuturePriceLog.round(4).getDecimalFromDouble(); } newParameterFuturePriceToAdd.futurePriceRanks = matchedFuturePriceData.futurePriceRank; allDataToAppend[parameterNameAndIndex.Key].Add(newParameterFuturePriceToAdd); } } }
public void calculateParameterFuturePriceTable() { display = ""; var allParameterValues = new List <decimal>(); foreach (var currentData in parameterFuturePriceTableData) { var index = allParameterValues.BinarySearch(currentData.parameterValue); if (index < 0) { index = ~index; } allParameterValues.Insert(index, currentData.parameterValue); } var futurePriceLogsGroupByParameter = new List <decimal?[]> [PARAMETER_GROUP_COUNT]; for (int i = 0; i < PARAMETER_GROUP_COUNT; i++) { futurePriceLogsGroupByParameter[i] = new List <decimal?[]>(); } var futurePriceRanksGroupByParameter = new List <decimal?[]> [PARAMETER_GROUP_COUNT]; for (int i = 0; i < PARAMETER_GROUP_COUNT; i++) { futurePriceRanksGroupByParameter[i] = new List <decimal?[]>(); } decimal[] cutoffs = new decimal[PARAMETER_GROUP_COUNT - 1]; for (int i = 0; i < cutoffs.Length; i++) { int indexOfCutoff = allParameterValues.Count * (i + 1) / PARAMETER_GROUP_COUNT; cutoffs[i] = allParameterValues[indexOfCutoff]; if (i > 0 && cutoffs[i] == cutoffs[i - 1]) { cutoffs[i - 1] -= 0.01M; cutoffs[i] += 0.01M; } } foreach (var data in parameterFuturePriceTableData) { int i = 0; for (; i < cutoffs.Length; i++) { if (data.parameterValue < cutoffs[i]) { break; } } futurePriceLogsGroupByParameter[i].Add(data.futurePriceLogs); futurePriceRanksGroupByParameter[i].Add(data.futurePriceRanks); } decimal[,] finalFuturePriceLogsTable = new decimal[futurePriceLogsGroupByParameter.Length, FuturePriceDataInformation.FUTURE_PRICE_DAYS.Length]; decimal[,] finalFuturePriceRanksTable = new decimal[futurePriceLogsGroupByParameter.Length, FuturePriceDataInformation.FUTURE_PRICE_DAYS.Length]; for (int i = 0; i < futurePriceLogsGroupByParameter.Length; i++) { for (int j = 0; j < FuturePriceDataInformation.FUTURE_PRICE_DAYS.Length; j++) { { var queryPriceLogs = from q in futurePriceLogsGroupByParameter[i] where q[j].HasValue orderby q[j] select q[j].Value; var resultArray = queryPriceLogs.ToArray(); Array.Sort(resultArray); int quaterCount = resultArray.Length / 4; var resultArrayInMidQuater = resultArray.Skip(quaterCount).Take(quaterCount * 2); finalFuturePriceLogsTable[i, j] = resultArrayInMidQuater.getAverage(); } { var queryPriceRanks = from q in futurePriceRanksGroupByParameter[i] where q[j].HasValue orderby q[j] select q[j].Value; var resultArray = queryPriceRanks.ToArray(); Array.Sort(resultArray); int quaterCount = resultArray.Length / 4; var resultArrayInMidQuater = resultArray.Skip(quaterCount).Take(quaterCount * 2); finalFuturePriceRanksTable[i, j] = resultArrayInMidQuater.getAverage(); } } } finalParameterFuturePriceTableData = new List <ParameterFuturePriceTableInformation>(); for (int i = 0; i < PARAMETER_GROUP_COUNT; i++) { var newData = new ParameterFuturePriceTableInformation(); if (i == cutoffs.Length) { newData.parameterValue = 0; } else { newData.parameterValue = cutoffs[i]; } newData.futurePriceLogs = new decimal?[FuturePriceDataInformation.FUTURE_PRICE_DAYS.Count()]; for (int j = 0; j < newData.futurePriceLogs.Length; j++) { newData.futurePriceLogs[j] = finalFuturePriceLogsTable[i, j]; newData.futurePriceRanks[j] = finalFuturePriceRanksTable[i, j]; } finalParameterFuturePriceTableData.Add(newData); } }