Skip to content

Commit

Permalink
[TradingViiew] add trading_type
Browse files Browse the repository at this point in the history
  • Loading branch information
GuillaumeDSM committed Jan 9, 2025
1 parent bba5b6b commit 2ff5aa4
Showing 1 changed file with 17 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import tentacles.Trading.Mode.daily_trading_mode.daily_trading as daily_trading_mode
import octobot_trading.constants as trading_constants
import octobot_trading.enums as trading_enums
import octobot_trading.exchanges as trading_exchanges
import octobot_trading.modes as trading_modes
import octobot_trading.errors as trading_errors
import octobot_trading.modes.script_keywords as script_keywords
Expand All @@ -35,6 +36,7 @@ class TradingViewSignalsTradingMode(trading_modes.AbstractTradingMode):
PARAM_SEPARATORS = [";", "\\n", "\n"]

EXCHANGE_KEY = "EXCHANGE"
TRADING_TYPE_KEY = "TRADING_TYPE" # expect a trading_enums.ExchangeTypes value
SYMBOL_KEY = "SYMBOL"
SIGNAL_KEY = "SIGNAL"
PRICE_KEY = "PRICE"
Expand Down Expand Up @@ -166,16 +168,28 @@ def parse_signal_data(cls, signal_data: str, errors: list) -> dict:
return parsed_data


@classmethod
def is_compatible_trading_type(cls, parsed_signal: dict, trading_type: trading_enums.ExchangeTypes) -> bool:
if parsed_trading_type := parsed_signal.get(cls.TRADING_TYPE_KEY):
return parsed_trading_type == trading_type.value
return True


async def _trading_view_signal_callback(self, data):
signal_data = data.get("metadata", "")
errors = []
parsed_data = self.parse_signal_data(signal_data, errors)
for error in errors:
self.logger.error(error)
try:
if parsed_data[self.EXCHANGE_KEY].lower() in self.exchange_manager.exchange_name and \
(parsed_data[self.SYMBOL_KEY] == self.merged_simple_symbol or
parsed_data[self.SYMBOL_KEY] == self.str_symbol):
if (
self.is_compatible_trading_type(parsed_data, trading_exchanges.get_exchange_type(self.exchange_manager))
and parsed_data[self.EXCHANGE_KEY].lower() in self.exchange_manager.exchange_name and
(
parsed_data[self.SYMBOL_KEY] == self.merged_simple_symbol or
parsed_data[self.SYMBOL_KEY] == self.str_symbol
)
):
await self.producers[0].signal_callback(parsed_data, script_keywords.get_base_context(self))
except trading_errors.InvalidArgumentError as e:
self.logger.error(f"Error when handling trading view signal: {e}")
Expand Down

0 comments on commit 2ff5aa4

Please sign in to comment.