from dataclasses import dataclass, field from typing import List @dataclass class Settings: # 20 FX fx: List[str] = field(default_factory=lambda: [ "EURUSD=X","GBPUSD=X","USDJPY=X","USDCHF=X","USDCAD=X", "AUDUSD=X","NZDUSD=X","EURGBP=X","EURJPY=X","EURCHF=X", "GBPJPY=X","AUDJPY=X","CHFJPY=X","CADJPY=X","EURAUD=X", "EURNZD=X","GBPAUD=X","GBPCAD=X","AUDCAD=X","NZDJPY=X", ]) # 20 CRYPTO crypto: List[str] = field(default_factory=lambda: [ "BTC-USD","ETH-USD","BNB-USD","SOL-USD","XRP-USD", "ADA-USD","DOGE-USD","TRX-USD","DOT-USD","AVAX-USD", "MATIC-USD","LTC-USD","BCH-USD","LINK-USD","ATOM-USD", "XMR-USD","XLM-USD","ETC-USD","FIL-USD","NEAR-USD", ]) yf_period: str = "5d" interval: str = "1m" starting_cash: float = 10000.0 loop_sleep_s: int = 2 root_dir: str = "out" commission_per_trade: float = 1.0 slippage_bp: float = 1.0 # — parametry strategii — history_min_bars: int = 220 rsi_len: int = 14 # filtry – poluzowane require_trend: bool = False # ignoruj EMA200 gdy False use_macd_filter: bool = False # ignoruj MACD gdy False adx_min: float = 8.0 atr_min_frac_price: float = 1e-4 rsi_buy_max: float = 75.0 rsi_sell_min: float = 25.0 # SL/TP sl_atr_mult: float = 1.3 tp_rr: float = 1.5 # sizing na ryzyko risk_per_trade_frac: float = 0.02 # 2% equity na 1R min_size: float = 1.0 max_size: float = 100000.0 # shorty allow_short: bool = True @property def tickers(self) -> List[str]: return self.fx + self.crypto CFG = Settings()