def __add_observation_specific_columns_to_data_dict__(self): self._entity_data_dict[POC.LIMIT_PCT] = self.__get_limit_pct__() self._entity_data_dict[ POC.STOP_LOSS_PCT] = self.__get_stop_loss_pct__() self._entity_data_dict[POC.CURRENT_TICK_PCT] = 0 self._entity_data_dict[POC.CURRENT_VALUE_HIGH_PCT] = 0 self._entity_data_dict[POC.CURRENT_VALUE_LOW_PCT] = 0 self._entity_data_dict[POC.CURRENT_VALUE_OPEN_PCT] = 0 self._entity_data_dict[POC.CURRENT_VALUE_CLOSE_PCT] = 0 self._entity_data_dict[POC.CURRENT_VOLUME_BUY_PCT] = 0 self._entity_data_dict[POC.CURRENT_VOLUME_LAST_PCT] = 0 self._entity_data_dict[ POC.BEFORE_PATTERN_MAX_PCT] = MyMath.get_change_in_percentage( self.buy_price, self.wave_tick_list_before_pattern.df[CN.HIGH].max()) self._entity_data_dict[ POC.BEFORE_PATTERN_MIN_PCT] = MyMath.get_change_in_percentage( self.buy_price, self.wave_tick_list_before_pattern.df[CN.LOW].min()) self._entity_data_dict[ POC.PATTERN_MAX_PCT] = MyMath.get_change_in_percentage( self.buy_price, self.wave_tick_list_pattern.df[CN.HIGH].max()) self._entity_data_dict[ POC.PATTERN_MIN_PCT] = MyMath.get_change_in_percentage( self.buy_price, self.wave_tick_list_pattern.df[CN.LOW].min()) self._entity_data_dict[POC.AFTER_BUY_MAX_PCT] = 0 self._entity_data_dict[POC.AFTER_BUY_MIN_PCT] = 0 self._entity_data_dict[ POC. FC_TICKS_TO_POSITIVE_HALF_PCT] = self.__get_forecast_ticks_as_pct__( DC.FC_TICKS_TO_POSITIVE_HALF) self._entity_data_dict[ POC. FC_TICKS_TO_POSITIVE_FULL_PCT] = self.__get_forecast_ticks_as_pct__( DC.FC_TICKS_TO_POSITIVE_FULL) self._entity_data_dict[ POC. FC_TICKS_TO_NEGATIVE_HALF_PCT] = self.__get_forecast_ticks_as_pct__( DC.FC_TICKS_TO_NEGATIVE_HALF) self._entity_data_dict[ POC. FC_TICKS_TO_NEGATIVE_FULL_PCT] = self.__get_forecast_ticks_as_pct__( DC.FC_TICKS_TO_NEGATIVE_FULL)
def get_slope(self, pos_start: int, pos_end: int, df_col: str = CN.CLOSE): df_part = self.df.iloc[pos_start:pos_end + 1] # print('get_slope: pos_start={}, pos_end={}, df_col={}, df_part.shape[0]={}'.format( # pos_start, pos_end, df_col, df_part.shape[0])) tick_first = WaveTick(df_part.iloc[0]) tick_last = WaveTick(df_part.iloc[-1]) stock_df = PatternDataFrame(df_part) func = stock_df.get_f_regression(df_col) offset_value = df_part[df_col].mean() return MyMath.get_change_in_percentage(func(tick_first.f_var), func(tick_last.f_var), offset_value=offset_value)
def __adjust_observation_to_wave_tick__(self, obs: TradeObservation, wave_tick: WaveTick, wave_tick_previous: WaveTick): obs.wave_tick = wave_tick obs.current_value_high_pct = MyMath.get_change_in_percentage( self.off_set_value, wave_tick.high) obs.current_value_low_pct = MyMath.get_change_in_percentage( self.off_set_value, wave_tick.low) obs.current_value_open_pct = MyMath.get_change_in_percentage( self.off_set_value, wave_tick.open) obs.current_value_close_pct = MyMath.get_change_in_percentage( self.off_set_value, wave_tick.close) obs.current_volume_buy_pct = MyMath.get_change_in_percentage( self.off_set_volume, wave_tick.volume) obs.current_volume_last_pct = MyMath.get_change_in_percentage( wave_tick_previous.volume, wave_tick.volume)
def __get_stop_loss_pct__(self): # we don't use self._entity_data_dict[DC.TRADE_BOX_STOP_LOSS_ORIG] - too narrow !!! stop_loss = self.buy_price - self._entity_data_dict[ DC.TRADE_BOX_HEIGHT] return MyMath.get_change_in_percentage(self.buy_price, stop_loss)
def __get_limit_pct__(self): limit_orig = self._entity_data_dict[DC.TRADE_BOX_LIMIT_ORIG] if limit_orig == math.inf: limit_orig = self._entity_data_dict[DC.TRADE_BOX_STOP_LOSS_ORIG] \ + self._entity_data_dict[DC.TRADE_BOX_HEIGHT] return MyMath.get_change_in_percentage(self.buy_price, limit_orig)
def __get_slope_in_decimal_percentage__(self, func: np.poly1d): return MyMath.get_change_in_percentage( func(self._tick_first.f_var), func(self.tick_last.f_var), offset_value=self._slope_offset_value)