kraken-bot/kraken_bot/LinearRegression.py
Eric Meehan e2034cfa65 Post log messages to Matrix (#6)
Reverted to MyStrategy instead of Cerebro experiments and implemented base functionality for a Matrix logging mechanism.

Reviewed-on: #6
2025-02-09 15:48:04 +00:00

54 lines
2.0 KiB
Python

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)