def test_isSymbolInCollection(self): expected_symbol = 'A' newCollection = SymbolDataCollection() is_symbol_in_collection = newCollection.isSymbolInCollection(expected_symbol) self.assertFalse(is_symbol_in_collection, 'SymbolDataCollection did not return False for a symbol not yet in the collection, returned {0}'.format(is_symbol_in_collection)) other_expected_symbol = 'B' newCollection.addSymbolToCollection(expected_symbol) is_other_symbol_in_collection = newCollection.isSymbolInCollection(other_expected_symbol) self.assertFalse(is_other_symbol_in_collection, 'Collection did not return False for a symbol not yet in the collection after a different symbol had been added, returned {0}'.format(is_other_symbol_in_collection)) testSymbolData = newCollection.getSymbolData(expected_symbol) self.assertIsInstance(testSymbolData, SymbolData, 'An object of type SymbolData was not returned for a symbol which should be in the SymbolDataCollection, returned was {0}'.format(testSymbolData)) test_symbol_from_collection = testSymbolData.symbol self.assertEqual(expected_symbol, test_symbol_from_collection, 'The symbol {0} from a SymbolData object returned from a SymbolDataCollection did not match the symbol passed into newCollection.getSymbolData() {1}'.format(test_symbol_from_collection, expected_symbol)) newCollection.addSymbolToCollection(other_expected_symbol) otherSymbolData = newCollection.getSymbolData(other_expected_symbol) other_symbol_from_data = otherSymbolData.symbol self.assertEqual(other_symbol_from_data, other_expected_symbol, 'The symbol {0} from another SymbolData object returned from a SymbolDataCollection did not match the other symbol passed into newCollection.getSymbolData() {1}'.format(other_symbol_from_data, other_expected_symbol))
def test_getSortedSpanDeltaValuesByCode(self): expected_sorted_by_delta_dict = OrderedDict() expected_sorted_by_delta_dict['B'] = -9.1 expected_sorted_by_delta_dict['C'] = -3.5 expected_sorted_by_delta_dict['A'] = 0.9 expected_sorted_by_delta_dict['D'] = 13.0 expected_sorted_by_delta_percentages_dict = OrderedDict() expected_sorted_by_delta_percentages_dict['B'] = -15.166666666666666 expected_sorted_by_delta_percentages_dict['C'] = -0.6140350877192983 expected_sorted_by_delta_percentages_dict['A'] = 1.5 expected_sorted_by_delta_percentages_dict['D'] = 1.5116279069767442 span_code = 'test_sorted_span_deltas' test_unit_label_list = ['test_unit_code'] other_unit_label_list = ['some_other_label'] newCollection = SymbolDataCollection() testSymbolDataA = newCollection.addSymbolToCollection('A') testSymbolDataA.initializeSpanByCode(span_code) testSymbolDataA.addSpanValueByCode(span_code, test_unit_label_list, 1.0, 0.6) testSymbolDataA.addSpanValueByCode(span_code, test_unit_label_list, 1.5, 1.0) testSymbolDataA.addSpanValueByCode(span_code, other_unit_label_list, 1.4, 1.5) testSymbolDataB = newCollection.addSymbolToCollection('B') testSymbolDataB.initializeSpanByCode(span_code) testSymbolDataB.addSpanValueByCode(span_code, test_unit_label_list, -4.0, 0.6) testSymbolDataB.addSpanValueByCode(span_code, test_unit_label_list, -8.5, 4.0) testSymbolDataB.addSpanValueByCode(span_code, other_unit_label_list, 4.5, -8.5) testSymbolDataC = newCollection.addSymbolToCollection('C') testSymbolDataC.initializeSpanByCode(span_code) testSymbolDataC.addSpanValueByCode(span_code, test_unit_label_list, 1.2, 5.7) testSymbolDataC.addSpanValueByCode(span_code, test_unit_label_list, 2.2, 1.2) testSymbolDataC.addSpanValueByCode(span_code, other_unit_label_list, 1.2, 2.2) testSymbolDataD = newCollection.addSymbolToCollection('D') testSymbolDataD.initializeSpanByCode(span_code) testSymbolDataD.addSpanValueByCode(span_code, test_unit_label_list, 4.0, -8.6) testSymbolDataD.addSpanValueByCode(span_code, test_unit_label_list, 4.4, 4.0) testSymbolDataD.addSpanValueByCode(span_code, other_unit_label_list, 2.3, 4.4) testOtherLabelOnlySymbolData = newCollection.addSymbolToCollection('E') testOtherLabelOnlySymbolData.initializeSpanByCode(span_code) testOtherLabelOnlySymbolData.addSpanValueByCode(span_code, other_unit_label_list, 3.4, 5.9) sorted_span_delta_values_by_code_dict = newCollection.getSortedSpanDeltaValuesByCode(span_code, 'test_unit_code') self.assertEqual(expected_sorted_by_delta_dict, sorted_span_delta_values_by_code_dict, 'test_getSortedDeltaValuesByCode failed to return the expected sorted dictionary, returned {0}\nexpected: {1}'.format(sorted_span_delta_values_by_code_dict, expected_sorted_by_delta_dict)) # Test delta percentages sorted_span_delta_percentage_values_by_code_dict = newCollection.getSortedSpanDeltaValuesByCode(span_code, 'test_unit_code', get_percentages = True) self.assertEqual(expected_sorted_by_delta_percentages_dict, sorted_span_delta_percentage_values_by_code_dict)
def test_getSortedTodayPricePercentageOffSpanAveragesByCode(self): test_span_code = 'percentage_price_off_span_average_test' testCollection = SymbolDataCollection() first_today_price = 2.3 first_span_prices = [5.7, 8.9, 7.7] second_today_price = 3.4 second_span_prices = [2.3, 2.7, 3.3] third_today_price = 1.2 third_span_prices = [4.6, 2.7, 5.6] fourth_today_price = 3.4 fourth_span_prices = [-2.0, 0.0, 2.0] firstSymbolData = testCollection.addSymbolToCollection('A') firstSymbolData.setTodayPrice(first_today_price) firstSymbolData.initializeSpanByCode(test_span_code) unit_label_prefix = 'units_' i = 0 for price in first_span_prices: unit_label_suffix = 'even' if ((i % 2) == 0) else 'odd' unit_label = unit_label_prefix + unit_label_suffix unit_labels_list = [unit_label, i] firstSymbolData.addSpanValueByCode(test_span_code, unit_labels_list, price) i += 1 secondSymbolData = testCollection.addSymbolToCollection('B') secondSymbolData.initializeSpanByCode(test_span_code) secondSymbolData.setTodayPrice(second_today_price) i = 0 for price in second_span_prices: unit_label_suffix = 'even' if ((i % 2) == 0) else 'odd' unit_label = unit_label_prefix + unit_label_suffix unit_labels_list = [unit_label, i] secondSymbolData.addSpanValueByCode(test_span_code, unit_labels_list, price) i += 1 thirdSymbolData = testCollection.addSymbolToCollection('C') thirdSymbolData.initializeSpanByCode(test_span_code) thirdSymbolData.setTodayPrice(third_today_price) i = 0 for price in third_span_prices: unit_label_suffix = 'even' if ((i % 2) == 0) else 'odd' unit_label = unit_label_prefix + unit_label_suffix unit_labels_list = [unit_label, i] thirdSymbolData.addSpanValueByCode(test_span_code, unit_labels_list, price) i += 1 testNoneSymbolData = testCollection.addSymbolToCollection('D') testNoneSymbolData.initializeSpanByCode(test_span_code) testNoneSymbolData.addSpanValueByCode(test_span_code, 'irrelevant_label', 12.3) testNoneSymbolData.setTodayPrice(13.3) test_price_off_average_values_by_symbol = testCollection.getSortedTodayPricePercentageOffSpanAveragesByCode(test_span_code) expected_price_off_average_values_by_symbol = OrderedDict() expected_price_off_average_values_by_symbol['C'] = -0.7209302325581395 expected_price_off_average_values_by_symbol['A'] = -0.6905829596412556 expected_price_off_average_values_by_symbol['D'] = 0.08130081300813008 expected_price_off_average_values_by_symbol['B'] = 0.2289156626506022 self.assertEqual(test_price_off_average_values_by_symbol, expected_price_off_average_values_by_symbol, 'The expected_price_off_average_values_by_symbol was {0}, but {1} was returned while testing getting the percentage delta of today price off of span average'.format(expected_price_off_average_values_by_symbol, test_price_off_average_values_by_symbol)) price_threshold = 2.0 test_sorted_dictionary_of_values_above_price_threshold = testCollection.getSortedDictionaryOfValuesAboveTodayPriceThreshold(test_price_off_average_values_by_symbol, price_threshold) expected_price_off_average_values_by_symbol_above_threshold = OrderedDict() expected_price_off_average_values_by_symbol_above_threshold['A'] = -0.6905829596412556 expected_price_off_average_values_by_symbol_above_threshold['D'] = 0.08130081300813008 expected_price_off_average_values_by_symbol_above_threshold['B'] = 0.2289156626506022 self.assertEqual(test_sorted_dictionary_of_values_above_price_threshold, expected_price_off_average_values_by_symbol_above_threshold, 'The expected_price_off_average_values_by_symbol_above_threshold was {0} but {1} was returned'.format(expected_price_off_average_values_by_symbol_above_threshold, test_sorted_dictionary_of_values_above_price_threshold)) # Test for even/odd unit labels even_units_label = unit_label_prefix + 'even' odd_units_label = unit_label_prefix + 'odd' test_price_off_even_average_values_by_symbol = testCollection.getSortedTodayPricePercentageOffSpanAveragesByCode(test_span_code, even_units_label) test_price_off_odd_average_values_by_symbol = testCollection.getSortedTodayPricePercentageOffSpanAveragesByCode(test_span_code, odd_units_label) expected_price_off_even_average_values = OrderedDict() expected_price_off_even_average_values['C'] = -0.7647058823529411 expected_price_off_even_average_values['A'] = -0.6567164179104478 expected_price_off_even_average_values['B'] = 0.21428571428571433 self.assertEqual(expected_price_off_even_average_values, test_price_off_even_average_values_by_symbol) expected_price_off_odd_average_values = OrderedDict() expected_price_off_odd_average_values['A'] = -0.7415730337078652 expected_price_off_odd_average_values['C'] = -0.5555555555555556 expected_price_off_odd_average_values['B'] = 0.25925925925925913 self.assertEqual(test_price_off_odd_average_values_by_symbol, expected_price_off_odd_average_values) test_sorted_dictionary_of_even_values_above_price_threshold = testCollection.getSortedDictionaryOfValuesAboveTodayPriceThreshold(test_price_off_even_average_values_by_symbol, price_threshold) expected_price_off_even_average_values_by_symbol_above_threshold = OrderedDict() expected_price_off_even_average_values_by_symbol_above_threshold['A'] = -0.6567164179104478 expected_price_off_even_average_values_by_symbol_above_threshold['B'] = 0.21428571428571433 self.assertEqual(expected_price_off_even_average_values_by_symbol_above_threshold, test_sorted_dictionary_of_even_values_above_price_threshold) test_sorted_dictionary_of_odd_values_above_price_threshold = testCollection.getSortedDictionaryOfValuesAboveTodayPriceThreshold(test_price_off_odd_average_values_by_symbol, price_threshold) expected_price_off_odd_average_values_by_symbol_above_threshold = OrderedDict() expected_price_off_odd_average_values_by_symbol_above_threshold['A'] = -0.7415730337078652 expected_price_off_odd_average_values_by_symbol_above_threshold['B'] = 0.25925925925925913 self.assertEqual(expected_price_off_odd_average_values_by_symbol_above_threshold, test_sorted_dictionary_of_odd_values_above_price_threshold)
def setUp(self): self.get_symbol_span_value_vectors_all_length_list_dict = {} self.unitDeltaTestsSymbolCollection = SymbolDataCollection() self.unit_delta_test_symbol = 'tud' self.unitDeltaTestsSymbolOne = self.unitDeltaTestsSymbolCollection.addSymbolToCollection(self.unit_delta_test_symbol) self.tud_span_code = 'tud_span' self.unitDeltaTestsSymbolOne.initializeSpanByCode(self.tud_span_code) self.unit_label_one = 'unit_one' self.unit_delta_test_list_one = [0.3, 13.4, 0.8] self.unit_label_two = 'unit_two' self.unit_delta_test_list_two = [2.8, 13.7, 0.9] self.unit_label_three = 'unit_three' self.unit_delta_test_list_three = [10.9, 14.4, 15.3] self.unit_label_four = 'unit_four' self.unit_delta_test_list_four = [15.3, 16.3, 17.3] self.unit_label_five = 'unit_five' self.unit_delta_test_list_five = [37.3, 16.3, 34.1] self.unit_dict = {self.unit_label_one : self.unit_delta_test_list_one, self.unit_label_two : self.unit_delta_test_list_two, self.unit_label_three : self.unit_delta_test_list_three, self.unit_label_four : self.unit_delta_test_list_four, self.unit_label_five : self.unit_delta_test_list_five} self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol] = list() for label, list_of_prices in self.unit_dict.items(): for price in list_of_prices: self.unitDeltaTestsSymbolOne.addSpanValueByCode(self.tud_span_code, [label], close_price = price, open_price = price) self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol].append(price) self.tud_span_code_two = 'tud_span_two' self.tud_span_two_unit_label_one = 'span_two_unit_one' self.tud_span_two_unit_delta_test_list_one = [14.3, 13.4, 115.1] self.tud_span_two_unit_label_two = 'span_two_unit_two' self.tud_span_two_unit_delta_test_list_two = [32.8, 13.7, 0.9] self.unitDeltaTestsSymbolOne.initializeSpanByCode(self.tud_span_code_two) self.unit_dict_two = {self.tud_span_two_unit_label_one : self.tud_span_two_unit_delta_test_list_one, self.tud_span_two_unit_label_two : self.tud_span_two_unit_delta_test_list_two} for label, list_of_prices in self.unit_dict_two.items(): for price in list_of_prices: self.unitDeltaTestsSymbolOne.addSpanValueByCode(self.tud_span_code_two, [label], close_price = price, open_price = price) self.unit_delta_test_symbol_two = 'tud_two' self.unitDeltaTestsSymbolTwo = self.unitDeltaTestsSymbolCollection.addSymbolToCollection(self.unit_delta_test_symbol_two) self.unitDeltaTestsSymbolTwo.initializeSpanByCode(self.tud_span_code) self.unitDeltaTestsSymbolTwo.initializeSpanByCode(self.tud_span_code_two) self.unit_delta_test_list_one_two = [2.5, 6.7, 4.5] self.unit_delta_test_list_two_two = [6.7, 7.6, 6.9] self.unit_delta_test_list_three_two = [7.6, 7.8, 6.6] self.unit_delta_test_list_four_two = [12.4, 23.4, 6.6] self.unit_delta_test_list_five_two = [0.2, 0.5, 0.9] self.unit_dict_two = {self.unit_label_one : self.unit_delta_test_list_one_two, self.unit_label_two : self.unit_delta_test_list_two_two, self.unit_label_three : self.unit_delta_test_list_three_two, self.unit_label_four : self.unit_delta_test_list_four_two, self.unit_label_five : self.unit_delta_test_list_five_two} self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol_two] = list() for label, list_of_prices in self.unit_dict_two.items(): for price in list_of_prices: self.unitDeltaTestsSymbolTwo.addSpanValueByCode(self.tud_span_code, [label], close_price = price, open_price = price) self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol_two].append(price) self.tud_span_two_unit_delta_test_list_one_two = [10.5, 8.5, 5.4] self.tud_span_two_unit_delta_test_list_two_two = [5.5, 6.5, 11.9] self.unit_dict_two_two = {self.tud_span_two_unit_label_one : self.tud_span_two_unit_delta_test_list_one_two, self.tud_span_two_unit_label_two : self.tud_span_two_unit_delta_test_list_two_two} for label, list_of_prices in self.unit_dict_two_two.items(): for price in list_of_prices: self.unitDeltaTestsSymbolTwo.addSpanValueByCode(self.tud_span_code_two, [label], close_price = price, open_price = price) self.unit_delta_test_symbol_three = 'tud_three' self.unitDeltaTestsSymbolThree = self.unitDeltaTestsSymbolCollection.addSymbolToCollection(self.unit_delta_test_symbol_three) self.unitDeltaTestsSymbolThree.initializeSpanByCode(self.tud_span_code) self.unitDeltaTestsSymbolThree.initializeSpanByCode(self.tud_span_code_two) self.unit_delta_test_list_one_three = [12.4, 15.6, 14.5] self.unit_delta_test_list_two_three = [16.7, 17.6, 16.9] self.unit_delta_test_list_three_three = [10.1, 11.3, 12.5] self.unit_delta_test_list_four_three = [5.6, 7.8, 5.5] self.unit_delta_test_list_five_three = [3.4, 4.5, 4.0] self.unit_dict_three = {self.unit_label_one : self.unit_delta_test_list_one_three, self.unit_label_two : self.unit_delta_test_list_two_three, self.unit_label_three : self.unit_delta_test_list_three_three, self.unit_label_four : self.unit_delta_test_list_four_three, self.unit_label_five : self.unit_delta_test_list_five_three} self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol_three] = list() for label, list_of_prices in self.unit_dict_three.items(): for price in list_of_prices: self.unitDeltaTestsSymbolThree.addSpanValueByCode(self.tud_span_code, [label], close_price = price, open_price = price) self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol_three].append(price) self.tud_span_two_unit_delta_test_list_one_three = [8.8, 8.9, 9.4] self.tud_span_two_unit_delta_test_list_two_three = [4.5, 5.5, 4.0] self.unit_dict_two_three = {self.tud_span_two_unit_label_one : self.tud_span_two_unit_delta_test_list_one_three, self.tud_span_two_unit_label_two : self.tud_span_two_unit_delta_test_list_two_three} for label, list_of_prices in self.unit_dict_two_three.items(): for price in list_of_prices: self.unitDeltaTestsSymbolThree.addSpanValueByCode(self.tud_span_code_two, [label], close_price = price, open_price = price) self.expected_sorted_max_span_delta_ratio = OrderedDict() self.expected_sorted_max_span_delta_ratio[self.unit_delta_test_symbol] = -3.0454545454545454 self.expected_sorted_max_span_delta_ratio[self.unit_delta_test_symbol_three] = -2 self.expected_sorted_max_span_delta_ratio[self.unit_delta_test_symbol_two] = 0.7000000000000002 self.expected_sorted_max_span_delta_percentage_ratio = OrderedDict() self.expected_sorted_max_span_delta_percentage_ratio[self.unit_delta_test_symbol_three] = -2.2954545454545454 self.expected_sorted_max_span_delta_percentage_ratio[self.unit_delta_test_symbol] = -0.5622377622377622 self.expected_sorted_max_span_delta_percentage_ratio[self.unit_delta_test_symbol_two] = 0.038095238095238106 self.expected_sorted_min_span_delta_ratio = OrderedDict() self.expected_sorted_min_span_delta_ratio[self.unit_delta_test_symbol_two] = -0.24137931034482762 self.expected_sorted_min_span_delta_ratio[self.unit_delta_test_symbol] = 4.187500000000005 self.expected_sorted_min_span_delta_ratio[self.unit_delta_test_symbol_three] = 48.00000000000018 self.expected_sorted_min_span_delta_percentage_ratio = OrderedDict() self.expected_sorted_min_span_delta_percentage_ratio[self.unit_delta_test_symbol_two] = -0.28505747126436787 self.expected_sorted_min_span_delta_percentage_ratio[self.unit_delta_test_symbol] = 1.3809348546190652 self.expected_sorted_min_span_delta_percentage_ratio[self.unit_delta_test_symbol_three] = 30.545454545454657 self.symbol_span_value_vectors_test_span = 'symbol_span_value_vectors_test' self.spanValueVectorsTestSymbol = self.unitDeltaTestsSymbolCollection.addSymbolToCollection(self.symbol_span_value_vectors_test_span) self.spanValueVectorsTestSymbol.initializeSpanByCode(self.tud_span_code) self.spanValueVectorsTestSymbol.initializeSpanByCode(self.tud_span_code_two) self.symbol_span_value_vectors_test_open_prices = [1.0, 2.0, 3.0, 4.0] self.symbol_span_value_vectors_test_close_prices = [5.0, 6.0, 7.0] self.get_symbol_span_value_vectors_open_price_all_length_list_dict = copy.deepcopy(self.get_symbol_span_value_vectors_all_length_list_dict) self.get_symbol_span_value_vectors_close_price_all_length_list_dict = copy.deepcopy(self.get_symbol_span_value_vectors_all_length_list_dict) self.get_symbol_span_value_vectors_open_price_max_length_list_dict = copy.deepcopy(self.get_symbol_span_value_vectors_all_length_list_dict) self.get_symbol_span_value_vectors_close_price_max_length_list_dict = copy.deepcopy(self.get_symbol_span_value_vectors_all_length_list_dict) self.get_symbol_span_value_vectors_open_price_all_length_list_dict[self.symbol_span_value_vectors_test_span] = list() self.get_symbol_span_value_vectors_close_price_all_length_list_dict[self.symbol_span_value_vectors_test_span] = list() for price in self.symbol_span_value_vectors_test_open_prices: self.spanValueVectorsTestSymbol.addSpanValueByCode(self.tud_span_code, [], open_price = price) self.get_symbol_span_value_vectors_open_price_all_length_list_dict[self.symbol_span_value_vectors_test_span].append(price) for price in self.symbol_span_value_vectors_test_close_prices: self.spanValueVectorsTestSymbol.addSpanValueByCode(self.tud_span_code, [], close_price = price) self.get_symbol_span_value_vectors_close_price_all_length_list_dict[self.symbol_span_value_vectors_test_span].append(price)
class TestSymbolDataCollection(unittest.TestCase): def tearDown(self): self.unitDeltaTestsSymbol = None def setUp(self): self.get_symbol_span_value_vectors_all_length_list_dict = {} self.unitDeltaTestsSymbolCollection = SymbolDataCollection() self.unit_delta_test_symbol = 'tud' self.unitDeltaTestsSymbolOne = self.unitDeltaTestsSymbolCollection.addSymbolToCollection(self.unit_delta_test_symbol) self.tud_span_code = 'tud_span' self.unitDeltaTestsSymbolOne.initializeSpanByCode(self.tud_span_code) self.unit_label_one = 'unit_one' self.unit_delta_test_list_one = [0.3, 13.4, 0.8] self.unit_label_two = 'unit_two' self.unit_delta_test_list_two = [2.8, 13.7, 0.9] self.unit_label_three = 'unit_three' self.unit_delta_test_list_three = [10.9, 14.4, 15.3] self.unit_label_four = 'unit_four' self.unit_delta_test_list_four = [15.3, 16.3, 17.3] self.unit_label_five = 'unit_five' self.unit_delta_test_list_five = [37.3, 16.3, 34.1] self.unit_dict = {self.unit_label_one : self.unit_delta_test_list_one, self.unit_label_two : self.unit_delta_test_list_two, self.unit_label_three : self.unit_delta_test_list_three, self.unit_label_four : self.unit_delta_test_list_four, self.unit_label_five : self.unit_delta_test_list_five} self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol] = list() for label, list_of_prices in self.unit_dict.items(): for price in list_of_prices: self.unitDeltaTestsSymbolOne.addSpanValueByCode(self.tud_span_code, [label], close_price = price, open_price = price) self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol].append(price) self.tud_span_code_two = 'tud_span_two' self.tud_span_two_unit_label_one = 'span_two_unit_one' self.tud_span_two_unit_delta_test_list_one = [14.3, 13.4, 115.1] self.tud_span_two_unit_label_two = 'span_two_unit_two' self.tud_span_two_unit_delta_test_list_two = [32.8, 13.7, 0.9] self.unitDeltaTestsSymbolOne.initializeSpanByCode(self.tud_span_code_two) self.unit_dict_two = {self.tud_span_two_unit_label_one : self.tud_span_two_unit_delta_test_list_one, self.tud_span_two_unit_label_two : self.tud_span_two_unit_delta_test_list_two} for label, list_of_prices in self.unit_dict_two.items(): for price in list_of_prices: self.unitDeltaTestsSymbolOne.addSpanValueByCode(self.tud_span_code_two, [label], close_price = price, open_price = price) self.unit_delta_test_symbol_two = 'tud_two' self.unitDeltaTestsSymbolTwo = self.unitDeltaTestsSymbolCollection.addSymbolToCollection(self.unit_delta_test_symbol_two) self.unitDeltaTestsSymbolTwo.initializeSpanByCode(self.tud_span_code) self.unitDeltaTestsSymbolTwo.initializeSpanByCode(self.tud_span_code_two) self.unit_delta_test_list_one_two = [2.5, 6.7, 4.5] self.unit_delta_test_list_two_two = [6.7, 7.6, 6.9] self.unit_delta_test_list_three_two = [7.6, 7.8, 6.6] self.unit_delta_test_list_four_two = [12.4, 23.4, 6.6] self.unit_delta_test_list_five_two = [0.2, 0.5, 0.9] self.unit_dict_two = {self.unit_label_one : self.unit_delta_test_list_one_two, self.unit_label_two : self.unit_delta_test_list_two_two, self.unit_label_three : self.unit_delta_test_list_three_two, self.unit_label_four : self.unit_delta_test_list_four_two, self.unit_label_five : self.unit_delta_test_list_five_two} self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol_two] = list() for label, list_of_prices in self.unit_dict_two.items(): for price in list_of_prices: self.unitDeltaTestsSymbolTwo.addSpanValueByCode(self.tud_span_code, [label], close_price = price, open_price = price) self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol_two].append(price) self.tud_span_two_unit_delta_test_list_one_two = [10.5, 8.5, 5.4] self.tud_span_two_unit_delta_test_list_two_two = [5.5, 6.5, 11.9] self.unit_dict_two_two = {self.tud_span_two_unit_label_one : self.tud_span_two_unit_delta_test_list_one_two, self.tud_span_two_unit_label_two : self.tud_span_two_unit_delta_test_list_two_two} for label, list_of_prices in self.unit_dict_two_two.items(): for price in list_of_prices: self.unitDeltaTestsSymbolTwo.addSpanValueByCode(self.tud_span_code_two, [label], close_price = price, open_price = price) self.unit_delta_test_symbol_three = 'tud_three' self.unitDeltaTestsSymbolThree = self.unitDeltaTestsSymbolCollection.addSymbolToCollection(self.unit_delta_test_symbol_three) self.unitDeltaTestsSymbolThree.initializeSpanByCode(self.tud_span_code) self.unitDeltaTestsSymbolThree.initializeSpanByCode(self.tud_span_code_two) self.unit_delta_test_list_one_three = [12.4, 15.6, 14.5] self.unit_delta_test_list_two_three = [16.7, 17.6, 16.9] self.unit_delta_test_list_three_three = [10.1, 11.3, 12.5] self.unit_delta_test_list_four_three = [5.6, 7.8, 5.5] self.unit_delta_test_list_five_three = [3.4, 4.5, 4.0] self.unit_dict_three = {self.unit_label_one : self.unit_delta_test_list_one_three, self.unit_label_two : self.unit_delta_test_list_two_three, self.unit_label_three : self.unit_delta_test_list_three_three, self.unit_label_four : self.unit_delta_test_list_four_three, self.unit_label_five : self.unit_delta_test_list_five_three} self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol_three] = list() for label, list_of_prices in self.unit_dict_three.items(): for price in list_of_prices: self.unitDeltaTestsSymbolThree.addSpanValueByCode(self.tud_span_code, [label], close_price = price, open_price = price) self.get_symbol_span_value_vectors_all_length_list_dict[self.unit_delta_test_symbol_three].append(price) self.tud_span_two_unit_delta_test_list_one_three = [8.8, 8.9, 9.4] self.tud_span_two_unit_delta_test_list_two_three = [4.5, 5.5, 4.0] self.unit_dict_two_three = {self.tud_span_two_unit_label_one : self.tud_span_two_unit_delta_test_list_one_three, self.tud_span_two_unit_label_two : self.tud_span_two_unit_delta_test_list_two_three} for label, list_of_prices in self.unit_dict_two_three.items(): for price in list_of_prices: self.unitDeltaTestsSymbolThree.addSpanValueByCode(self.tud_span_code_two, [label], close_price = price, open_price = price) self.expected_sorted_max_span_delta_ratio = OrderedDict() self.expected_sorted_max_span_delta_ratio[self.unit_delta_test_symbol] = -3.0454545454545454 self.expected_sorted_max_span_delta_ratio[self.unit_delta_test_symbol_three] = -2 self.expected_sorted_max_span_delta_ratio[self.unit_delta_test_symbol_two] = 0.7000000000000002 self.expected_sorted_max_span_delta_percentage_ratio = OrderedDict() self.expected_sorted_max_span_delta_percentage_ratio[self.unit_delta_test_symbol_three] = -2.2954545454545454 self.expected_sorted_max_span_delta_percentage_ratio[self.unit_delta_test_symbol] = -0.5622377622377622 self.expected_sorted_max_span_delta_percentage_ratio[self.unit_delta_test_symbol_two] = 0.038095238095238106 self.expected_sorted_min_span_delta_ratio = OrderedDict() self.expected_sorted_min_span_delta_ratio[self.unit_delta_test_symbol_two] = -0.24137931034482762 self.expected_sorted_min_span_delta_ratio[self.unit_delta_test_symbol] = 4.187500000000005 self.expected_sorted_min_span_delta_ratio[self.unit_delta_test_symbol_three] = 48.00000000000018 self.expected_sorted_min_span_delta_percentage_ratio = OrderedDict() self.expected_sorted_min_span_delta_percentage_ratio[self.unit_delta_test_symbol_two] = -0.28505747126436787 self.expected_sorted_min_span_delta_percentage_ratio[self.unit_delta_test_symbol] = 1.3809348546190652 self.expected_sorted_min_span_delta_percentage_ratio[self.unit_delta_test_symbol_three] = 30.545454545454657 self.symbol_span_value_vectors_test_span = 'symbol_span_value_vectors_test' self.spanValueVectorsTestSymbol = self.unitDeltaTestsSymbolCollection.addSymbolToCollection(self.symbol_span_value_vectors_test_span) self.spanValueVectorsTestSymbol.initializeSpanByCode(self.tud_span_code) self.spanValueVectorsTestSymbol.initializeSpanByCode(self.tud_span_code_two) self.symbol_span_value_vectors_test_open_prices = [1.0, 2.0, 3.0, 4.0] self.symbol_span_value_vectors_test_close_prices = [5.0, 6.0, 7.0] self.get_symbol_span_value_vectors_open_price_all_length_list_dict = copy.deepcopy(self.get_symbol_span_value_vectors_all_length_list_dict) self.get_symbol_span_value_vectors_close_price_all_length_list_dict = copy.deepcopy(self.get_symbol_span_value_vectors_all_length_list_dict) self.get_symbol_span_value_vectors_open_price_max_length_list_dict = copy.deepcopy(self.get_symbol_span_value_vectors_all_length_list_dict) self.get_symbol_span_value_vectors_close_price_max_length_list_dict = copy.deepcopy(self.get_symbol_span_value_vectors_all_length_list_dict) self.get_symbol_span_value_vectors_open_price_all_length_list_dict[self.symbol_span_value_vectors_test_span] = list() self.get_symbol_span_value_vectors_close_price_all_length_list_dict[self.symbol_span_value_vectors_test_span] = list() for price in self.symbol_span_value_vectors_test_open_prices: self.spanValueVectorsTestSymbol.addSpanValueByCode(self.tud_span_code, [], open_price = price) self.get_symbol_span_value_vectors_open_price_all_length_list_dict[self.symbol_span_value_vectors_test_span].append(price) for price in self.symbol_span_value_vectors_test_close_prices: self.spanValueVectorsTestSymbol.addSpanValueByCode(self.tud_span_code, [], close_price = price) self.get_symbol_span_value_vectors_close_price_all_length_list_dict[self.symbol_span_value_vectors_test_span].append(price) def test_getSymbolSpanValueVectors(self): test_all_open_price_values_list_dict = self.unitDeltaTestsSymbolCollection.getSymbolSpanValueVectors(self.tud_span_code, 'open_price', only_vectors_at_max_length = False) test_all_open_price_values_list_value = test_all_open_price_values_list_dict['value_vectors'] test_all_open_price_values_list = test_all_open_price_values_list_dict['symbols_list'] index = 0 for symbol in test_all_open_price_values_list: test_value_vector = test_all_open_price_values_list_value[index] expected_value_vector = self.get_symbol_span_value_vectors_open_price_all_length_list_dict[symbol] self.assertEqual(test_value_vector, expected_value_vector) index += 1 test_all_close_price_values_list_dict = self.unitDeltaTestsSymbolCollection.getSymbolSpanValueVectors(self.tud_span_code, 'close_price', only_vectors_at_max_length = False) test_all_close_price_values_list_value = test_all_close_price_values_list_dict['value_vectors'] test_all_close_price_values_list = test_all_close_price_values_list_dict['symbols_list'] index = 0 for symbol in test_all_close_price_values_list: test_value_vector = test_all_close_price_values_list_value[index] expected_value_vector = self.get_symbol_span_value_vectors_close_price_all_length_list_dict[symbol] self.assertEqual(test_value_vector, expected_value_vector) index += 1 test_max_open_price_values_list_dict = self.unitDeltaTestsSymbolCollection.getSymbolSpanValueVectors(self.tud_span_code, 'open_price', only_vectors_at_max_length = True) test_max_open_price_values_list_value = test_max_open_price_values_list_dict['value_vectors'] test_max_open_price_values_list = test_max_open_price_values_list_dict['symbols_list'] index = 0 for symbol in test_max_open_price_values_list: test_value_vector = test_max_open_price_values_list_value[index] expected_value_vector = self.get_symbol_span_value_vectors_open_price_max_length_list_dict[symbol] self.assertEqual(test_value_vector, expected_value_vector) index += 1 test_max_close_price_values_list_dict = self.unitDeltaTestsSymbolCollection.getSymbolSpanValueVectors(self.tud_span_code, 'close_price', only_vectors_at_max_length = True) test_max_close_price_values_list_value = test_max_close_price_values_list_dict['value_vectors'] test_max_close_price_values_list = test_max_close_price_values_list_dict['symbols_list'] index = 0 for symbol in test_max_close_price_values_list: test_value_vector = test_max_close_price_values_list_value[index] expected_value_vector = self.get_symbol_span_value_vectors_close_price_max_length_list_dict[symbol] self.assertEqual(test_value_vector, expected_value_vector) index += 1 def test_getSortedSpanDeltaValueToSpanMaxDeltaRatios(self): test_sorted_max_span_delta_ratio = self.unitDeltaTestsSymbolCollection.getSortedSpanDeltaValueToSpanMaxDeltaRatios(self.tud_span_code_two, self.tud_span_code) self.assertEqual(test_sorted_max_span_delta_ratio, self.expected_sorted_max_span_delta_ratio) test_sorted_max_span_delta_percentage_ratio = self.unitDeltaTestsSymbolCollection.getSortedSpanDeltaValueToSpanMaxDeltaRatios(self.tud_span_code_two, self.tud_span_code, get_percentage = True) self.assertEqual(test_sorted_max_span_delta_percentage_ratio, self.expected_sorted_max_span_delta_percentage_ratio) def test_getSortedSpanDeltaValueToSpanMinDeltaRatios(self): test_sorted_min_span_delta_ratio = self.unitDeltaTestsSymbolCollection.getSortedSpanDeltaValueToSpanMinDeltaRatios(self.tud_span_code_two, self.tud_span_code) self.assertEqual(test_sorted_min_span_delta_ratio, self.expected_sorted_min_span_delta_ratio) test_sorted_min_span_delta_percentage_ratio = self.unitDeltaTestsSymbolCollection.getSortedSpanDeltaValueToSpanMinDeltaRatios(self.tud_span_code_two, self.tud_span_code, get_percentage = True) self.assertEqual(test_sorted_min_span_delta_percentage_ratio, self.expected_sorted_min_span_delta_percentage_ratio) def test_isSymbolInCollection(self): expected_symbol = 'A' newCollection = SymbolDataCollection() is_symbol_in_collection = newCollection.isSymbolInCollection(expected_symbol) self.assertFalse(is_symbol_in_collection, 'SymbolDataCollection did not return False for a symbol not yet in the collection, returned {0}'.format(is_symbol_in_collection)) other_expected_symbol = 'B' newCollection.addSymbolToCollection(expected_symbol) is_other_symbol_in_collection = newCollection.isSymbolInCollection(other_expected_symbol) self.assertFalse(is_other_symbol_in_collection, 'Collection did not return False for a symbol not yet in the collection after a different symbol had been added, returned {0}'.format(is_other_symbol_in_collection)) testSymbolData = newCollection.getSymbolData(expected_symbol) self.assertIsInstance(testSymbolData, SymbolData, 'An object of type SymbolData was not returned for a symbol which should be in the SymbolDataCollection, returned was {0}'.format(testSymbolData)) test_symbol_from_collection = testSymbolData.symbol self.assertEqual(expected_symbol, test_symbol_from_collection, 'The symbol {0} from a SymbolData object returned from a SymbolDataCollection did not match the symbol passed into newCollection.getSymbolData() {1}'.format(test_symbol_from_collection, expected_symbol)) newCollection.addSymbolToCollection(other_expected_symbol) otherSymbolData = newCollection.getSymbolData(other_expected_symbol) other_symbol_from_data = otherSymbolData.symbol self.assertEqual(other_symbol_from_data, other_expected_symbol, 'The symbol {0} from another SymbolData object returned from a SymbolDataCollection did not match the other symbol passed into newCollection.getSymbolData() {1}'.format(other_symbol_from_data, other_expected_symbol)) def test_getSortedSpanDeltaValuesByCode(self): expected_sorted_by_delta_dict = OrderedDict() expected_sorted_by_delta_dict['B'] = -9.1 expected_sorted_by_delta_dict['C'] = -3.5 expected_sorted_by_delta_dict['A'] = 0.9 expected_sorted_by_delta_dict['D'] = 13.0 expected_sorted_by_delta_percentages_dict = OrderedDict() expected_sorted_by_delta_percentages_dict['B'] = -15.166666666666666 expected_sorted_by_delta_percentages_dict['C'] = -0.6140350877192983 expected_sorted_by_delta_percentages_dict['A'] = 1.5 expected_sorted_by_delta_percentages_dict['D'] = 1.5116279069767442 span_code = 'test_sorted_span_deltas' test_unit_label_list = ['test_unit_code'] other_unit_label_list = ['some_other_label'] newCollection = SymbolDataCollection() testSymbolDataA = newCollection.addSymbolToCollection('A') testSymbolDataA.initializeSpanByCode(span_code) testSymbolDataA.addSpanValueByCode(span_code, test_unit_label_list, 1.0, 0.6) testSymbolDataA.addSpanValueByCode(span_code, test_unit_label_list, 1.5, 1.0) testSymbolDataA.addSpanValueByCode(span_code, other_unit_label_list, 1.4, 1.5) testSymbolDataB = newCollection.addSymbolToCollection('B') testSymbolDataB.initializeSpanByCode(span_code) testSymbolDataB.addSpanValueByCode(span_code, test_unit_label_list, -4.0, 0.6) testSymbolDataB.addSpanValueByCode(span_code, test_unit_label_list, -8.5, 4.0) testSymbolDataB.addSpanValueByCode(span_code, other_unit_label_list, 4.5, -8.5) testSymbolDataC = newCollection.addSymbolToCollection('C') testSymbolDataC.initializeSpanByCode(span_code) testSymbolDataC.addSpanValueByCode(span_code, test_unit_label_list, 1.2, 5.7) testSymbolDataC.addSpanValueByCode(span_code, test_unit_label_list, 2.2, 1.2) testSymbolDataC.addSpanValueByCode(span_code, other_unit_label_list, 1.2, 2.2) testSymbolDataD = newCollection.addSymbolToCollection('D') testSymbolDataD.initializeSpanByCode(span_code) testSymbolDataD.addSpanValueByCode(span_code, test_unit_label_list, 4.0, -8.6) testSymbolDataD.addSpanValueByCode(span_code, test_unit_label_list, 4.4, 4.0) testSymbolDataD.addSpanValueByCode(span_code, other_unit_label_list, 2.3, 4.4) testOtherLabelOnlySymbolData = newCollection.addSymbolToCollection('E') testOtherLabelOnlySymbolData.initializeSpanByCode(span_code) testOtherLabelOnlySymbolData.addSpanValueByCode(span_code, other_unit_label_list, 3.4, 5.9) sorted_span_delta_values_by_code_dict = newCollection.getSortedSpanDeltaValuesByCode(span_code, 'test_unit_code') self.assertEqual(expected_sorted_by_delta_dict, sorted_span_delta_values_by_code_dict, 'test_getSortedDeltaValuesByCode failed to return the expected sorted dictionary, returned {0}\nexpected: {1}'.format(sorted_span_delta_values_by_code_dict, expected_sorted_by_delta_dict)) # Test delta percentages sorted_span_delta_percentage_values_by_code_dict = newCollection.getSortedSpanDeltaValuesByCode(span_code, 'test_unit_code', get_percentages = True) self.assertEqual(expected_sorted_by_delta_percentages_dict, sorted_span_delta_percentage_values_by_code_dict) def test_getSortedTodayPricePercentageOffSpanAveragesByCode(self): test_span_code = 'percentage_price_off_span_average_test' testCollection = SymbolDataCollection() first_today_price = 2.3 first_span_prices = [5.7, 8.9, 7.7] second_today_price = 3.4 second_span_prices = [2.3, 2.7, 3.3] third_today_price = 1.2 third_span_prices = [4.6, 2.7, 5.6] fourth_today_price = 3.4 fourth_span_prices = [-2.0, 0.0, 2.0] firstSymbolData = testCollection.addSymbolToCollection('A') firstSymbolData.setTodayPrice(first_today_price) firstSymbolData.initializeSpanByCode(test_span_code) unit_label_prefix = 'units_' i = 0 for price in first_span_prices: unit_label_suffix = 'even' if ((i % 2) == 0) else 'odd' unit_label = unit_label_prefix + unit_label_suffix unit_labels_list = [unit_label, i] firstSymbolData.addSpanValueByCode(test_span_code, unit_labels_list, price) i += 1 secondSymbolData = testCollection.addSymbolToCollection('B') secondSymbolData.initializeSpanByCode(test_span_code) secondSymbolData.setTodayPrice(second_today_price) i = 0 for price in second_span_prices: unit_label_suffix = 'even' if ((i % 2) == 0) else 'odd' unit_label = unit_label_prefix + unit_label_suffix unit_labels_list = [unit_label, i] secondSymbolData.addSpanValueByCode(test_span_code, unit_labels_list, price) i += 1 thirdSymbolData = testCollection.addSymbolToCollection('C') thirdSymbolData.initializeSpanByCode(test_span_code) thirdSymbolData.setTodayPrice(third_today_price) i = 0 for price in third_span_prices: unit_label_suffix = 'even' if ((i % 2) == 0) else 'odd' unit_label = unit_label_prefix + unit_label_suffix unit_labels_list = [unit_label, i] thirdSymbolData.addSpanValueByCode(test_span_code, unit_labels_list, price) i += 1 testNoneSymbolData = testCollection.addSymbolToCollection('D') testNoneSymbolData.initializeSpanByCode(test_span_code) testNoneSymbolData.addSpanValueByCode(test_span_code, 'irrelevant_label', 12.3) testNoneSymbolData.setTodayPrice(13.3) test_price_off_average_values_by_symbol = testCollection.getSortedTodayPricePercentageOffSpanAveragesByCode(test_span_code) expected_price_off_average_values_by_symbol = OrderedDict() expected_price_off_average_values_by_symbol['C'] = -0.7209302325581395 expected_price_off_average_values_by_symbol['A'] = -0.6905829596412556 expected_price_off_average_values_by_symbol['D'] = 0.08130081300813008 expected_price_off_average_values_by_symbol['B'] = 0.2289156626506022 self.assertEqual(test_price_off_average_values_by_symbol, expected_price_off_average_values_by_symbol, 'The expected_price_off_average_values_by_symbol was {0}, but {1} was returned while testing getting the percentage delta of today price off of span average'.format(expected_price_off_average_values_by_symbol, test_price_off_average_values_by_symbol)) price_threshold = 2.0 test_sorted_dictionary_of_values_above_price_threshold = testCollection.getSortedDictionaryOfValuesAboveTodayPriceThreshold(test_price_off_average_values_by_symbol, price_threshold) expected_price_off_average_values_by_symbol_above_threshold = OrderedDict() expected_price_off_average_values_by_symbol_above_threshold['A'] = -0.6905829596412556 expected_price_off_average_values_by_symbol_above_threshold['D'] = 0.08130081300813008 expected_price_off_average_values_by_symbol_above_threshold['B'] = 0.2289156626506022 self.assertEqual(test_sorted_dictionary_of_values_above_price_threshold, expected_price_off_average_values_by_symbol_above_threshold, 'The expected_price_off_average_values_by_symbol_above_threshold was {0} but {1} was returned'.format(expected_price_off_average_values_by_symbol_above_threshold, test_sorted_dictionary_of_values_above_price_threshold)) # Test for even/odd unit labels even_units_label = unit_label_prefix + 'even' odd_units_label = unit_label_prefix + 'odd' test_price_off_even_average_values_by_symbol = testCollection.getSortedTodayPricePercentageOffSpanAveragesByCode(test_span_code, even_units_label) test_price_off_odd_average_values_by_symbol = testCollection.getSortedTodayPricePercentageOffSpanAveragesByCode(test_span_code, odd_units_label) expected_price_off_even_average_values = OrderedDict() expected_price_off_even_average_values['C'] = -0.7647058823529411 expected_price_off_even_average_values['A'] = -0.6567164179104478 expected_price_off_even_average_values['B'] = 0.21428571428571433 self.assertEqual(expected_price_off_even_average_values, test_price_off_even_average_values_by_symbol) expected_price_off_odd_average_values = OrderedDict() expected_price_off_odd_average_values['A'] = -0.7415730337078652 expected_price_off_odd_average_values['C'] = -0.5555555555555556 expected_price_off_odd_average_values['B'] = 0.25925925925925913 self.assertEqual(test_price_off_odd_average_values_by_symbol, expected_price_off_odd_average_values) test_sorted_dictionary_of_even_values_above_price_threshold = testCollection.getSortedDictionaryOfValuesAboveTodayPriceThreshold(test_price_off_even_average_values_by_symbol, price_threshold) expected_price_off_even_average_values_by_symbol_above_threshold = OrderedDict() expected_price_off_even_average_values_by_symbol_above_threshold['A'] = -0.6567164179104478 expected_price_off_even_average_values_by_symbol_above_threshold['B'] = 0.21428571428571433 self.assertEqual(expected_price_off_even_average_values_by_symbol_above_threshold, test_sorted_dictionary_of_even_values_above_price_threshold) test_sorted_dictionary_of_odd_values_above_price_threshold = testCollection.getSortedDictionaryOfValuesAboveTodayPriceThreshold(test_price_off_odd_average_values_by_symbol, price_threshold) expected_price_off_odd_average_values_by_symbol_above_threshold = OrderedDict() expected_price_off_odd_average_values_by_symbol_above_threshold['A'] = -0.7415730337078652 expected_price_off_odd_average_values_by_symbol_above_threshold['B'] = 0.25925925925925913 self.assertEqual(expected_price_off_odd_average_values_by_symbol_above_threshold, test_sorted_dictionary_of_odd_values_above_price_threshold)