import os import pandas from scipy.stats import linregress from kraken_bot.Model import Model class LinearRegression(Model): def __init__(self): self.r_value_target = float(os.getenv('R_VALUE_TARGET')) self.analysis = pandas.DataFrame({}) super().__init__( interval = 1, ascending = False ) def _linear_regression_for_ohlc_data(self, ohlc_data): self.log.debug(f"_linear_regression_for_ohlc_data: ohlc_data=...") return linregress(ohlc_data['time'].astype(float), ohlc_data['close'].astype(float)) def _filter_asset_pairs(self, tradable_asset_pairs): self.log.debug(f"_filter_asset_pairs: tradable_asset_pairs=...") return tradable_asset_pairs[ (tradable_asset_pairs['quote'] == 'ZUSD') & (tradable_asset_pairs['status'] == 'online') ] def _filter_regressions(self, regressions): self.log.debug(f"_filter_regressions: regressions=...") regressions.columns = ['slope', 'intercept', 'r_value', 'p_value', 'stderr'] return regressions[ (regressions.r_value >= self.r_value_target) & (regressions.slope > 0) ] def _order_regressions(self, regressions): self.log.debug(f"_order_regressions: regressions=...") return regressions.sort_values(by='slope', ascending=False) def since(self): return None def update(self, tradable_asset_pairs, ohlc_data): self.log.debug(f"update: tradable_asset_pairs=..., ohlc_data=...") self.analysis = self._order_regressions( self._filter_regressions( pandas.DataFrame({ asset_pair: self._linear_regression_for_ohlc_data( ohlc_data[asset_pair][0] ) for asset_pair in self._filter_asset_pairs(tradable_asset_pairs).index }).transpose() )) self.log.debug(self.analysis)