Skip to content

Commit 327509d

Browse files
committed
Update tests
1 parent 2321bab commit 327509d

18 files changed

+861
-379
lines changed

tests/app/algorithm/test_algorithm_factory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,4 @@ def test_with_strategy_param(self):
5252
self.assertEqual(len(algorithm.strategies), 1)
5353
self.assertEqual(len(algorithm.tasks), 0)
5454
self.assertEqual(len(algorithm.on_strategy_run_hooks), 0)
55-
self.assertEqual(len(algorithm.strategies[0].data_sources), 1)
55+
self.assertEqual(len(algorithm.strategies[0].data_sources), 2)

tests/app/algorithm/test_create_limit_buy_order.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from unittest.mock import patch
12
from investing_algorithm_framework import PortfolioConfiguration, \
23
OrderStatus, MarketCredential
34
from tests.resources import TestBase
@@ -48,7 +49,17 @@ def test_create_limit_buy_order(self):
4849
order = order_repository.find({"target_symbol": "BTC"})
4950
self.assertEqual(OrderStatus.OPEN.value, order.status)
5051

51-
def test_create_limit_buy_order_with_percentage_of_portfolio(self):
52+
# path data_provider_service.get_ticker_data
53+
@patch("investing_algorithm_framework.services.data_providers.DataProviderService."
54+
"get_ticker_data")
55+
def test_create_limit_buy_order_with_percentage_of_portfolio(
56+
self, mock_get_ticker
57+
):
58+
mock_get_ticker.return_value = {
59+
"symbol": "BTCEUR",
60+
"ask": 100,
61+
"bid": 90
62+
}
5263
self.app.add_strategy(StrategyOne)
5364
self.app.context.create_limit_order(
5465
target_symbol="BTC",

tests/app/algorithm/test_create_limit_sell_order.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from unittest.mock import patch
12
from investing_algorithm_framework import PortfolioConfiguration, \
23
OrderStatus, MarketCredential
34
from tests.resources import TestBase
@@ -22,7 +23,17 @@ class Test(TestBase):
2223
"EUR": 1000
2324
}
2425

25-
def test_create_limit_sell_order(self):
26+
@patch(
27+
"investing_algorithm_framework.services.data_providers"
28+
".DataProviderService.get_ticker_data"
29+
)
30+
def test_create_limit_sell_order(self, mock_get_ticker):
31+
mock_get_ticker.return_value = {
32+
"symbol": "BTCEUR",
33+
"bid": 10,
34+
"ask": 10,
35+
"last": 10
36+
}
2637
self.app.add_strategy(StrategyOne)
2738
self.app.run(number_of_iterations=1)
2839
self.app.context.create_limit_order(
@@ -55,7 +66,20 @@ def test_create_limit_sell_order(self):
5566
)
5667
self.assertEqual(20, order.get_amount())
5768

58-
def test_create_limit_sell_order_with_percentage_position(self):
69+
@patch(
70+
"investing_algorithm_framework.services.data_providers"
71+
".DataProviderService.get_ticker_data"
72+
)
73+
def test_create_limit_sell_order_with_percentage_position(
74+
self, mock_get_ticker
75+
):
76+
mock_get_ticker.return_value = {
77+
"symbol": "BTCEUR",
78+
"bid": 10,
79+
"ask": 10,
80+
"last": 10
81+
}
82+
5983
self.app.add_strategy(StrategyOne)
6084
self.app.run(number_of_iterations=1)
6185
self.app.context.create_limit_order(

tests/app/algorithm/test_get_allocated.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1+
from typing import Dict, Any
12
from unittest.mock import patch
3+
4+
import pandas as pd
5+
26
from investing_algorithm_framework import TradingStrategy, TimeUnit, \
37
MarketCredential, PortfolioConfiguration
48
from tests.resources import TestBase
@@ -8,7 +12,7 @@ class StrategyOne(TradingStrategy):
812
time_unit = TimeUnit.SECOND
913
interval = 2
1014

11-
def apply_strategy(
15+
def run_strategy(
1216
self,
1317
context,
1418
data=None,
@@ -20,6 +24,12 @@ def apply_strategy(
2024
price=10,
2125
)
2226

27+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[str, pd.Series]:
28+
pass
29+
30+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[str, pd.Series]:
31+
pass
32+
2333

2434
class Test(TestBase):
2535
external_balances = {

tests/app/algorithm/test_run_strategy.py

Lines changed: 11 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import os
2+
from typing import Dict, Any
23
from unittest import TestCase
34

5+
import pandas as pd
6+
47
from investing_algorithm_framework import create_app, TradingStrategy, \
58
TimeUnit, PortfolioConfiguration, RESOURCE_DIRECTORY, Algorithm, \
69
MarketCredential
@@ -12,17 +15,23 @@ class StrategyOne(TradingStrategy):
1215
time_unit = TimeUnit.SECOND
1316
interval = 2
1417

15-
def apply_strategy(self, context, data):
18+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[
19+
str, pd.Series]:
1620
pass
1721

22+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[
23+
str, pd.Series]:
24+
pass
1825

1926
class StrategyTwo(TradingStrategy):
2027
time_unit = TimeUnit.SECOND
2128
interval = 2
2229

23-
def apply_strategy(self, context, data):
30+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[str, pd.Series]:
2431
pass
2532

33+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[str, pd.Series]:
34+
pass
2635

2736
class Test(TestCase):
2837
portfolio_configurations = [
@@ -98,34 +107,6 @@ def test_with_strategy_object(self):
98107
self.assertTrue(app.has_run("StrategyOne"))
99108
self.assertTrue(app.has_run("StrategyTwo"))
100109

101-
def test_with_decorator(self):
102-
app = create_app(config={RESOURCE_DIRECTORY: self.resource_dir})
103-
app.add_portfolio_provider(PortfolioProviderTest)
104-
app.add_order_executor(OrderExecutorTest)
105-
app.container.portfolio_configuration_service().clear()
106-
app.add_portfolio_configuration(
107-
PortfolioConfiguration(
108-
market="BINANCE",
109-
trading_symbol="EUR",
110-
)
111-
)
112-
app.add_market_credential(
113-
MarketCredential(
114-
market="BINANCE",
115-
api_key=random_string(10),
116-
secret_key=random_string(10)
117-
)
118-
)
119-
algorithm = Algorithm()
120-
121-
@app.strategy(time_unit=TimeUnit.SECOND, interval=1)
122-
def run_strategy(context, data):
123-
pass
124-
125-
app.add_algorithm(algorithm)
126-
app.run(number_of_iterations=1)
127-
self.assertTrue(app.has_run("run_strategy"))
128-
129110
def test_stateless(self):
130111
app = create_app(config={RESOURCE_DIRECTORY: self.resource_dir})
131112
app.add_portfolio_provider(PortfolioProviderTest)

tests/app/backtesting/test_run_backtest.py

Lines changed: 8 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
import shutil
33
from datetime import datetime, timedelta, timezone
44
from unittest import TestCase
5+
from typing import Dict, Any
6+
import pandas as pd
57

68
from investing_algorithm_framework import create_app, RESOURCE_DIRECTORY, \
79
TradingStrategy, PortfolioConfiguration, TimeUnit, Algorithm, \
@@ -13,7 +15,12 @@ class TestStrategy(TradingStrategy):
1315
time_unit = TimeUnit.MINUTE
1416
interval = 1
1517

16-
def run_strategy(self, context, data):
18+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[
19+
str, pd.Series]:
20+
pass
21+
22+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[
23+
str, pd.Series]:
1724
pass
1825

1926

@@ -113,42 +120,3 @@ def test_report_creation_without_strategy_identifier(self):
113120
backtest.save(path)
114121
# Check if the backtest report exists
115122
self.assertTrue(os.path.isdir(path))
116-
117-
def test_report_creation_with_multiple_strategies_with_id(self):
118-
app = create_app(
119-
config={RESOURCE_DIRECTORY: self.resource_directory}
120-
)
121-
algorithm = Algorithm()
122-
123-
@app.strategy()
124-
def run_strategy(context, data):
125-
pass
126-
127-
algorithm.add_strategy(TestStrategy)
128-
app.add_portfolio_configuration(
129-
PortfolioConfiguration(
130-
market="bitvavo",
131-
trading_symbol="EUR",
132-
initial_balance=1000
133-
)
134-
)
135-
136-
self.assertEqual(1, len(algorithm.strategies))
137-
end_date = datetime(2023, 12, 2, tzinfo=timezone.utc)
138-
start_date = end_date - timedelta(days=1)
139-
backtest_date_range = BacktestDateRange(
140-
start_date=start_date,
141-
end_date=end_date
142-
)
143-
backtest = app.run_backtest(
144-
algorithm=algorithm,
145-
backtest_date_range=backtest_date_range,
146-
risk_free_rate=0.027
147-
)
148-
path = os.path.join(
149-
self.resource_directory, "backtest_reports/test_backtest"
150-
)
151-
152-
backtest.save(path)
153-
# Check if the backtest report exists
154-
self.assertTrue(os.path.isdir(path))

tests/app/test_backtesting.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import os
22
from unittest import TestCase
3+
from typing import Dict, Any
4+
import pandas as pd
35

46
from investing_algorithm_framework import TradingStrategy, Algorithm, \
57
create_app, RESOURCE_DIRECTORY, PortfolioConfiguration, \
@@ -11,7 +13,12 @@ class SimpleTradingStrategy(TradingStrategy):
1113
interval = 2
1214
time_unit = "hour"
1315

14-
def apply_strategy(self, context: Context, data):
16+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[
17+
str, pd.Series]:
18+
pass
19+
20+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[
21+
str, pd.Series]:
1522
pass
1623

1724
class Test(TestCase):

tests/app/test_run.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import os
22
from unittest import TestCase
33

4+
from typing import Dict, Any
5+
import pandas as pd
6+
47
from investing_algorithm_framework import create_app, TradingStrategy, \
58
TimeUnit, PortfolioConfiguration, RESOURCE_DIRECTORY, \
69
Algorithm, MarketCredential
@@ -12,17 +15,25 @@ class StrategyOne(TradingStrategy):
1215
time_unit = TimeUnit.SECOND
1316
interval = 2
1417

15-
def apply_strategy(self, context, data):
18+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[
19+
str, pd.Series]:
1620
pass
1721

22+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[
23+
str, pd.Series]:
24+
pass
1825

1926
class StrategyTwo(TradingStrategy):
2027
time_unit = TimeUnit.SECOND
2128
interval = 2
2229

23-
def apply_strategy(self, context, data):
30+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[
31+
str, pd.Series]:
2432
pass
2533

34+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[
35+
str, pd.Series]:
36+
pass
2637

2738
class Test(TestCase):
2839
portfolio_configurations = [

tests/app/test_start.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import os
22
from unittest import TestCase
33

4+
from typing import Dict, Any
5+
import pandas as pd
46
from investing_algorithm_framework import create_app, TradingStrategy, \
57
TimeUnit, RESOURCE_DIRECTORY, PortfolioConfiguration, Algorithm, \
68
MarketCredential
@@ -38,6 +40,14 @@ def apply_strategy(
3840
):
3941
StrategyOne.number_of_runs += 1
4042

43+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[
44+
str, pd.Series]:
45+
pass
46+
47+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[
48+
str, pd.Series]:
49+
pass
50+
4151

4252
class StrategyTwo(TradingStrategy):
4353
time_unit = TimeUnit.SECOND
@@ -70,6 +80,13 @@ def apply_strategy(
7080
):
7181
StrategyTwo.number_of_runs += 1
7282

83+
def generate_sell_signals(self, data: Dict[str, Any]) -> Dict[
84+
str, pd.Series]:
85+
pass
86+
87+
def generate_buy_signals(self, data: Dict[str, Any]) -> Dict[
88+
str, pd.Series]:
89+
pass
7390

7491
class Test(TestCase):
7592

tests/domain/models/backtesting/test_backtest_run.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,4 @@ def test_open(self):
377377
backtest_run.save(file_path)
378378
opened_backtest_run = BacktestRun.open(file_path)
379379

380-
print(backtest_run.to_dict())
381-
print(opened_backtest_run.to_dict())
382380
self.assertEqual(backtest_run.to_dict(), opened_backtest_run.to_dict())

0 commit comments

Comments
 (0)