Skip to content

Commit d9e9ce8

Browse files
authored
Merge pull request #1368 from Drakkar-Software/dev
[TradingView] add ";" separator
2 parents e82ec48 + e11e395 commit d9e9ce8

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

Trading/Mode/trading_view_signals_trading_mode/tests/test_trading_view_signals_trading.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,33 @@ async def test_parse_signal_data():
160160
assert "nPLOp" not in str(errors[0])
161161
assert "KEY" not in str(errors[0])
162162

163+
errors = []
164+
assert Mode.TradingViewSignalsTradingMode.parse_signal_data(
165+
"KEY=value;EXCHANGE;PLOp=ABC",
166+
errors
167+
) == {
168+
"KEY": "value",
169+
"PLOp": "ABC",
170+
}
171+
assert len(errors) == 1
172+
assert "EXCHANGE" in str(errors[0])
173+
assert "nPLOp" not in str(errors[0])
174+
assert "KEY" not in str(errors[0])
175+
176+
errors = []
177+
assert Mode.TradingViewSignalsTradingMode.parse_signal_data(
178+
"KEY=value;EXCHANGE\nPLOp=ABC\\nGG=HIHI",
179+
errors
180+
) == {
181+
"KEY": "value",
182+
"PLOp": "ABC",
183+
"GG": "HIHI",
184+
}
185+
assert len(errors) == 1
186+
assert "EXCHANGE" in str(errors[0])
187+
assert "nPLOp" not in str(errors[0])
188+
assert "KEY" not in str(errors[0])
189+
163190

164191
async def test_trading_view_signal_callback(tools):
165192
exchange_manager, symbol, mode, producer, consumer = tools

Trading/Mode/trading_view_signals_trading_mode/trading_view_signals_trading.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
class TradingViewSignalsTradingMode(trading_modes.AbstractTradingMode):
3333
SERVICE_FEED_CLASS = trading_view_service_feed.TradingViewServiceFeed
3434
TRADINGVIEW_FUTURES_SUFFIXES = [".P"]
35+
PARAM_SEPARATORS = [";", "\\n", "\n"]
3536

3637
EXCHANGE_KEY = "EXCHANGE"
3738
SYMBOL_KEY = "SYMBOL"
@@ -140,7 +141,12 @@ def _adapt_symbol(cls, parsed_data):
140141
@classmethod
141142
def parse_signal_data(cls, signal_data: str, errors: list) -> dict:
142143
parsed_data = {}
143-
for line in signal_data.replace("\\n", "\n").split("\n"):
144+
# replace all split char by a single one
145+
splittable_data = signal_data
146+
final_split_char = cls.PARAM_SEPARATORS[0]
147+
for split_char in cls.PARAM_SEPARATORS[1:]:
148+
splittable_data = splittable_data.replace(split_char, final_split_char)
149+
for line in splittable_data.split(final_split_char):
144150
if not line.strip():
145151
# ignore empty lines
146152
continue

0 commit comments

Comments
 (0)