Skip to content

Commit 45ecd21

Browse files
authored
Merge pull request #1632 from Drakkar-Software/dev
Master update
2 parents f061d3d + 33ad978 commit 45ecd21

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

Services/Interfaces/web_interface/static/js/components/configuration.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -720,6 +720,7 @@ function updated_validated_updated_global_config(updated_data){
720720
}
721721

722722
function fetch_currencies(){
723+
const maxDisplayedOptions = 2000; // display only the first 2000 options to avoid select performance issues
723724
const getCurrencyOption = (addCurrencySelect, details) => {
724725
return new Option(`${details.n} - ${details.s}`, details.i, false, false);
725726
}
@@ -732,7 +733,7 @@ function fetch_currencies(){
732733
success: function (data) {
733734
const addCurrencySelect = $("#AddCurrencySelect");
734735
const options = [];
735-
data.forEach((element) => {
736+
data.slice(0, maxDisplayedOptions).forEach((element) => {
736737
if(!currencyDetailsById.hasOwnProperty(element.i)){
737738
currencyDetailsById[element.i] = element
738739
}

Trading/Mode/index_trading_mode/index_trading.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,11 @@ async def create_new_orders(self, symbol, _, state, **kwargs):
7878
details = kwargs[self.CREATE_ORDER_DATA_PARAM]
7979
dependencies = kwargs.get(self.CREATE_ORDER_DEPENDENCIES_PARAM, None)
8080
if state == trading_enums.EvaluatorStates.NEUTRAL.value:
81-
return await self._rebalance_portfolio(details, dependencies)
81+
try:
82+
self.trading_mode.is_processing_rebalance = True
83+
return await self._rebalance_portfolio(details, dependencies)
84+
finally:
85+
self.trading_mode.is_processing_rebalance = False
8286
self.logger.error(f"Unknown index state: {state}")
8387
return []
8488

@@ -409,6 +413,11 @@ async def _check_index_if_necessary(self):
409413
) >= self.trading_mode.refresh_interval_days * commons_constants.DAYS_TO_SECONDS:
410414
if self.trading_mode.automatically_update_historical_config_on_set_intervals():
411415
self.trading_mode.update_config_and_user_inputs_if_necessary()
416+
if self.trading_mode.is_processing_rebalance:
417+
self.logger.info(
418+
f"[{self.exchange_manager.exchange_name}] Index is already being rebalanced, skipping index check"
419+
)
420+
return
412421
if len(self.trading_mode.indexed_coins) < self.MIN_INDEXED_COINS:
413422
self.logger.error(
414423
f"At least {self.MIN_INDEXED_COINS} coin is required to maintain an index. Please "
@@ -717,6 +726,7 @@ async def cancel_traded_pairs_open_orders_if_any(self) -> typing.Optional[common
717726
order
718727
for order in self.exchange_manager.exchange_personal_data.orders_manager.get_open_orders()
719728
if order.symbol in self.exchange_manager.exchange_config.traded_symbol_pairs
729+
and not isinstance(order, trading_personal_data.MarketOrder) # market orders can't be cancelled
720730
]:
721731
self.logger.info(
722732
f"Cancelling {len(symbol_open_orders)} open orders"
@@ -751,7 +761,8 @@ def __init__(self, config, exchange_manager):
751761
self.synchronization_policy: SynchronizationPolicy = SynchronizationPolicy.SELL_REMOVED_INDEX_COINS_AS_SOON_AS_POSSIBLE
752762
self.requires_initializing_appropriate_coins_distribution = False
753763
self.indexed_coins = []
754-
764+
self.is_processing_rebalance = False
765+
755766
def init_user_inputs(self, inputs: dict) -> None:
756767
"""
757768
Called right before starting the tentacle, should define all the tentacle's user inputs unless

Trading/Mode/index_trading_mode/tests/test_index_trading_mode.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1156,15 +1156,18 @@ async def test_create_new_orders(tools):
11561156
with mock.patch.object(
11571157
consumer, "_rebalance_portfolio", mock.AsyncMock(return_value="plop")
11581158
) as _rebalance_portfolio_mock:
1159+
assert mode.is_processing_rebalance is False
11591160
with pytest.raises(KeyError):
11601161
# missing "data"
11611162
await consumer.create_new_orders(None, None, None)
11621163
assert await consumer.create_new_orders(None, None, None, data="hello", dependencies=trading_signals.get_orders_dependencies([mock.Mock(order_id="123")])) == []
1164+
assert mode.is_processing_rebalance is False
11631165
_rebalance_portfolio_mock.assert_not_called()
11641166
assert await consumer.create_new_orders(
11651167
None, None, trading_enums.EvaluatorStates.NEUTRAL.value, data="hello", dependencies=trading_signals.get_orders_dependencies([mock.Mock(order_id="123")])
11661168
) == "plop"
11671169
_rebalance_portfolio_mock.assert_called_once_with("hello", trading_signals.get_orders_dependencies([mock.Mock(order_id="123")]))
1170+
assert mode.is_processing_rebalance is False
11681171

11691172

11701173
async def test_rebalance_portfolio(tools):

0 commit comments

Comments
 (0)