Write tests for open trade checks

This commit is contained in:
Mark Veidemanis 2023-01-11 19:55:09 +00:00
parent e55f903f42
commit 23faeb6f71
Signed by: m
GPG Key ID: 5ACFCEED46C0904F
2 changed files with 17 additions and 8 deletions

View File

@ -64,8 +64,6 @@ class LiveTradingTestCase(ElasticMock, LiveBase, TestCase):
closed = self.account.client.close_trade(self.trade.order_id) closed = self.account.client.close_trade(self.trade.order_id)
# Check the feedback from closing the trade # Check the feedback from closing the trade
print("CLOSED", closed)
print("TRADE AMOUNT", trade.amount)
self.assertEqual(closed["type"], "MARKET_ORDER") self.assertEqual(closed["type"], "MARKET_ORDER")
self.assertEqual(closed["symbol"], trade.symbol) self.assertEqual(closed["symbol"], trade.symbol)
self.assertEqual(closed["units"], str(0 - int(trade.amount))) self.assertEqual(closed["units"], str(0 - int(trade.amount)))
@ -151,7 +149,6 @@ class LiveTradingTestCase(ElasticMock, LiveBase, TestCase):
# Should be over 2% risk # Should be over 2% risk
trade = self.create_complex_trade("buy", 10, "EUR_USD", 1, 22) trade = self.create_complex_trade("buy", 10, "EUR_USD", 1, 22)
allowed = risk.check_risk(self.risk_model, self.account, trade) allowed = risk.check_risk(self.risk_model, self.account, trade)
print("ALLOWED", allowed)
self.assertFalse(allowed["allowed"]) self.assertFalse(allowed["allowed"])
self.assertEqual(allowed["reason"], "Maximum risk exceeded.") self.assertEqual(allowed["reason"], "Maximum risk exceeded.")
@ -167,6 +164,11 @@ class LiveTradingTestCase(ElasticMock, LiveBase, TestCase):
@patch("core.exchanges.oanda.OANDAExchange.get_balance", return_value=100) @patch("core.exchanges.oanda.OANDAExchange.get_balance", return_value=100)
def test_check_risk_max_open_trades_fail(self, mock_balance): def test_check_risk_max_open_trades_fail(self, mock_balance):
# The maximum open trades is 3. Let's open 2 trades # The maximum open trades is 3. Let's open 2 trades
# This would not be allowed by the risk model but we're doing it
# manually
# Don't be confused by the next test. The max open trades check
# fails before the symbol one is run, but yes, they would both
# fail.
trade1 = self.create_complex_trade("buy", 1, "EUR_USD", 1, 1) trade1 = self.create_complex_trade("buy", 1, "EUR_USD", 1, 1)
self.open_trade(trade1) self.open_trade(trade1)
@ -184,7 +186,16 @@ class LiveTradingTestCase(ElasticMock, LiveBase, TestCase):
@patch("core.exchanges.oanda.OANDAExchange.get_balance", return_value=100) @patch("core.exchanges.oanda.OANDAExchange.get_balance", return_value=100)
def test_check_risk_max_open_trades_per_symbol_fail(self, mock_balance): def test_check_risk_max_open_trades_per_symbol_fail(self, mock_balance):
pass trade1 = self.create_complex_trade("buy", 1, "EUR_USD", 1, 1)
self.open_trade(trade1)
trade2 = self.create_complex_trade("buy", 1, "EUR_USD", 1, 1)
allowed = risk.check_risk(self.risk_model, self.account, trade2)
self.assertFalse(allowed["allowed"])
self.assertEqual(allowed["reason"], "Maximum open trades per symbol exceeded.")
self.close_trade(trade1)
def test_convert_trades(self): def test_convert_trades(self):
""" """

View File

@ -74,6 +74,8 @@ def check_max_open_trades_per_symbol(risk_model, account_trades):
if symbol not in symbol_map: if symbol not in symbol_map:
symbol_map[symbol] = 0 symbol_map[symbol] = 0
symbol_map[symbol] += 1 symbol_map[symbol] += 1
print("SUMBOL MAP", symbol_map)
for symbol, count in symbol_map.items(): for symbol, count in symbol_map.items():
if count >= risk_model.max_open_trades_per_symbol: if count >= risk_model.max_open_trades_per_symbol:
return False return False
@ -94,16 +96,12 @@ def check_risk(risk_model, account, proposed_trade):
# Check that the account max trades is not exceeded # Check that the account max trades is not exceeded
account_trades = account.client.get_all_open_trades() account_trades = account.client.get_all_open_trades()
print("Account trades: ", account_trades)
if isinstance(proposed_trade, Trade): if isinstance(proposed_trade, Trade):
proposed_trade = proposed_trade.__dict__ proposed_trade = proposed_trade.__dict__
account_trades.append(proposed_trade) account_trades.append(proposed_trade)
print("After append", account_trades)
account_trades = convert.convert_trades(account_trades) account_trades = convert.convert_trades(account_trades)
print("After convert", account_trades)
account_trades = market.convert_trades_to_usd(account, account_trades) account_trades = market.convert_trades_to_usd(account, account_trades)
print("After convert to USD", account_trades)
max_open_trades_check = check_max_open_trades(risk_model, account_trades) max_open_trades_check = check_max_open_trades(risk_model, account_trades)
print("Max open trades check: ", max_open_trades_check) print("Max open trades check: ", max_open_trades_check)