From e2bf43ef8e47718980d4c1923ce8c9d73aa7083d Mon Sep 17 00:00:00 2001 From: QuentinN42 Date: Fri, 28 Jan 2022 00:25:21 +0100 Subject: [PATCH] feat: indicators aggregation --- auto_trading/interfaces.py | 4 +++- tests/interfaces/test_strategy.py | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/interfaces/test_strategy.py diff --git a/auto_trading/interfaces.py b/auto_trading/interfaces.py index d5925cd..b893b71 100644 --- a/auto_trading/interfaces.py +++ b/auto_trading/interfaces.py @@ -111,7 +111,9 @@ class Strategy(ABC): Returns: List[Order]: A list of orders to execute. """ - indicators_results: DataFrame = ... + indicators_results = DataFrame( + {k: v(data) for k, v in self.indicators.items()} + ).T return self.execute(data, indicators_results, state) @abstractmethod diff --git a/tests/interfaces/test_strategy.py b/tests/interfaces/test_strategy.py new file mode 100644 index 0000000..cde18e4 --- /dev/null +++ b/tests/interfaces/test_strategy.py @@ -0,0 +1,19 @@ +from pandas import DataFrame, Series # type: ignore + +from auto_trading.interfaces import Strategy +from auto_trading.indicators.dumb import Dumb + + +s1 = Series({"GOOG": 1, "GOOGL": 2}) +s2 = Series({"GOOG": 3, "GOOGL": 4}) +result = DataFrame({"GOOG": {"n1": 1, "n2": 3}, "GOOGL": {"n1": 2, "n2": 4}}) + + +class UselessStrategy(Strategy): + def execute(self, data, indicators_results: DataFrame, ptf_state): + assert (indicators_results == result).all().all() + + +def test_indicators_agg(): + strat = UselessStrategy({"n1": Dumb(s1), "n2": Dumb(s2)}) + strat.run(DataFrame(), None)