diff --git a/application/rebalance_service.py b/application/rebalance_service.py index 10761c3..271a511 100644 --- a/application/rebalance_service.py +++ b/application/rebalance_service.py @@ -61,7 +61,7 @@ ) from quant_platform_kit.strategy_contracts import build_strategy_evaluation_inputs from runtime_config_support import IBIT_SMART_DCA_PROFILE, PlatformRuntimeSettings, load_platform_runtime_settings -from market_signal_runtime import resolve_external_market_signal_inputs +from us_equity_strategies.signals import resolve_external_market_signal_inputs from strategy_runtime import load_strategy_runtime LIMIT_SELL_DISCOUNT = 0.995 diff --git a/market_signal_runtime.py b/market_signal_runtime.py deleted file mode 100644 index af9ea5d..0000000 --- a/market_signal_runtime.py +++ /dev/null @@ -1,23 +0,0 @@ -"""Compatibility shim; implementation lives in us_equity_strategies.signals.""" - -from us_equity_strategies.signals import ( - DEFAULT_MARKET_SIGNAL_CACHE_DIR, - MARKET_SIGNAL_REFERENCE_CONSUMPTION_AUDIT, - MARKET_SIGNAL_REFERENCE_PLATFORM_HANDOFF, - MARKET_SIGNAL_REFERENCE_PLATFORM_HANDOFF_INDEX, - default_market_signal_inputs_when_unconfigured, - extract_consumer_market_signal_inputs_from_reference, - market_signal_consumer_for_strategy_profile, - resolve_external_market_signal_inputs, -) - -__all__ = [ - "DEFAULT_MARKET_SIGNAL_CACHE_DIR", - "MARKET_SIGNAL_REFERENCE_CONSUMPTION_AUDIT", - "MARKET_SIGNAL_REFERENCE_PLATFORM_HANDOFF", - "MARKET_SIGNAL_REFERENCE_PLATFORM_HANDOFF_INDEX", - "default_market_signal_inputs_when_unconfigured", - "extract_consumer_market_signal_inputs_from_reference", - "market_signal_consumer_for_strategy_profile", - "resolve_external_market_signal_inputs", -] diff --git a/pyproject.toml b/pyproject.toml index 5dbb1f5..3c92f6b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,8 +14,8 @@ authors = [ ] dependencies = [ "firstrade==0.0.39", - "quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@b821e8c318e15d40f925c84a007ae335a3415cd5", - "us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@7ae083fae5c00c3df0c8fb1d98b045401a3b5bfa", + "quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@aee8121d530c2e92c72b68aee434bf174b3b9c85", + "us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@b2fa659304c02cc19f7c82e86b0ce36ef592846a", "google-cloud-storage", "requests", ] diff --git a/requirements.txt b/requirements.txt index 511254e..eedc21f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,8 @@ flask gunicorn firstrade==0.0.39 -quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@b821e8c318e15d40f925c84a007ae335a3415cd5 -us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@7ae083fae5c00c3df0c8fb1d98b045401a3b5bfa +quant-platform-kit @ git+https://github.com/QuantStrategyLab/QuantPlatformKit.git@aee8121d530c2e92c72b68aee434bf174b3b9c85 +us-equity-strategies @ git+https://github.com/QuantStrategyLab/UsEquityStrategies.git@b2fa659304c02cc19f7c82e86b0ce36ef592846a google-cloud-storage google-auth requests diff --git a/strategy_runtime.py b/strategy_runtime.py index fdf4532..f77fe54 100644 --- a/strategy_runtime.py +++ b/strategy_runtime.py @@ -18,7 +18,7 @@ build_strategy_context_from_available_inputs, ) from runtime_config_support import PlatformRuntimeSettings -from market_signal_runtime import resolve_external_market_signal_inputs +from us_equity_strategies.signals import resolve_external_market_signal_inputs from strategy_loader import ( load_strategy_entrypoint_for_profile, load_strategy_runtime_adapter_for_profile, diff --git a/tests/test_market_signal_runtime.py b/tests/test_market_signal_runtime.py index 8a497af..de83f77 100644 --- a/tests/test_market_signal_runtime.py +++ b/tests/test_market_signal_runtime.py @@ -5,15 +5,18 @@ import pytest -import market_signal_runtime from us_equity_strategies.signals import runtime_market_signal_inputs as runtime_signal_inputs +def _resolve(*args, **kwargs): + return runtime_signal_inputs.resolve_external_market_signal_inputs(*args, **kwargs) + + def test_unsupported_profile_does_not_load_market_signal(): settings = SimpleNamespace(market_signal_required=True) assert ( - market_signal_runtime.resolve_external_market_signal_inputs( + runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="tqqq_growth_income", available_inputs={"derived_indicators"}, runtime_settings=settings, @@ -25,7 +28,7 @@ def test_unsupported_profile_does_not_load_market_signal(): def test_ibit_without_reference_provides_empty_indicator_input(): settings = SimpleNamespace(market_signal_required=False) - assert market_signal_runtime.resolve_external_market_signal_inputs( + assert runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="ibit_smart_dca", available_inputs={"derived_indicators"}, runtime_settings=settings, @@ -36,7 +39,7 @@ def test_ibit_required_reference_missing_raises(): settings = SimpleNamespace(market_signal_required=True) with pytest.raises(RuntimeError, match="external market signal is required"): - market_signal_runtime.resolve_external_market_signal_inputs( + runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="ibit_smart_dca", available_inputs={"derived_indicators"}, runtime_settings=settings, @@ -46,7 +49,7 @@ def test_ibit_required_reference_missing_raises(): def test_soxl_without_reference_preserves_legacy_inputs(): settings = SimpleNamespace(market_signal_required=False) - assert market_signal_runtime.resolve_external_market_signal_inputs( + assert runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="soxl_soxx_trend_income", available_inputs={"derived_indicators"}, runtime_settings=settings, @@ -56,7 +59,7 @@ def test_soxl_without_reference_preserves_legacy_inputs(): def test_nasdaq_without_reference_preserves_legacy_inputs(): settings = SimpleNamespace(market_signal_required=False) - assert market_signal_runtime.resolve_external_market_signal_inputs( + assert runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="nasdaq_sp500_smart_dca", available_inputs={"derived_indicators"}, runtime_settings=settings, @@ -70,7 +73,7 @@ def test_soxl_required_reference_missing_raises(): RuntimeError, match="soxl_soxx_trend_income external market signal is required", ): - market_signal_runtime.resolve_external_market_signal_inputs( + runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="soxl_soxx_trend_income", available_inputs={"derived_indicators"}, runtime_settings=settings, @@ -120,7 +123,7 @@ def fake_extract( market_signal_max_stale_days=5, ) - assert market_signal_runtime.resolve_external_market_signal_inputs( + assert runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="ibit_smart_dca", available_inputs={"derived_indicators"}, runtime_settings=settings, @@ -188,7 +191,7 @@ def fake_extract( market_signal_max_stale_days=4, ) - assert market_signal_runtime.resolve_external_market_signal_inputs( + assert runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="nasdaq_sp500_smart_dca", available_inputs={"derived_indicators"}, runtime_settings=settings, @@ -255,7 +258,7 @@ def fake_extract( market_signal_fallback_mode="none", ) - assert market_signal_runtime.resolve_external_market_signal_inputs( + assert runtime_signal_inputs.resolve_external_market_signal_inputs( strategy_profile="soxl_soxx_trend_income", available_inputs={"derived_indicators"}, runtime_settings=settings,