Skip to content
Merged

MM flex #1657

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 17 additions & 9 deletions Trading/Mode/market_making_trading_mode/market_making_trading.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,16 @@ async def get_forced_updater_channels(
@classmethod
def get_is_trading_on_exchange(cls, exchange_name, tentacles_setup_config) -> bool:
"""
returns True if exchange_name is not in price sources
returns True if exchange_name is trading exchange or the hedging exchange
"""
return cls.has_trading_exchange_configuration(
exchange_name, octobot_tentacles_manager.api.get_tentacle_config(tentacles_setup_config, cls)
)

@classmethod
def get_is_using_trading_mode_on_exchange(cls, exchange_name, tentacles_setup_config) -> bool:
"""
returns True if exchange_name is a trading exchange that is not the hedging exchange
"""
return cls.has_trading_exchange_configuration(
exchange_name, octobot_tentacles_manager.api.get_tentacle_config(tentacles_setup_config, cls)
Expand Down Expand Up @@ -762,8 +771,8 @@ async def _handle_market_making_orders(
outdated_orders = self._get_orders_to_cancel(sorted_orders, reference_price)
if outdated_orders:
self.logger.info(
f"{len(outdated_orders)} outdated orders for {self.symbol} {self.exchange_manager.exchange_name}: "
f"{[str(o) for o in outdated_orders]} [trigger source: {trigger_source}]"
f"{len(outdated_orders)} outdated orders for {self.symbol} on {self.exchange_manager.exchange_name} (trigger_source: {trigger_source}): "
f"{[str(o) for o in outdated_orders]}"
)

# get ideal distribution
Expand Down Expand Up @@ -1071,12 +1080,11 @@ def _get_orders_to_cancel(
]

def _is_outdated(
self, price: decimal.Decimal, side: trading_enums.TradeOrderSide, reference_price: decimal.Decimal
self, order_price: decimal.Decimal, side: trading_enums.TradeOrderSide, reference_price: decimal.Decimal
) -> bool:
return (
(side == trading_enums.TradeOrderSide.BUY and price > reference_price)
or (side == trading_enums.TradeOrderSide.SELL and price < reference_price)
)
if side == trading_enums.TradeOrderSide.BUY:
return order_price > reference_price
return order_price < reference_price

def _sort_orders(self, open_orders: list) -> list:
"""
Expand Down Expand Up @@ -1292,7 +1300,7 @@ async def _get_reference_price(self) -> decimal.Decimal:
local_exchange_name, self.exchange_manager.id
):
exchange_manager = trading_api.get_exchange_manager_from_exchange_id(exchange_id)
if exchange_manager.is_trading and exchange_manager is not self.exchange_manager:
if exchange_manager.trading_modes and exchange_manager is not self.exchange_manager:
await self.sent_once_critical_notification(
"Configuration issue",
f"Multiple simultaneous trading exchanges is not supported on {self.trading_mode.get_name()}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,8 @@ def is_compatible_trading_type(cls, parsed_signal: dict, trading_type: trading_e

def _log_error_message_if_relevant(self, parsed_data: dict, signal_data: str):
# only log error messages on one TradingViewSignalsTradingMode instance to avoid logging errors multiple times
all_trading_modes = trading_modes.get_trading_modes_of_this_type_on_this_matrix(self)
if all_trading_modes and all_trading_modes[0] is self:
if self.is_first_trading_mode_on_this_matrix():
all_trading_modes = trading_modes.get_trading_modes_of_this_type_on_this_matrix(self)
# Can log error message: this is the first trading mode on this matrix.
# Each is notified by signals and only this one will log errors to avoid duplicating logs
if not any(
Expand Down