ETH-BTC long swing beta
ETH and BTC slow moving momentum strategy on Arbitrum
Strategy Logs
Rebalance: #222 (2025-07-02 00:00:00), No action taken: strategy decided not to open or close any positions
Discord image posting skipped. Expected bytes, got <class 'NoneType'>
Strategy thinking
Strategy cycle #222: 2025-07-02 00:00:00 UTC, now is 2025-07-02 00:09:39.496287
WETH / USDT
Last candle at: 2025-07-02 00:00:00 UTC, market data and action lag: 0 days 00:09:39.497132
Price open:2404.7792485436476
Close:2405.741304539439
WBTC / USDT
Last candle at: 2025-07-02 00:00:00 UTC, market data and action lag: 0 days 00:09:39.497489
Price open:105653.70110600526
Close:105674.83290276348
RSI BTC: 47.43500886972622
RSI exit trigger: 65.0
RSI entry trigger: 80.0
RSI ETH: 43.16056604580901
'Visualisation exception %s'
Traceback (most recent call last): (34 lines)
File "/usr/src/trade-executor/tradeexecutor/strategy/pandas_trader/runner.py", line 229, in refresh_visualisations self.update_strategy_thinking_image_data(small_figure_combined, large_figure_combined) File "/usr/src/trade-executor/tradeexecutor/strategy/pandas_trader/runner.py", line 253, in update_strategy_thinking_image_data refresh_live_strategy_images(self.run_state, execution_context, small_figure, large_figure) File "/usr/src/trade-executor/tradeexecutor/statistics/in_memory_statistics.py", line 168, in refresh_live_strategy_images small_image, small_image_dark = get_small_images(small_figure) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/trade-executor/tradeexecutor/statistics/in_memory_statistics.py", line 197, in get_small_images return get_image_and_dark_image(small_figure, width=512, height=512) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/trade-executor/tradeexecutor/statistics/in_memory_statistics.py", line 206, in get_image_and_dark_image image = render_plotly_figure_as_image_file(figure, width=width, height=height, format=format) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/trade-executor/tradeexecutor/visual/image_output.py", line 44, in render_plotly_figure_as_image_file figure.write_image( File "/usr/local/lib/python3.11/site-packages/plotly/basedatatypes.py", line 3889, in write_image from plotly.io.kaleido import ( File "/usr/local/lib/python3.11/site-packages/plotly/io/kaleido.py", line 1, in <module> from ._kaleido import ( File "/usr/local/lib/python3.11/site-packages/plotly/io/_kaleido.py", line 91, in <module> if kaleido_available() and kaleido_major() < 1: ^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/plotly/io/_kaleido.py", line 67, in kaleido_available import kaleido File "/usr/local/lib/python3.11/site-packages/kaleido/__init__.py", line 11, in <module> from choreographer.cli import get_chrome, get_chrome_sync File "/usr/local/lib/python3.11/site-packages/choreographer/__init__.py", line 11, in <module> from .browser_async import ( File "/usr/local/lib/python3.11/site-packages/choreographer/browser_async.py", line 17, in <module> from .browsers import BrowserClosedError, BrowserDepsError, BrowserFailedError, Chromium File "/usr/local/lib/python3.11/site-packages/choreographer/browsers/__init__.py", line 4, in <module> from .chromium import ChromeNotFoundError, Chromium File "/usr/local/lib/python3.11/site-packages/choreographer/browsers/chromium.py", line 19, in <module> from choreographer.utils import TmpDirectory, get_browser_path File "/usr/local/lib/python3.11/site-packages/choreographer/utils/__init__.py", line 4, in <module> from ._which import get_browser_path File "/usr/local/lib/python3.11/site-packages/choreographer/utils/_which.py", line 10, in <module> from choreographer.cli._cli_utils import get_chrome_download_path File "/usr/local/lib/python3.11/site-packages/choreographer/cli/__init__.py", line 3, in <module> from ._cli_utils import ( File "/usr/local/lib/python3.11/site-packages/choreographer/cli/_cli_utils.py", line 27, in <module> _arch_detected = "arm" if platform.processor() == "arm" else "x" ^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/platform.py", line 970, in processor return uname().processor ^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/functools.py", line 1001, in __get__ val = self.func(instance) ^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/platform.py", line 794, in processor return _unknown_as_blank(_Processor.get()) ^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/platform.py", line 739, in get return func() or '' ^^^^^^ File "/usr/local/lib/python3.11/platform.py", line 762, in from_subprocess return subprocess.check_output( ^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/subprocess.py", line 466, in check_output return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/subprocess.py", line 548, in run with Popen(*popenargs, **kwargs) as process: ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/sentry_sdk/utils.py", line 1811, in runner return sentry_patched_function(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/local/lib/python3.11/site-packages/sentry_sdk/integrations/stdlib.py", line 206, in sentry_patched_popen_init with sentry_sdk.start_span( File "/usr/local/lib/python3.11/site-packages/sentry_sdk/tracing.py", line 397, in __exit__ self.finish(scope) File "/usr/local/lib/python3.11/site-packages/sentry_sdk/tracing.py", line 688, in finish maybe_create_breadcrumbs_from_span(scope, self) File "/usr/local/lib/python3.11/site-packages/sentry_sdk/tracing_utils.py", line 185, in maybe_create_breadcrumbs_from_span scope.add_breadcrumb( File "/usr/local/lib/python3.11/site-packages/sentry_sdk/scope.py", line 980, in add_breadcrumb new_crumb = before_breadcrumb(crumb, hint) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/src/trade-executor/tradeexecutor/cli/log.py", line 481, in before_breadcrumb crumb["level"] = custom_level_mapping.get(crumb["level"], crumb["level"]) ~~~~~^^^^^^^^^ KeyError: 'level'Could not draw visualisations in refresh_visualisations()
MemoryIndicatorStorage does not support multiprocessing, setting max_workers and max_readers to 1
Portfolio status (before rebalance), tick #222
Total equity: $23,108.70, in cash: $23,108.70
Life-time positions: 11, trades: 35
…
Reserves:
23,108.70 USDT
forward_fill_until could not be determined, assuming legacy test path and does the slow method
Performing strategy tick #222 for timestamp 2025-07-02 00:00:00, cycle length is 1d, trigger time was 2025-07-02 00:08:00.000413, live trading is True, trading univese is None, version 0.5, max cycles None