Skip to content

Commit 9b1864e

Browse files
Guillaume De Saint MartinGuillaumeDSM
authored andcommitted
[Portfolio] enable custom simulated portfolio
1 parent 7cb1478 commit 9b1864e

File tree

4 files changed

+23
-6
lines changed

4 files changed

+23
-6
lines changed

octobot_trading/api/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@
145145
get_portfolio_historical_values,
146146
get_portfolio_currency,
147147
get_origin_portfolio,
148+
set_simulated_portfolio_initial_config,
148149
refresh_real_trader_portfolio,
149150
format_portfolio,
150151
get_draw_down,
@@ -301,6 +302,7 @@
301302
"get_portfolio_historical_values",
302303
"get_portfolio_currency",
303304
"get_origin_portfolio",
305+
"set_simulated_portfolio_initial_config",
304306
"refresh_real_trader_portfolio",
305307
"get_draw_down",
306308
"get_coefficient_of_determination",

octobot_trading/api/portfolio.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,13 @@ def get_origin_portfolio(exchange_manager, as_decimal=True) -> dict:
6262
)
6363

6464

65+
def set_simulated_portfolio_initial_config(exchange_manager, portfolio_content):
66+
if exchange_manager.exchange_personal_data.portfolio_manager:
67+
exchange_manager.exchange_personal_data.portfolio_manager.set_simulated_portfolio_initial_config(
68+
portfolio_content
69+
)
70+
71+
6572
def format_portfolio(portfolio, as_decimal) -> dict:
6673
if as_decimal:
6774
return portfolio

octobot_trading/personal_data/portfolios/portfolio_manager.pxd

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ cdef class PortfolioManager(util.Initializable):
3838
cdef public portfolio_history.HistoricalPortfolioValueManager historical_portfolio_value_manager
3939

4040
cdef bint _is_initialized_event_set
41+
cdef dict _simulated_portfolio_initial_config
4142

4243
cpdef object handle_balance_updated(self)
4344
cpdef bint handle_balance_update(self, dict balance, bint is_diff_update=*)
@@ -48,6 +49,7 @@ cdef class PortfolioManager(util.Initializable):
4849
cdef object _apply_locked_assets(self, dict previous_assets)
4950
cdef void _load_portfolio(self, bint reset_from_config)
5051
cdef object _load_simulated_portfolio_from_history(self)
52+
cdef void set_simulated_portfolio_initial_config(self, dict portfolio_config)
5153
cdef object _reset_portfolio(self)
52-
cdef void _set_starting_simulated_portfolio(self)
54+
cdef void _apply_starting_simulated_portfolio(self)
5355
cdef bint _refresh_simulated_trader_portfolio_from_order(self, object order)

octobot_trading/personal_data/portfolios/portfolio_manager.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
# You should have received a copy of the GNU Lesser General Public
1515
# License along with this library.
1616
import contextlib
17+
import copy
1718

1819
import octobot_commons.logging as logging
1920
import octobot_commons.constants as commons_constants
@@ -44,6 +45,7 @@ def __init__(self, config, trader, exchange_manager):
4445
self.historical_portfolio_value_manager = None
4546
self.reference_market = None
4647
self._is_initialized_event_set = False
48+
self._simulated_portfolio_initial_config = None
4749

4850
async def initialize_impl(self):
4951
"""
@@ -53,6 +55,9 @@ async def initialize_impl(self):
5355
if self.exchange_manager.is_storage_enabled() and self.historical_portfolio_value_manager is None:
5456
self.historical_portfolio_value_manager = personal_data.HistoricalPortfolioValueManager(self)
5557
await self.historical_portfolio_value_manager.initialize()
58+
self.set_simulated_portfolio_initial_config(
59+
self.config[commons_constants.CONFIG_SIMULATOR][commons_constants.CONFIG_STARTING_PORTFOLIO]
60+
)
5661
self._reset_portfolio()
5762

5863
def handle_balance_update(self, balance, is_diff_update=False):
@@ -263,7 +268,7 @@ def _load_portfolio(self, reset_from_config):
263268
if reset_from_config \
264269
or self.historical_portfolio_value_manager is None \
265270
or not self.historical_portfolio_value_manager.has_previous_session_portfolio():
266-
self._set_starting_simulated_portfolio()
271+
self._apply_starting_simulated_portfolio()
267272
else:
268273
self._load_simulated_portfolio_from_history()
269274
self.logger.info(f"{constants.CURRENT_PORTFOLIO_STRING} {self.portfolio.portfolio}")
@@ -278,13 +283,14 @@ def _load_simulated_portfolio_from_history(self):
278283
)
279284
self.handle_balance_update(self.portfolio.get_portfolio_from_amount_dict(portfolio_amount_dict))
280285

281-
def _set_starting_simulated_portfolio(self):
286+
def set_simulated_portfolio_initial_config(self, portfolio_config):
287+
self._simulated_portfolio_initial_config = copy.deepcopy(portfolio_config)
288+
289+
def _apply_starting_simulated_portfolio(self):
282290
"""
283291
Load new portfolio from config settings
284292
"""
285-
portfolio_amount_dict = personal_data.parse_decimal_config_portfolio(
286-
self.config[commons_constants.CONFIG_SIMULATOR][commons_constants.CONFIG_STARTING_PORTFOLIO]
287-
)
293+
portfolio_amount_dict = personal_data.parse_decimal_config_portfolio(self._simulated_portfolio_initial_config)
288294
self.handle_balance_update(self.portfolio.get_portfolio_from_amount_dict(portfolio_amount_dict))
289295

290296
def _set_initialized_event(self):

0 commit comments

Comments
 (0)