Skip to content

Commit 033d7d4

Browse files
committed
Add take profit tests
1 parent 5a2f7db commit 033d7d4

File tree

16 files changed

+2211
-100
lines changed

16 files changed

+2211
-100
lines changed

tests/domain/models/backtesting/test_backtest.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1580,7 +1580,6 @@ def test_add_permutation_metrics_after_backtest_has_been_save(self):
15801580

15811581
# Save the backtest
15821582
backtest.save(self.dir_path)
1583-
15841583
loaded_backtest = Backtest.open(self.dir_path)
15851584

15861585
self.assertEqual(

tests/domain/models/trades/test_trade_stop_loss.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@ class TestTradeStopLoss(TestCase):
66
def test_model_creation(self):
77
stop_loss = TradeStopLoss(
88
trade_id=1,
9-
trade_risk_type="fixed",
9+
trailing=False,
1010
percentage=10,
1111
open_price=20,
1212
sell_percentage=50,
1313
total_amount_trade=100
1414
)
1515
self.assertEqual(stop_loss.trade_id, 1)
16-
self.assertEqual(stop_loss.trade_risk_type, "FIXED")
16+
self.assertFalse(stop_loss.trailing)
1717
self.assertEqual(stop_loss.percentage, 10)
1818
self.assertEqual(stop_loss.sell_percentage, 50)
1919
self.assertEqual(stop_loss.high_water_mark, 20)
2020

2121
def test_is_triggered_default(self):
2222
stop_loss = TradeStopLoss(
2323
trade_id=1,
24-
trade_risk_type="fixed",
24+
trailing=False,
2525
percentage=10,
2626
open_price=20,
2727
sell_percentage=50,
@@ -36,7 +36,7 @@ def test_is_triggered_default(self):
3636
def test_is_triggered_trailing(self):
3737
stop_loss = TradeStopLoss(
3838
trade_id=1,
39-
trade_risk_type="trailing",
39+
trailing=True,
4040
percentage=10,
4141
open_price=20,
4242
sell_percentage=50,
@@ -49,7 +49,7 @@ def test_is_triggered_trailing(self):
4949
self.assertTrue(stop_loss.has_triggered(18))
5050
self.assertTrue(stop_loss.has_triggered(17))
5151

52-
# Increase the high water mark, setting the stop loss price to 22.5
52+
# Increase the high watermark, setting the stop loss price to 22.5
5353
self.assertFalse(stop_loss.has_triggered(25))
5454
self.assertEqual(stop_loss.stop_loss_price, 22.5)
5555
self.assertFalse(stop_loss.has_triggered(24))

tests/domain/models/trades/test_trade_take_profit.py

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,38 +6,38 @@ class TestTradeStopLoss(TestCase):
66
def test_model_creation(self):
77
stop_loss = TradeTakeProfit(
88
trade_id=1,
9-
trade_risk_type="fixed",
9+
trailing=False,
1010
percentage=10,
1111
open_price=20,
1212
sell_percentage=50,
1313
total_amount_trade=100
1414
)
1515
self.assertEqual(stop_loss.trade_id, 1)
16-
self.assertEqual(stop_loss.trade_risk_type, "FIXED")
16+
self.assertFalse(stop_loss.trailing)
1717
self.assertEqual(stop_loss.percentage, 10)
1818
self.assertEqual(stop_loss.sell_percentage, 50)
1919
self.assertEqual(stop_loss.high_water_mark, None)
2020
self.assertEqual(stop_loss.take_profit_price, 22)
2121

22-
stop_loss = TradeTakeProfit(
22+
take_profit = TradeTakeProfit(
2323
trade_id=1,
24-
trade_risk_type="trailing",
24+
trailing=True,
2525
percentage=10,
2626
open_price=20,
2727
sell_percentage=50,
2828
total_amount_trade=100
2929
)
30-
self.assertEqual(stop_loss.trade_id, 1)
31-
self.assertEqual(stop_loss.trade_risk_type, "TRAILING")
32-
self.assertEqual(stop_loss.percentage, 10)
33-
self.assertEqual(stop_loss.sell_percentage, 50)
34-
self.assertEqual(stop_loss.high_water_mark, None)
35-
self.assertEqual(stop_loss.take_profit_price, 22)
30+
self.assertEqual(take_profit.trade_id, 1)
31+
self.assertTrue(take_profit.trailing)
32+
self.assertEqual(take_profit.percentage, 10)
33+
self.assertEqual(take_profit.sell_percentage, 50)
34+
self.assertEqual(take_profit.high_water_mark, None)
35+
self.assertEqual(take_profit.take_profit_price, None)
3636

3737
def test_is_triggered_default(self):
3838
take_profit = TradeTakeProfit(
3939
trade_id=1,
40-
trade_risk_type="fixed",
40+
trailing=False,
4141
percentage=10,
4242
open_price=20,
4343
sell_percentage=50,
@@ -64,29 +64,29 @@ def test_is_triggered_trailing(self):
6464
"""
6565
take_profit = TradeTakeProfit(
6666
trade_id=1,
67-
trade_risk_type="trailing",
67+
trailing=True,
6868
percentage=10,
6969
open_price=20,
7070
sell_percentage=50,
7171
total_amount_trade=100
7272
)
7373

74-
self.assertEqual(take_profit.take_profit_price, 22)
74+
self.assertEqual(take_profit.take_profit_price, None)
7575
self.assertEqual(take_profit.high_water_mark, None)
7676
self.assertFalse(take_profit.has_triggered(20))
7777
self.assertFalse(take_profit.has_triggered(19))
7878
self.assertFalse(take_profit.has_triggered(18))
7979
self.assertFalse(take_profit.has_triggered(17))
8080

81-
# Increase the high water mark, setting the stop loss price to 22.5
81+
# Increase the high watermark, setting the stop loss price to 22.5
8282
self.assertFalse(take_profit.has_triggered(25))
8383
self.assertEqual(take_profit.high_water_mark, 25)
8484
self.assertAlmostEqual(take_profit.take_profit_price, 22.5, 2)
8585
self.assertFalse(take_profit.has_triggered(24))
8686
self.assertFalse(take_profit.has_triggered(23))
8787
self.assertTrue(take_profit.has_triggered(22))
8888

89-
# Increase the high water mark, setting the stop loss price
89+
# Increase the high watermark, setting the stop loss price
9090
# to 27.0
9191
self.assertFalse(take_profit.has_triggered(30))
9292
self.assertAlmostEqual(take_profit.take_profit_price, 27.0, 2)
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
from investing_algorithm_framework import PortfolioConfiguration, \
2+
MarketCredential, TradeStatus
3+
from tests.resources import TestBase
4+
5+
6+
class Test(TestBase):
7+
market_credentials = [
8+
MarketCredential(
9+
market="BINANCE",
10+
api_key="api_key",
11+
secret_key="secret_key"
12+
)
13+
]
14+
portfolio_configurations = [
15+
PortfolioConfiguration(
16+
market="BINANCE",
17+
trading_symbol="EUR"
18+
)
19+
]
20+
external_balances = {
21+
"EUR": 1000,
22+
}
23+
24+
def test_get_all_with_status(self):
25+
order_service = self.app.container.order_service()
26+
trade_service = self.app.container.trade_service()
27+
order = order_service.create(
28+
{
29+
"portfolio_id": 1,
30+
"target_symbol": "BTC",
31+
"amount": 1,
32+
"trading_symbol": "EUR",
33+
"price": 10,
34+
"order_side": "BUY",
35+
"order_type": "LIMIT",
36+
"status": "OPEN",
37+
}
38+
)
39+
trades = trade_service.get_all({"status": TradeStatus.CREATED.value})
40+
self.assertEqual(1, len(trades))
41+
42+
trade_service
43+
trades = trade_service.get_all({"status": TradeStatus.OPEN.value})
44+
self.assertEqual(0, len(trades))
45+
order_service.update(order.id, {"filled": 10})
46+
trades = trade_service.get_all({"status": TradeStatus.CREATED.value})
47+
self.assertEqual(0, len(trades))
48+
trades = trade_service.get_all({"status": TradeStatus.OPEN.value})
49+
self.assertEqual(1, len(trades))
50+
trades = trade_service.get_all({"status": TradeStatus.CLOSED.value})
51+
self.assertEqual(0, len(trades))
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"id": "1ac24fdd-625d-4334-8ce3-04f8464c4379"
2+
"id": "f59096a6-a1ad-4055-a8f5-b34f5471e16c"
33
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"backtest_start_date": "2023-08-07 05:00:00", "backtest_date_range_name": "Test Backtest Date Range", "backtest_end_date": "2023-12-01 23:00:00", "trading_symbol": "EUR", "initial_unallocated": 1000, "number_of_runs": 1000, "portfolio_snapshots": [{"metadata": {}, "portfolio_id": "", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 0.0, "created_at": "2023-08-07T07:00:00+00:00", "total_value": 1000}, {"metadata": {}, "portfolio_id": "", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 200, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 0.0, "created_at": "2023-12-02T00:00:00+00:00", "total_value": 1200}], "trades": [], "orders": [], "positions": [], "created_at": "2025-11-22 21:55:18", "symbols": [], "number_of_days": 0, "number_of_trades": 0, "number_of_trades_closed": 0, "number_of_trades_open": 0, "number_of_orders": 0, "number_of_positions": 0, "metadata": {}}
1+
{"backtest_start_date": "2023-08-07 05:00:00", "backtest_date_range_name": "Test Backtest Date Range", "backtest_end_date": "2023-12-01 23:00:00", "trading_symbol": "EUR", "initial_unallocated": 1000, "number_of_runs": 1000, "portfolio_snapshots": [{"metadata": {}, "portfolio_id": "", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 0.0, "created_at": "2023-08-07T07:00:00+00:00", "total_value": 1000}, {"metadata": {}, "portfolio_id": "", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 200, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 0.0, "created_at": "2023-12-02T00:00:00+00:00", "total_value": 1200}], "trades": [], "orders": [], "positions": [], "created_at": "2025-11-30 18:47:06", "symbols": [], "number_of_days": 0, "number_of_trades": 0, "number_of_trades_closed": 0, "number_of_trades_open": 0, "number_of_orders": 0, "number_of_positions": 0, "metadata": {}}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"id": "fc9d3f47-f296-478d-9d18-43f7daffabe0"
2+
"id": "f0e5c774-4652-44d1-834b-1554b84e0a76"
33
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"backtest_start_date": "2023-12-01 23:00:00", "backtest_date_range_name": null, "backtest_end_date": "2023-12-02 23:00:00", "trading_symbol": "EUR", "initial_unallocated": 1000.0, "number_of_runs": 1441, "portfolio_snapshots": [{"metadata": "MetaData()", "portfolio_id": "1", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000.0, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 1000.0, "created_at": "2023-12-01T23:00:00+00:00", "total_value": 1000.0}, {"metadata": "MetaData()", "portfolio_id": "1", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000.0, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 1000.0, "created_at": "2023-12-02T23:00:00+00:00", "total_value": 1000.0}], "trades": [], "orders": [], "positions": [{"symbol": "EUR", "amount": 1000.0, "cost": 1000.0, "portfolio_id": 1}], "created_at": "2025-11-22 21:54:56", "symbols": [], "number_of_days": 0, "number_of_trades": 0, "number_of_trades_closed": 0, "number_of_trades_open": 0, "number_of_orders": 0, "number_of_positions": 0, "metadata": {}}
1+
{"backtest_start_date": "2023-12-01 23:00:00", "backtest_date_range_name": null, "backtest_end_date": "2023-12-02 23:00:00", "trading_symbol": "EUR", "initial_unallocated": 1000.0, "number_of_runs": 1441, "portfolio_snapshots": [{"metadata": "MetaData()", "portfolio_id": "1", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000.0, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 1000.0, "created_at": "2023-12-01T23:00:00+00:00", "total_value": 1000.0}, {"metadata": "MetaData()", "portfolio_id": "1", "trading_symbol": "EUR", "pending_value": 0.0, "unallocated": 1000.0, "total_net_gain": 0.0, "total_revenue": 0.0, "total_cost": 0.0, "cash_flow": 0.0, "net_size": 1000.0, "created_at": "2023-12-02T23:00:00+00:00", "total_value": 1000.0}], "trades": [], "orders": [], "positions": [{"symbol": "EUR", "amount": 1000.0, "cost": 1000.0, "portfolio_id": 1}], "created_at": "2025-11-30 18:46:48", "symbols": [], "number_of_days": 0, "number_of_trades": 0, "number_of_trades_closed": 0, "number_of_trades_open": 0, "number_of_orders": 0, "number_of_positions": 0, "metadata": {}}

0 commit comments

Comments
 (0)