def test_getitem(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyDict({"s0": s0, "s1": s1}) assert container["s0"] == s0 assert container["s1"] == s1
def test_values(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyContainer(s0=s0, s1=s1) for i, strategy in enumerate(container.values()): assert strategy == [s0, s1][i]
def test_repr(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyList([s0, s1]) assert ( repr(container) == "StrategyList([strategy(<lambda>), strategy(<lambda>)])" )
def test_key(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyContainer(s0=s0, s1=s1) for i, name in enumerate(container.keys()): assert name == ["s0", "s1"][i]
def test_getitem(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyList([s0, s1]) assert container[0] == s0 assert container[1] == s1
def test_logic(self): s0 = create_strategy(lambda universe: [trade("A")]) s1 = create_strategy(lambda universe: [trade("B"), trade("C")]) container = StrategyContainer(s0=s0, s1=s1) universe = ... result = container(universe) assert container(universe) == s0(universe) + s1(universe)
def test_repr(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyDict({"s0": s0, "s1": s1}) assert ( repr(container) == "StrategyDict(OrderedDict([('s0', strategy(<lambda>)), ('s1', strategy(<lambda>))]))" )
def test_append(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyList([]) container.append(s0) assert container[0] == s0 container.append(s1) assert container[1] == s1
def test_len(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyContainer() assert len(container) == 0 container.add_strategy("s0", s0) assert len(container) == 1 container.add_strategy("s1", s1) assert len(container) == 2
def test_items(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyContainer(s0=s0, s1=s1) for (k1), (k2, _) in zip(container.keys(), container.items()): assert k1 == k2 for (v1), (_, v2) in zip(container.values(), container.items()): assert v1 == v2
def test_add_strategy(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyContainer() assert container._strategies == OrderedDict() container.add_strategy("s0", s0) assert container._strategies == OrderedDict({"s0": s0}) container.add_strategy("s1", s1) assert container._strategies == OrderedDict({"s0": s0, "s1": s1})
def test_setitem(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) t0 = create_strategy(lambda universe: []) t1 = create_strategy(lambda universe: []) container = StrategyDict({"s0": s0, "s1": s1}) container["s0"] = t0 assert container["s0"] == t0 container["s1"] = t1 assert container["s1"] == t1
def test_setitem(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) t0 = create_strategy(lambda universe: []) t1 = create_strategy(lambda universe: []) container = StrategyList([s0, s1]) container[0] = t0 assert container[0] == t0 container[1] = t1 assert container[1] == t1
def test_set_params(self): strategy = create_strategy(self.my_strategy, param_1=1.0, param_2=2.0) assert strategy.get_params() == {"param_1": 1.0, "param_2": 2.0} strategy.set_params(param_1=3.0) assert strategy.get_params() == {"param_1": 3.0, "param_2": 2.0} with pytest.raises(ValueError): strategy.set_params(nonexistent_param=1.0)
def test_score_deprecation_warning(self): """ `strategy.evaluate` is deprecated """ strategy = create_strategy(self.my_strategy, param_1=1.0, param_2=2.0) with pytest.raises(DeprecationWarning): strategy.evaluate(None)
def test_add_strategy_typeerror(self): s = create_strategy(lambda universe: []) container = StrategyContainer() with pytest.raises(TypeError): container.add_strategy(0, s) with pytest.raises(TypeError): container.add_strategy("name", None)
def test_run_trades(self, verbose): """Test if trades are the same with call""" strategy = create_strategy(self.my_strategy, param_1=1.0, param_2=2.0) universe = self.universe result = strategy.run(universe, verbose=verbose).trades expected = strategy(universe) assert result == expected
def test_abs_exposure(self): universe = pd.DataFrame( { "A0": [1.0, 2.0, 3.0, 4.0, 5.0], "A1": [2.0, 3.0, 4.0, 5.0, 6.0], "A2": [3.0, 4.0, 5.0, 6.0, 7.0], }, dtype=float, ) strategy = create_strategy(lambda _: [ [1, -1] * trade(["A0", "A2"], entry=1, exit=3), [-1, 2] * trade(["A1", "A2"], entry=2, exit=4), ]).run(universe, verbose=False) result = strategy.abs_exposure() expect = pd.Series([0, 0, 8, 15, 20], index=universe.index) pd.testing.assert_series_equal(result, expect, check_dtype=False)
def test_exposure(self): universe = pd.DataFrame( { "A0": [1.0, 2.0, 3.0, 4.0, 5.0], "A1": [2.0, 3.0, 4.0, 5.0, 6.0], "A2": [3.0, 4.0, 5.0, 6.0, 7.0], }, dtype=float, ) strategy = create_strategy(lambda universe: [ [1, -1] * trade(["A0", "A2"], entry=1, exit=3), [-1, 2] * trade(["A1", "A2"], entry=2, exit=4), ]).run(universe, verbose=False) result = strategy.exposure() expect = pd.DataFrame( [[0, 0, 0], [0, 0, 0], [3, 0, -5], [4, -5, 6], [0, -6, 14]], index=universe.index, columns=universe.columns, ) pd.testing.assert_frame_equal(result, expect, check_dtype=False)
def test_get_params(self): strategy = create_strategy(self.my_strategy, param_1=1.0, param_2=2.0) assert strategy.get_params() == {"param_1": 1.0, "param_2": 2.0} strategy = MyStrategy(param_1=1.0, param_2=2.0) assert strategy.get_params() == {}
if __name__ == "__main__": sys.path.append("..") seaborn.set_style("whitegrid") # --- import pandas as pd import epymetheus as ep from epymetheus.benchmarks import dumb_strategy # --- my_strategy = ep.create_strategy(dumb_strategy, profit_take=20.0, stop_loss=-10.0) # --- from epymetheus.datasets import fetch_usstocks universe = fetch_usstocks() print(">>> universe.head()") print_as_comment(universe.head()) print(">>> my_strategy.run(universe)") my_strategy.run(universe) # ---
def test_repr(self): strategy = create_strategy(my_func, param_1=1.0, param_2=2.0) assert repr(strategy) == "strategy(my_func, param_1=1.0, param_2=2.0)" strategy = MyStrategy(param_1=1.0, param_2=2.0) assert repr(strategy) == "MyStrategy"
def test_init_from_func(self): strategy = create_strategy(self.my_strategy, param_1=1.0, param_2=2.0) universe = self.universe assert strategy(universe) == [1.0 * trade("A"), 2.0 * trade("B")]
def test_run_notradeerror(self, verbose): strategy = create_strategy(lambda universe: []) universe = self.universe with pytest.raises(NoTradeError): strategy.run(universe, verbose=verbose)
def test_list(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyList([s0, s1]) assert container.list() == [s0, s1]
def test_dict(self): s0 = create_strategy(lambda universe: []) s1 = create_strategy(lambda universe: []) container = StrategyDict({"s0": s0, "s1": s1}) assert container.dict() == OrderedDict(s0=s0, s1=s1)