import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # Creation is lazy: importing the application must also work in a read-only # checkout. Operators can point runtime artifacts at a persistent writable mount. OUTPUT_DIR = os.path.abspath(os.path.expanduser(os.environ.get('MYTHOS_OUTPUT_DIR', os.path.join(BASE_DIR, 'outputs')))) DEFAULT_FOREX_SYMBOLS = [ 'EURUSD=X', 'GBPUSD=X', 'USDJPY=X', 'USDCHF=X', 'AUDUSD=X', 'USDCAD=X', 'NZDUSD=X', 'EURJPY=X', 'EURGBP=X', 'GBPJPY=X', 'AUDJPY=X', 'CADJPY=X', 'CHFJPY=X', 'NZDJPY=X', 'EURCHF=X', 'EURCAD=X', 'EURAUD=X', 'EURNZD=X', 'GBPCHF=X', 'GBPCAD=X', 'GBPAUD=X', 'GBPNZD=X', 'AUDCAD=X', 'AUDCHF=X', 'AUDNZD=X', 'CADCHF=X', 'NZDCAD=X', 'NZDCHF=X', 'USDINR=X', 'USDCNH=X', 'USDHKD=X', 'USDSGD=X', 'USDZAR=X', 'USDMXN=X', 'USDTRY=X', 'USDSEK=X', 'USDNOK=X', 'USDDKK=X', 'USDPLN=X', 'USDTHB=X', ] DEFAULT_CRYPTO_SYMBOLS = [ 'BTC-USD', 'ETH-USD', 'BNB-USD', 'XRP-USD', 'SOL-USD', 'ADA-USD', 'DOGE-USD', 'DOT-USD', 'LTC-USD', 'LINK-USD', ] ALL_DEFAULT_SYMBOLS = DEFAULT_FOREX_SYMBOLS + DEFAULT_CRYPTO_SYMBOLS YF_NATIVE_INTERVALS = { '1m': {'max_days': 30, 'max_request_days': 7}, '2m': {'max_days': 60, 'max_request_days': 60}, '5m': {'max_days': 60, 'max_request_days': 60}, '15m': {'max_days': 60, 'max_request_days': 60}, '30m': {'max_days': 60, 'max_request_days': 60}, '60m': {'max_days': 730, 'max_request_days': 730}, '90m': {'max_days': 60, 'max_request_days': 60}, '1d': {'max_days': None, 'max_request_days': None}, '1wk': {'max_days': None, 'max_request_days': None}, '1mo': {'max_days': None, 'max_request_days': None}, } CUSTOM_TIMEFRAMES = { '1m': {'source': '1m', 'rule': None}, '2m': {'source': '2m', 'rule': None}, '5m': {'source': '5m', 'rule': None}, '10m': {'source': '5m', 'rule': '10min'}, '15m': {'source': '15m', 'rule': None}, '30m': {'source': '30m', 'rule': None}, '1h': {'source': '60m', 'rule': None}, '2h': {'source': '60m', 'rule': '2h'}, '4h': {'source': '60m', 'rule': '4h'}, '1d': {'source': '1d', 'rule': None}, } TIMEFRAMES = ['1m', '2m', '5m', '10m', '15m', '30m', '1h', '2h'] MODEL_NAMES = ['ARIMA', 'Auto-ARIMA', 'ARIMA-GARCH', 'Moirai', 'TimesFM', 'Ridge'] PROVIDERS = ['Yahoo Finance', 'Binance Spot', 'Twelve Data'] RESEARCH_PHASES = ['Tune only', 'Tune + Validate', 'Vault only'] MOIRAI_CHECKPOINT = 'Salesforce/moirai-1.1-R-small' TIMESFM_CHECKPOINT = 'google/timesfm-2.5-200m-pytorch' DEFAULT_SYMBOL = 'BTC-USD' DEFAULT_TIMEFRAME = '5m' DEFAULT_MODEL = 'ARIMA-GARCH' DEFAULT_LOOKBACK_DAYS = 30 DEFAULT_HISTORY_WINDOW = 200 DEFAULT_HORIZON = 1 DEFAULT_BACKTEST_STEP = 30 DEFAULT_MAX_EVALUATIONS = 30 RANDOM_SEED = 42