Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
MDUYN committed Feb 22, 2024
1 parent 7067f1f commit 12cd414
Show file tree
Hide file tree
Showing 22 changed files with 53 additions and 37 deletions.
5 changes: 3 additions & 2 deletions investing_algorithm_framework/domain/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
TimeUnit, TimeFrame, TradingTimeFrame, TradingDataType, \
PortfolioConfiguration, Portfolio, Position, Order, \
OrderFee, BacktestProfile, PortfolioSnapshot, StrategyProfile, \
BacktestPosition, Trade, MarketCredential
BacktestPosition, Trade, MarketCredential, PositionSnapshot
from .exceptions import OperationalException, ApiException, \
PermissionDeniedApiException, ImproperlyConfigured
from .constants import ITEMIZE, ITEMIZED, PER_PAGE, PAGE, ENVIRONMENT, \
Expand Down Expand Up @@ -94,5 +94,6 @@
"MarketService",
"PeekableQueue",
"BACKTESTING_END_DATE",
"BACKTESTING_PENDING_ORDER_CHECK_INTERVAL"
"BACKTESTING_PENDING_ORDER_CHECK_INTERVAL",
"PositionSnapshot"
]
9 changes: 5 additions & 4 deletions investing_algorithm_framework/domain/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -166,11 +166,12 @@ def set(self, key: str, value) -> None:
def from_dict(dictionary):
config = Config()

for attribute_key in dictionary:
if dictionary is not None:
for attribute_key in dictionary:

if attribute_key:
config.set(attribute_key, dictionary[attribute_key])
config[attribute_key] = dictionary[attribute_key]
if attribute_key:
config.set(attribute_key, dictionary[attribute_key])
config[attribute_key] = dictionary[attribute_key]

return config

Expand Down
6 changes: 5 additions & 1 deletion investing_algorithm_framework/domain/models/order/order.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,11 @@ def set_trade_closed_price(self, trade_closed_price):
self.trade_closed_price = trade_closed_price

def get_trade_closed_amount(self):
return self.trade_closed_amount

if self.trade_closed_amount is not None:
return self.trade_closed_amount

return 0

def set_trade_closed_amount(self, trade_closed_amount):
self.trade_closed_amount = trade_closed_amount
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -654,8 +654,13 @@ def _close_trades(self, amount_to_close, sell_order):

while amount_to_close > 0 and not order_queue.empty():
buy_order = order_queue.get()
available_to_close = buy_order.get_filled() \
- buy_order.get_trade_closed_amount()
closed_amount = buy_order.get_trade_closed_amount()

# Check if the order has been closed
if closed_amount is None:
closed_amount = 0

available_to_close = buy_order.get_filled() - closed_amount

if amount_to_close >= available_to_close:
to_be_closed = available_to_close
Expand All @@ -678,11 +683,15 @@ def _close_trades(self, amount_to_close, sell_order):
net_gain = (sell_order.get_price() - buy_order.get_price()) \
* to_be_closed
cost = buy_order.get_price() * amount_to_close
closed_amount = buy_order.get_trade_closed_amount()

if closed_amount is None:
closed_amount = 0

self.order_repository.update(
buy_order.id,
{
"trade_closed_amount":
buy_order.get_trade_closed_amount() + to_be_closed,
"trade_closed_amount": closed_amount + to_be_closed,
"trade_closed_price": sell_order.get_price(),
"net_gain": buy_order.get_net_gain() + net_gain
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,9 @@ def sync_portfolio_orders(self, portfolio):
market=portfolio.market
)

if external_orders is None:
continue

logger.info(
f"Found {len(external_orders)} external orders "
f"for position {position}"
Expand Down
2 changes: 1 addition & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion tests/app/algorithm/test_check_order_status.py
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ def setUp(self) -> None:
def test_check_order_status(self):
order_repository = self.app.container.order_repository()
position_repository = self.app.container.position_repository()
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
self.assertEqual(1, order_repository.count())
self.assertEqual(2, position_repository.count())
self.app.algorithm.order_service.check_pending_orders()
Expand Down
2 changes: 1 addition & 1 deletion tests/app/algorithm/test_close_position.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,6 @@ def test_close_position(self):
self.assertEqual(Decimal(1), btc_position.get_amount())
self.assertNotEqual(Decimal(990), trading_symbol_position.get_amount())
self.app.algorithm.close_position("BTC")
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
btc_position = self.app.algorithm.get_position("BTC")
self.assertEqual(Decimal(0), btc_position.get_amount())
2 changes: 1 addition & 1 deletion tests/app/algorithm/test_create_limit_buy_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ def setUp(self) -> None:
self.app.initialize()

def test_create_limit_buy_order(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
self.app.algorithm.create_limit_order(
target_symbol="BTC",
amount=1,
Expand Down
4 changes: 2 additions & 2 deletions tests/app/algorithm/test_create_limit_sell_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def setUp(self) -> None:
self.app.initialize()

def test_create_limit_sell_order(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
self.app.algorithm.create_limit_order(
target_symbol="BTC",
price=10,
Expand Down Expand Up @@ -65,7 +65,7 @@ def test_create_limit_sell_order(self):
self.assertEqual(20, order.get_amount())

def test_create_limit_sell_order_with_percentage_position(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
self.app.algorithm.create_limit_order(
target_symbol="BTC",
price=10,
Expand Down
2 changes: 1 addition & 1 deletion tests/app/algorithm/test_create_market_sell_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def test_create_market_sell_order(self):
order_service = self.app.container.order_service()
trading_symbol_position = position_service.find({"symbol": "EUR"})
self.assertEqual(990, trading_symbol_position.get_amount())
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
trading_symbol_position = position_service.find({"symbol": "EUR"})
self.assertEqual(990, trading_symbol_position.get_amount())
self.app.algorithm.create_market_order(
Expand Down
2 changes: 1 addition & 1 deletion tests/app/algorithm/test_has_open_buy_orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def setUp(self) -> None:
self.app.initialize()

def test_has_open_buy_orders(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
trading_symbol_position = self.app.algorithm.get_position("USDT")
self.assertEqual(Decimal(1000), trading_symbol_position.get_amount())
self.assertFalse(self.app.algorithm.position_exists(symbol="BTC"))
Expand Down
2 changes: 1 addition & 1 deletion tests/app/algorithm/test_has_open_sell_orders.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def setUp(self) -> None:
self.app.initialize()

def test_has_open_sell_orders(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
trading_symbol_position = self.app.algorithm.get_position("USDT")
self.assertEqual(1000, trading_symbol_position.get_amount())
self.assertFalse(self.app.algorithm.position_exists(symbol="BTC"))
Expand Down
10 changes: 5 additions & 5 deletions tests/app/algorithm/test_position_exists.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def setUp(self) -> None:
self.app.initialize()

def test_get_position(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
trading_symbol_position = self.app.algorithm.get_position("USDT")
self.assertEqual(1000, trading_symbol_position.get_amount())
self.assertFalse(self.app.algorithm.position_exists(symbol="BTC"))
Expand All @@ -57,7 +57,7 @@ def test_get_position(self):
self.assertTrue(self.app.algorithm.position_exists("BTC"))

def test_position_exists_with_amount_gt(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
trading_symbol_position = self.app.algorithm.get_position("USDT")
self.assertEqual(1000, int(trading_symbol_position.get_amount()))
self.assertFalse(self.app.algorithm.position_exists(symbol="BTC"))
Expand All @@ -78,7 +78,7 @@ def test_position_exists_with_amount_gt(self):
)

def test_position_exists_with_amount_gte(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
trading_symbol_position = self.app.algorithm.get_position("USDT")
self.assertEqual(1000, int(trading_symbol_position.get_amount()))
self.assertFalse(self.app.algorithm.position_exists(symbol="BTC"))
Expand All @@ -99,7 +99,7 @@ def test_position_exists_with_amount_gte(self):
)

def test_position_exists_with_amount_lt(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
trading_symbol_position = self.app.algorithm.get_position("USDT")
self.assertEqual(1000, int(trading_symbol_position.get_amount()))
self.assertFalse(self.app.algorithm.position_exists(symbol="BTC"))
Expand All @@ -120,7 +120,7 @@ def test_position_exists_with_amount_lt(self):
)

def test_position_exists_with_amount_lte(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
trading_symbol_position = self.app.algorithm.get_position("USDT")
self.assertEqual(1000, int(trading_symbol_position.get_amount()))
self.assertFalse(self.app.algorithm.position_exists(symbol="BTC"))
Expand Down
5 changes: 2 additions & 3 deletions tests/app/algorithm/test_run_strategy.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def test_with_strategy_object(self):
)
app.add_strategy(StrategyOne)
app.add_strategy(StrategyTwo)
app.run(number_of_iterations=2, sync=False)
app.run(number_of_iterations=2)
self.assertFalse(app.running)
strategy_orchestration_service = app.algorithm\
.strategy_orchestrator_service
Expand All @@ -75,7 +75,7 @@ def test_with_decorator(self):
def run_strategy(algorithm, market_data):
pass

app.run(number_of_iterations=1, sync=False)
app.run(number_of_iterations=1)
strategy_orchestration_service = app.algorithm\
.strategy_orchestrator_service
self.assertTrue(strategy_orchestration_service.has_run("run_strategy"))
Expand All @@ -95,7 +95,6 @@ def test_stateless(self):
app.run(
number_of_iterations=2,
payload={"ACTION": "RUN_STRATEGY"},
sync=False
)
strategy_orchestration_service = app.algorithm\
.strategy_orchestrator_service
Expand Down
2 changes: 1 addition & 1 deletion tests/app/test_add_portfolio_configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,6 @@ def test_add(self):
portfolio_configuration_service = app.container\
.portfolio_configuration_service()
self.assertIsNotNone(portfolio_configuration_service.get("BITVAVO"))
app.run(number_of_iterations=1, sync=False)
app.run(number_of_iterations=1)
self.assertEqual(app.algorithm.portfolio_service.count(), 1)
self.assertEqual(app.algorithm.get_unallocated(), 1000)
5 changes: 2 additions & 3 deletions tests/app/test_start.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,15 @@ def setUp(self) -> None:
self.app.add_strategy(StrategyTwo)

def test_default(self):
self.app.run(number_of_iterations=2, sync=False)
self.app.run(number_of_iterations=2)
self.assertFalse(self.app.running)
strategy_orchestrator_service = self.app \
.algorithm.strategy_orchestrator_service
self.assertTrue(strategy_orchestrator_service.has_run("StrategyOne"))
self.assertTrue(strategy_orchestrator_service.has_run("StrategyTwo"))

def test_web(self):
self.app.run(number_of_iterations=2, sync=False)
self.app.run(number_of_iterations=2)
self.assertFalse(self.app.running)
strategy_orchestrator_service = self.app \
.algorithm.strategy_orchestrator_service
Expand All @@ -77,7 +77,6 @@ def test_stateless(self):
self.app.run(
number_of_iterations=2,
payload={"ACTION": "RUN_STRATEGY"},
sync=False
)
strategy_orchestrator_service = self.app\
.algorithm.strategy_orchestrator_service
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def setUp(self) -> None:

def test_list_portfolios(self):
order_repository = self.iaf_app.container.order_repository()
self.iaf_app.run(number_of_iterations=1, sync=False)
self.iaf_app.run(number_of_iterations=1)
self.assertEqual(1, order_repository.count())
response = self.client.get("/api/orders")
data = json.loads(response.data.decode())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def setUp(self) -> None:

def test_list_portfolios(self):
order_repository = self.iaf_app.container.order_repository()
self.iaf_app.run(number_of_iterations=1, sync=False)
self.iaf_app.run(number_of_iterations=1)
self.assertEqual(1, order_repository.count())
response = self.client.get("api/portfolios")
data = json.loads(response.data.decode())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def setUp(self) -> None:

def test_list_portfolios(self):
order_repository = self.iaf_app.container.order_repository()
self.iaf_app.run(number_of_iterations=1, sync=False)
self.iaf_app.run(number_of_iterations=1)
self.assertEqual(1, order_repository.count())
response = self.client.get("/api/positions")
data = json.loads(response.data.decode())
Expand Down
2 changes: 1 addition & 1 deletion tests/infrastructure/repositories/test_order_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def setUp(self) -> None:
)

def test_get_all(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
order_service = self.app.container.order_service()
portfolio_service = self.app.container.portfolio_service()
portfolio = portfolio_service.get_all()[0]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def setUp(self) -> None:
)

def test_get_all(self):
self.app.run(number_of_iterations=1, sync=False)
self.app.run(number_of_iterations=1)
order_service = self.app.container.order_service()
portfolio_service = self.app.container.portfolio_service()
position_service = self.app.container.position_service()
Expand Down

0 comments on commit 12cd414

Please sign in to comment.