예제 #1
0
 def fill_wave_type_number_dicts(self):
     for wave_type in WAVEST.get_waves_types_for_processing([]):
         wave_type_number_list = []
         for tick in self.tick_list:
             wave_type_number_list.append(
                 tick.get_wave_number_for_wave_type(wave_type))
         self._wave_type_number_min_dict[wave_type] = np.min(
             wave_type_number_list)
         self._wave_type_number_max_dict[wave_type] = np.max(
             wave_type_number_list)
 def __init_by_period_and_aggregation__(self,
                                        period=PRD.ALL,
                                        aggregation=1):
     self._period = period
     self._aggregation = aggregation
     self._period_list = [PRD.INTRADAY, PRD.DAILY
                          ] if period == PRD.ALL else [period]
     self._wave_types = WAVEST.get_waves_types_for_processing(
         self._period_list)
     self._fibonacci_wave_data_dict = self.__get_fibonacci_wave_data_dict__(
     )
 def __fill_waves_into_index_wave_type_number_dict__(self):
     self._daily_index_wave_type_number_dict = {}
     self._intraday_index_wave_type_number_dict = {}
     for wave_type in self._wave_types:
         period, direction = WAVEST.get_period_and_direction_for_wave_type(
             wave_type)
         for index in self._index_list:
             key = '{}_{}'.format(index, wave_type)
             df = self.__get_df_wave_for_period_and_direction__(
                 period, direction)
             self._index_wave_type_number_dict[key] =\
                 self.__get_key_number_dict_for_index_and_wave_type__(df, index, period)
 def __init__(self, access_layer_wave: AccessLayer4Wave,
              index_config: IndexConfiguration):
     self._access_layer_wave = access_layer_wave
     self._index_config = index_config
     self._aggregation = self.__get_aggregation__()
     self._period = WPDT.get_period_for_wave_period_key(
         self.wave_peak_date_type)
     self._wave_types = WAVEST.get_waves_types_for_period(self._period)
     self._index_list = index_config.index_list
     self._data_last_fetched_time_stamp = 0
     self._index_wave_type_number_dict = {
     }  # contains itself a dictionary {wave_period_key: number, ..}
     self._df_wave = {}
     self._tick_key_list_for_retrospection = []
 def load_data(self, period=PRD.ALL, aggregation=1):  # with group by data frames
     self._period_list = [PRD.INTRADAY, PRD.DAILY] if period==PRD.ALL else [period]
     self._wave_types = WAVEST.get_waves_types_for_processing(self._period_list)
     self._period = self._period_list[0]
     self._aggregation = aggregation
     self._seconds_unit = self.__get_seconds_for_unit__()
     for period in self._period_list:
         if period == PRD.DAILY:
             wave_period_key = WPDT.DAILY_DATE
         else:
             wave_period_key = WPDT.INTRADAY_TS
         self._df_wave_dict[period] = self._access_layer_wave.get_grouped_by_for_wave_peak_plotting(
             wave_period_key, aggregation)
     self.__fill_waves_into_index_wave_type_number_dict__()
     self._data_last_fetched_time_stamp = MyDate.time_stamp_now()
 def __plot_wave_peaks__(self):
     index = self.sys_config.index_config.get_index_for_symbol(self.symbol)
     period = self.sys_config.period
     aggregation = self.sys_config.period_aggregation
     wave_tick_list = WaveTickList(self.pdh.pattern_data.df)
     wave_data_handler = self.sys_config.fibonacci_wave_data_handler
     wave_data_handler.fill_wave_type_number_dict_for_ticks_in_wave_tick_list(wave_tick_list, index, period)
     for tick in wave_tick_list.tick_list:
         for wave_type in WAVEST.get_waves_types_for_processing([period]):
             color = wave_data_handler.get_color_for_wave_type_and_period(wave_type, period)
             # if tick.date_str == '2019-03-07':
             #     print(color)
             number_waves = tick.get_wave_number_for_wave_type(wave_type)
             if number_waves >= 1:  # thresholds were calculated in a pre-process
                 xy = wave_tick_list.get_xy_parameters_for_wave_peak(tick, wave_type, period, aggregation)
                 self.__add_xy_values_as_polygon__(xy, color, closed=True, fill=False, alpha=1, line_width=1)
 def __get_data_for_heatmap_figure__(self,
                                     index: str,
                                     for_mood_graph=False):
     x_data = self._wave_handler.tick_key_list_for_retrospection
     if self._wave_handler.period_for_retrospection == PRD.INTRADAY:
         x_data = [
             str(MyDate.get_date_time_from_epoch_seconds(key))
             for key in x_data
         ]
     y_data = WAVEST.get_waves_types_for_processing(
         [self._wave_handler.period_for_retrospection])
     y_data = y_data[::-1]  # we want them in this order
     z_data = [
         self._wave_handler.get_waves_number_list_for_wave_type_and_index(
             wt, index) for wt in y_data
     ]
     # print('__get_data_for_heatmap_figure__: {}: \n{}\n{}\n{}'.format(index, x_data, y_data, z_data))
     if for_mood_graph:
         return self.__get_heatmap_data_for_mood_graph__(
             x_data, y_data, z_data)
     return [x_data, y_data, z_data]
 def __get_wave_peak_shape_list__(self, detector: PatternDetector):
     return_list = []
     symbol = detector.sys_config.runtime_config.actual_ticker
     index = detector.sys_config.index_config.get_index_for_symbol(symbol)
     period = detector.sys_config.period
     # print('__get_wave_peak_shape_list__: symbol={}, index={}'.format(symbol, index))
     wave_tick_list = WaveTickList(detector.pdh.pattern_data.df)
     self._fibonacci_wave_data_handler.fill_wave_type_number_dict_for_ticks_in_wave_tick_list(
         wave_tick_list, index, period)
     for tick in wave_tick_list.tick_list:
         for wave_type in WAVEST.get_waves_types_for_processing([PRD.DAILY
                                                                 ]):
             number_waves = tick.get_wave_number_for_wave_type(wave_type)
             if number_waves >= 1:  # in the pre-process we have already used thresholds
                 color = self._fibonacci_wave_data_handler.get_color_for_wave_type_and_period(
                     wave_type, period)
                 shape = DashInterface.get_wave_peak_shape(
                     detector.sys_config, wave_tick_list, tick, wave_type,
                     color)
                 if shape is not None:
                     return_list.append(shape)
     return return_list
예제 #9
0
fibonacci_wave_data_handler = FibonacciWaveDataHandler(StockDatabase())
fibonacci_wave_data_handler.load_data(period=PRD.DAILY, aggregation=1)

test_case = FWDHTC.HEAT_MAP

if test_case == FWDHTC.RELOAD:
    fibonacci_wave_data_handler.reload_data_when_outdated()
elif test_case == FWDHTC.HEAT_MAP:
    period = PRD.DAILY
    aggregation = 1
    index = INDICES.Q_FSE
    fibonacci_wave_data_handler.init_tick_key_list_for_retrospection(
        100, period=period, aggregation=aggregation)
    x_data = fibonacci_wave_data_handler.tick_key_list_for_retrospection
    y_data = WAVEST.get_waves_types_for_processing(
        [fibonacci_wave_data_handler.period_for_retrospection])
    z_data = [
        fibonacci_wave_data_handler.
        get_waves_number_list_for_wave_type_and_index(wt, index)
        for wt in y_data
    ]
    # print('__get_data_for_heatmap_figure__: {}: \n{}\n{}\n{}'.format(index, x_data, y_data, z_data))
    for index_z, z_data_list in enumerate(z_data):
        z_data_list_with_numbers = []
        for index, key in enumerate(x_data):
            if z_data_list[index] > 0:
                z_data_list_with_numbers.append('{}: {}'.format(
                    key, z_data_list[index]))
        print('{}: {}'.format(y_data[index_z], z_data_list_with_numbers))
 def __get_df_wave_for_wave_type__(self, show_period: str, wave_type: str) -> pd.DataFrame:
     period, direction = WAVEST.get_period_and_direction_for_wave_type(wave_type)
     df_for_period = self._df_wave_dict[show_period]
     df = df_for_period[df_for_period[DC.PERIOD] == period]
     return df[df[DC.WAVE_TYPE] == direction]