Add pair_signals per-pair producer registry
Ported from feature/eurusd-support: PAIR_PRODUCERS registry with make_config() factories per pair. xauusd.make_config is a pure PlatformConfig-defaults wrapper (equality with the inline construction is enforced by test); eurusd.make_config carries the donor branch's regime weights and gates as a pre-realism baseline. Adds 4 registry tests. 154/154 pass.
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
"""
|
||||
Per-pair signal producers.
|
||||
|
||||
Each pair module exposes:
|
||||
make_config(primary_tf, confirmation_tfs) -> PlatformConfig
|
||||
|
||||
To add a new pair: create pair_signals/<pair>.py with make_config(),
|
||||
then register it in this file.
|
||||
"""
|
||||
|
||||
from typing import Optional, List, Dict, Callable
|
||||
|
||||
from config import PlatformConfig, Timeframe
|
||||
from signal_aggregator import SignalAggregator, SignalReport
|
||||
from data_provider import ForexDataProvider
|
||||
|
||||
PAIR_PRODUCERS: Dict[str, Callable] = {}
|
||||
|
||||
|
||||
def register_pair(symbol: str, config_factory: Callable):
|
||||
PAIR_PRODUCERS[symbol] = config_factory
|
||||
|
||||
|
||||
def get_supported_pairs() -> List[str]:
|
||||
return list(PAIR_PRODUCERS.keys())
|
||||
|
||||
|
||||
def produce_signal(
|
||||
symbol: str,
|
||||
primary_tf: Timeframe,
|
||||
data_provider: ForexDataProvider,
|
||||
confirmation_tfs: Optional[List[Timeframe]] = None,
|
||||
) -> SignalReport:
|
||||
config_factory = PAIR_PRODUCERS.get(symbol)
|
||||
if config_factory is None:
|
||||
raise ValueError(
|
||||
f"No signal producer registered for {symbol}. "
|
||||
f"Available: {list(PAIR_PRODUCERS.keys())}"
|
||||
)
|
||||
|
||||
config = config_factory(primary_tf, confirmation_tfs)
|
||||
aggregator = SignalAggregator(config)
|
||||
aggregator.data_provider = data_provider
|
||||
return aggregator.analyze_pair(symbol=symbol)
|
||||
|
||||
|
||||
from pair_signals import xauusd as _xau_mod
|
||||
from pair_signals import eurusd as _eur_mod
|
||||
from config import XAUUSD, EURUSD
|
||||
|
||||
register_pair(XAUUSD, _xau_mod.make_config)
|
||||
register_pair(EURUSD, _eur_mod.make_config)
|
||||
Reference in New Issue
Block a user