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)