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
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]