|
1 | | -import decimal |
| 1 | +import inspect |
2 | 2 | import logging |
3 | 3 | from typing import List |
4 | | -import inspect |
5 | 4 |
|
6 | 5 | from investing_algorithm_framework.domain import OrderStatus, OrderFee, \ |
7 | 6 | Position, Order, Portfolio, OrderType, OrderSide, \ |
8 | 7 | BACKTESTING_FLAG, BACKTESTING_INDEX_DATETIME, MarketService, TimeUnit, \ |
9 | | - OperationalException, random_string |
| 8 | + OperationalException, random_string, RoundingService |
10 | 9 | from investing_algorithm_framework.services import MarketCredentialService, \ |
11 | 10 | MarketDataSourceService, PortfolioService, PositionService, TradeService, \ |
12 | 11 | OrderService, ConfigurationService, StrategyOrchestratorService, \ |
@@ -218,7 +217,7 @@ def create_limit_order( |
218 | 217 | amount = position.get_amount() * (percentage_of_position / 100) |
219 | 218 |
|
220 | 219 | if precision is not None: |
221 | | - amount = self.round_down(amount, precision) |
| 220 | + amount = RoundingService.round_down(amount, precision) |
222 | 221 |
|
223 | 222 | order_data = { |
224 | 223 | "target_symbol": target_symbol, |
@@ -594,7 +593,9 @@ def get_position_percentage_of_portfolio_by_net_size( |
594 | 593 | net_size = portfolio.get_net_size() |
595 | 594 | return (position.cost / net_size) * 100 |
596 | 595 |
|
597 | | - def close_position(self, symbol, market=None, identifier=None): |
| 596 | + def close_position( |
| 597 | + self, symbol, market=None, identifier=None, precision=None |
| 598 | + ): |
598 | 599 | portfolio = self.portfolio_service.find( |
599 | 600 | {"market": market, "identifier": identifier} |
600 | 601 | ) |
@@ -623,6 +624,7 @@ def close_position(self, symbol, market=None, identifier=None): |
623 | 624 | amount=position.get_amount(), |
624 | 625 | order_side=OrderSide.SELL.value, |
625 | 626 | price=ticker["bid"], |
| 627 | + precision=precision, |
626 | 628 | ) |
627 | 629 |
|
628 | 630 | def add_strategies(self, strategies): |
@@ -886,28 +888,13 @@ def get_trades(self, market=None): |
886 | 888 | def get_closed_trades(self): |
887 | 889 | return self.trade_service.get_closed_trades() |
888 | 890 |
|
889 | | - def round_down(self, value, amount_of_decimals): |
890 | | - |
891 | | - if self.count_decimals(value) <= amount_of_decimals: |
892 | | - return value |
893 | | - |
894 | | - with decimal.localcontext() as ctx: |
895 | | - d = decimal.Decimal(value) |
896 | | - ctx.rounding = decimal.ROUND_DOWN |
897 | | - return float(round(d, amount_of_decimals)) |
898 | | - |
899 | | - def count_decimals(self, number): |
900 | | - decimal_str = str(number) |
901 | | - if '.' in decimal_str: |
902 | | - return len(decimal_str.split('.')[1]) |
903 | | - else: |
904 | | - return 0 |
905 | | - |
906 | 891 | def get_open_trades(self, target_symbol=None, market=None): |
907 | 892 | return self.trade_service.get_open_trades(target_symbol, market) |
908 | 893 |
|
909 | | - def close_trade(self, trade, market=None): |
910 | | - self.trade_service.close_trade(trade, market) |
| 894 | + def close_trade(self, trade, market=None, precision=None) -> None: |
| 895 | + self.trade_service.close_trade( |
| 896 | + trade=trade, market=market, precision=precision |
| 897 | + ) |
911 | 898 |
|
912 | 899 | def get_number_of_positions(self): |
913 | 900 | """ |
|
0 commit comments