def test_chart_with_technical_calculator(self): ma_counts = [3, 7] tech_calc = TechnicalCalculator(ma_counts) chart = Chart(span_minutes=1, technical_calculator=tech_calc) count = 10 for i in range(count): latest_div_10 = (i + 1) latest_end_value = latest_div_10 * 10 chart.add_new_data(10000 * 60 + i * 60 + 1, latest_end_value) bar = chart.bars_w_starttime[-1][1] for ma_count in ma_counts: key = str(ma_count) + "ma_end" key_div = key + "_div_rate" self.assertTrue(key in bar.technical_values) self.assertTrue(key_div in bar.technical_values) if latest_div_10 < ma_count: self.assertTrue(bar.technical_values[key] is None) self.assertTrue(bar.technical_values[key_div] is None) else: ma = sum([ _ * 10.0 for _ in range(latest_div_10 + 1 - ma_count, latest_div_10 + 1) ]) ma /= ma_count self.assertAlmostEqual(ma, bar.technical_values[key]) self.assertAlmostEqual((latest_end_value - ma) / ma, bar.technical_values[key_div])
def test_add_bars(self): chart = Chart(span_minutes=5) self.assertEqual(0, len(chart.bars_w_starttime)) unixtime1 = 60 * 5 * 10000 + 60 * 5 * 10 + 3 chart.add_new_data(unixtime1, 20) self.assertEqual(1, len(chart.bars_w_starttime)) self.assertEqual(60 * 5 * 10000 + 60 * 5 * 10, chart.bars_w_starttime[0][0]) self.assertEqual(20, chart.bars_w_starttime[0][1].begin) self.assertEqual(20, chart.bars_w_starttime[0][1].end) self.assertEqual(20, chart.bars_w_starttime[0][1].low) self.assertEqual(20, chart.bars_w_starttime[0][1].high) self.assertFalse(chart.bars_w_starttime[0][1].is_freezed()) unixtime2 = 60 * 5 * 10000 + 60 * 5 * 10 + 43 chart.add_new_data(unixtime2, 40) self.assertEqual(1, len(chart.bars_w_starttime)) self.assertEqual(60 * 5 * 10000 + 60 * 5 * 10, chart.bars_w_starttime[0][0]) self.assertEqual(20, chart.bars_w_starttime[0][1].begin) self.assertEqual(40, chart.bars_w_starttime[0][1].end) self.assertEqual(20, chart.bars_w_starttime[0][1].low) self.assertEqual(40, chart.bars_w_starttime[0][1].high) self.assertFalse(chart.bars_w_starttime[0][1].is_freezed()) unixtime3 = 60 * 5 * 10000 + 60 * 5 * 11 + 8 chart.add_new_data(unixtime3, 10) self.assertEqual(2, len(chart.bars_w_starttime)) self.assertEqual(60 * 5 * 10000 + 60 * 5 * 10, chart.bars_w_starttime[0][0]) self.assertTrue(chart.bars_w_starttime[0][1].is_freezed()) self.assertEqual(60 * 5 * 10000 + 60 * 5 * 11, chart.bars_w_starttime[1][0]) self.assertEqual(10, chart.bars_w_starttime[1][1].begin) self.assertEqual(10, chart.bars_w_starttime[1][1].end) self.assertEqual(10, chart.bars_w_starttime[1][1].low) self.assertEqual(10, chart.bars_w_starttime[1][1].high) self.assertFalse(chart.bars_w_starttime[1][1].is_freezed()) unixtime4 = 60 * 5 * 10000 + 60 * 5 * 14 + 8 chart.add_new_data(unixtime4, 100) self.assertEqual(5, len(chart.bars_w_starttime)) for i in range(2, 4): self.assertEqual(60 * 5 * 10000 + 60 * 5 * (10 + i), chart.bars_w_starttime[i][0]) self.assertEqual(10, chart.bars_w_starttime[i][1].begin) self.assertEqual(10, chart.bars_w_starttime[i][1].end) self.assertEqual(10, chart.bars_w_starttime[i][1].low) self.assertEqual(10, chart.bars_w_starttime[i][1].high) self.assertTrue(chart.bars_w_starttime[i][1].is_freezed()) self.assertEqual(60 * 5 * 10000 + 60 * 5 * 14, chart.bars_w_starttime[4][0]) self.assertEqual(100, chart.bars_w_starttime[4][1].begin) self.assertEqual(100, chart.bars_w_starttime[4][1].end) self.assertEqual(100, chart.bars_w_starttime[4][1].low) self.assertEqual(100, chart.bars_w_starttime[4][1].high) self.assertFalse(chart.bars_w_starttime[4][1].is_freezed())
def test_chart_less_than_1min_bar(self): chart = Chart(span_minutes=0.714) span_seconds = int(60 * 0.714) self.assertEqual(0, len(chart.bars_w_starttime)) unixtime1 = span_seconds * 10000 + span_seconds * 10 + 3 chart.add_new_data(unixtime1, 20) self.assertEqual(1, len(chart.bars_w_starttime)) self.assertEqual(span_seconds * 10000 + span_seconds * 10, chart.bars_w_starttime[0][0]) self.assertEqual(20, chart.bars_w_starttime[0][1].begin) self.assertEqual(20, chart.bars_w_starttime[0][1].end) self.assertEqual(20, chart.bars_w_starttime[0][1].low) self.assertEqual(20, chart.bars_w_starttime[0][1].high) self.assertFalse(chart.bars_w_starttime[0][1].is_freezed()) unixtime2 = span_seconds * 10000 + span_seconds * 10 + 32 chart.add_new_data(unixtime2, 40) self.assertEqual(1, len(chart.bars_w_starttime)) self.assertEqual(span_seconds * 10000 + span_seconds * 10, chart.bars_w_starttime[0][0]) self.assertEqual(20, chart.bars_w_starttime[0][1].begin) self.assertEqual(40, chart.bars_w_starttime[0][1].end) self.assertEqual(20, chart.bars_w_starttime[0][1].low) self.assertEqual(40, chart.bars_w_starttime[0][1].high) self.assertFalse(chart.bars_w_starttime[0][1].is_freezed()) unixtime3 = span_seconds * 10000 + span_seconds * 11 + 8 chart.add_new_data(unixtime3, 10) self.assertEqual(2, len(chart.bars_w_starttime)) self.assertEqual(span_seconds * 10000 + span_seconds * 10, chart.bars_w_starttime[0][0]) self.assertTrue(chart.bars_w_starttime[0][1].is_freezed()) self.assertEqual(span_seconds * 10000 + span_seconds * 11, chart.bars_w_starttime[1][0]) self.assertEqual(10, chart.bars_w_starttime[1][1].begin) self.assertEqual(10, chart.bars_w_starttime[1][1].end) self.assertEqual(10, chart.bars_w_starttime[1][1].low) self.assertEqual(10, chart.bars_w_starttime[1][1].high) self.assertFalse(chart.bars_w_starttime[1][1].is_freezed())
def test_update_freeze(self): chart = Chart(span_minutes=5) self.assertEqual(0, len(chart.bars_w_starttime)) unixtime1 = 10000 * 60 * 5 + 60 * 5 * 10 + 3 chart.add_new_data(unixtime1, 20) self.assertEqual(1, len(chart.bars_w_starttime)) self.assertEqual(10000 * 60 * 5 + 60 * 5 * 10, chart.bars_w_starttime[0][0]) self.assertEqual(20, chart.bars_w_starttime[0][1].begin) self.assertEqual(20, chart.bars_w_starttime[0][1].end) self.assertEqual(20, chart.bars_w_starttime[0][1].low) self.assertEqual(20, chart.bars_w_starttime[0][1].high) self.assertFalse(chart.bars_w_starttime[0][1].is_freezed()) chart.update_freeze_state(10000 * 60 * 5 + 60 * 5 * 11 + 30) self.assertTrue(chart.bars_w_starttime[0][1].is_freezed())
def create_chartbase(self): chart = Chart(span_minutes=1, technical_calculator=TechnicalCalculator([3])) return chart
def test_get_bar_from_last(self): chart = Chart(span_minutes=5) self.assertEqual(0, len(chart.bars_w_starttime)) unixtime1 = 10000 * 60 * 5 + 60 * 5 * 10 + 3 chart.add_new_data(unixtime1, 20) last_bar = chart.get_bar_from_last(get_copy=False) self.assertEqual(20, last_bar.end) self.assertEqual(last_bar, chart.bars_w_starttime[-1][1]) self.assertEqual(chart.get_bar_from_last(1), None) copy = chart.get_bar_from_last(get_copy=True) self.assertEqual(20, copy.end) self.assertNotEqual(copy, chart.bars_w_starttime[-1][1]) unixtime2 = 10000 * 60 * 5 + 60 * 5 * 11 + 73 chart.add_new_data(unixtime2, 40) last_bar = chart.get_bar_from_last(get_copy=False) self.assertEqual(40, last_bar.end) self.assertEqual(False, last_bar.is_freezed()) last_prev_bar = chart.get_bar_from_last(1, get_copy=True) self.assertNotEqual(last_prev_bar, chart.bars_w_starttime[-2][1]) self.assertEqual(20, copy.end) self.assertEqual(True, last_prev_bar.is_freezed())
def test_convert_unixtime_to_bar_indexlike_value(self): chart = Chart(span_minutes=5) unixtime = 60 * 5 + 95 self.assertEqual( 1, chart.convert_unixtime_to_bar_indexlike_value(unixtime)) self.assertEqual(5 * 60, chart.convert_indexlike_value_to_unixtime(1)) unixtime = 60 * 5 * 2 + 87.5 self.assertEqual( 2, chart.convert_unixtime_to_bar_indexlike_value(unixtime)) self.assertEqual(60 * 5 * 2, chart.convert_indexlike_value_to_unixtime(2.5)) chart = Chart(span_minutes=15) unixtime = 60 * 15 + 95 self.assertEqual( 1, chart.convert_unixtime_to_bar_indexlike_value(unixtime)) self.assertEqual(15 * 60, chart.convert_indexlike_value_to_unixtime(1)) unixtime = 60 * 15 * 2 + 87.5 self.assertEqual( 2, chart.convert_unixtime_to_bar_indexlike_value(unixtime)) self.assertEqual(15 * 60 * 2, chart.convert_indexlike_value_to_unixtime(2.5)) chart = Chart(span_minutes=1) unixtime = 60 * 1 + 35 self.assertEqual( 1, chart.convert_unixtime_to_bar_indexlike_value(unixtime)) self.assertEqual(60, chart.convert_indexlike_value_to_unixtime(1)) unixtime = 60 * 1 * 2 + 37.5 self.assertEqual( 2, chart.convert_unixtime_to_bar_indexlike_value(unixtime)) self.assertEqual(60 * 1 * 2, chart.convert_indexlike_value_to_unixtime(2.5))
def create_chartbase(self): chart = Chart(span_minutes=1) return chart