internal void AddValueToDictionary(bool yesterdayData, string key, double percentageSharesHeld, double sharesHeld, double value, uint rawDataRowId) { Dictionary <string, AggValues> sumDictionary; AggValues aggTemp; if (yesterdayData) { sumDictionary = yesterdayAggResults; } else { sumDictionary = aggResults; } lock (dictionaryLock) { if (sumDictionary.TryGetValue(key, out aggTemp)) { // TODO: make sure reference is the same, and that dictionary updates. aggTemp.AddToValue(value); aggTemp.AddToSharesHeld(sharesHeld); aggTemp.AddToPercentSharesHeld(percentageSharesHeld); aggTemp.AddRowChunkReference(rawDataRowId); } else { aggTemp = new AggValues(); aggTemp.AddToValue(value); aggTemp.AddToSharesHeld(sharesHeld); aggTemp.AddToPercentSharesHeld(percentageSharesHeld); aggTemp.AddRowChunkReference(rawDataRowId); sumDictionary.Add(key, aggTemp); } } }
private void CrossesYesterdayValueComparison(CriteriaSetObj criteriaObj, ThresholdComparison compare) { int rawDataChunkIndex; int stockDataIndex; double columnValue = 0.0, thresholdCrossed = 0.0; ThresholdComparison comparison = compare; CriteriaSetObj criteria = criteriaObj; ThresholdColumn crossesColumn = criteria.postAggObj.thresholdColumn; IReadOnlyList <double> thresholds = criteria.postAggObj.GetRefToThresholdValues(); IReadOnlyDictionary <string, AggValues> todaysParsedDataDictionary = criteria.GetRefToAggResults(); IReadOnlyDictionary <string, AggValues> yesterdaysParsedDataDictionary = criteria.GetRefToYesterdayAggResults(); AggValues todaysAgg; AggValues yestedayAgg; bool keyExistsYesterday, todayGreaterYesterday; if (crossesColumn == ThresholdColumn.Undefiend) { // TODO: do something else return; } WriteThresholdHeader(criteria); foreach (string key in todaysParsedDataDictionary.Keys) { todaysParsedDataDictionary.TryGetValue(key, out todaysAgg); // should always find something keyExistsYesterday = yesterdaysParsedDataDictionary.TryGetValue(key, out yestedayAgg); if (!keyExistsYesterday) { yestedayAgg = new AggValues(); // all values are 0 then. } switch (crossesColumn) { case ThresholdColumn.PrecentageSharesHeld: { columnValue = todaysAgg.percentageSharesHeld; if (columnValue > yestedayAgg.percentageSharesHeld) { todayGreaterYesterday = true; } else { todayGreaterYesterday = false; } thresholdCrossed = PreciseThresholdCrossed(todayGreaterYesterday, columnValue, thresholds); break; } case ThresholdColumn.SharesHeld: { columnValue = todaysAgg.sharesHeld; if (columnValue > yestedayAgg.sharesHeld) { todayGreaterYesterday = true; } else { todayGreaterYesterday = false; } thresholdCrossed = PreciseThresholdCrossed(todayGreaterYesterday, columnValue, thresholds); break; } case ThresholdColumn.Value: { columnValue = todaysAgg.value; if (columnValue > yestedayAgg.value) { todayGreaterYesterday = true; } else { todayGreaterYesterday = false; } thresholdCrossed = PreciseThresholdCrossed(todayGreaterYesterday, columnValue, thresholds); break; } default: { break; } } // TODO: write to files criteriaFilterWriter.WriteLine(GetAggValuesCommaSeparatedString(key, todaysAgg)); IReadOnlyList <uint> unaggregatedDictEntry = todaysAgg.GetRefToRowsInChunk(); for (int i = 0; i < unaggregatedDictEntry.Count; i++) { rawDataChunkIndex = (int)unaggregatedDictEntry[i] >> 16; stockDataIndex = (int)unaggregatedDictEntry[i] & 0xffff; StockDataEntry sde = Global.parsedRawData[rawDataChunkIndex].chunkDataParsed[stockDataIndex]; criteriaFilterDetailsWriter.WriteLine(GetCommaSeparatedStockDataEntryWithKey(sde, key)); } criteriaThresholdWriter.WriteLine(GetCommaSeparatedThresholdEntry(key, columnValue, thresholdCrossed)); } criteriaFilterWriter.Dispose(); criteriaFilterDetailsWriter.Dispose(); criteriaThresholdWriter.Dispose(); }
private string GetAggValuesCommaSeparatedString(string key, AggValues agg) { return(key + "," + Convert.ToString(agg.percentageSharesHeld) + "," + Convert.ToString(agg.sharesHeld) + "," + Convert.ToString(agg.value)); }
internal void AddToOutputEntry(string key, AggValues values) { thresholdRelevantEntries.Add(key, values); }