""" Central configuration for the Forex & Crypto Prediction project. Edit this file to add symbols, change default model checkpoints, etc. Nothing here needs internet access to import. """ import os BASE_DIR = os.path.dirname(os.path.abspath(__file__)) DATA_CACHE_DIR = os.path.join(BASE_DIR, "data_cache") OUTPUT_DIR = os.path.join(BASE_DIR, "outputs") os.makedirs(DATA_CACHE_DIR, exist_ok=True) os.makedirs(OUTPUT_DIR, exist_ok=True) PREPROCESSING_VERSION = "3.0.0" DEFAULT_FOREX_SYMBOLS = [ "EURUSD=X", "GBPUSD=X", "USDJPY=X", "USDCHF=X", "AUDUSD=X", "USDCAD=X", "NZDUSD=X", "EURJPY=X", "EURGBP=X", "GBPJPY=X", ] DEFAULT_CRYPTO_SYMBOLS = [ "BTC-USD", "ETH-USD", "BNB-USD", "XRP-USD", "SOL-USD", "ADA-USD", "DOGE-USD", "DOT-USD", "LTC-USD", "MATIC-USD", ] ALL_DEFAULT_SYMBOLS = DEFAULT_FOREX_SYMBOLS + DEFAULT_CRYPTO_SYMBOLS YF_NATIVE_INTERVALS = { "1m": {"max_days": 30}, "2m": {"max_days": 60}, "5m": {"max_days": 60}, "15m": {"max_days": 60}, "30m": {"max_days": 60}, "60m": {"max_days": 730}, "90m": {"max_days": 60}, "1d": {"max_days": None}, "1wk": {"max_days": None}, "1mo": {"max_days": None}, } CUSTOM_TIMEFRAMES = { "1m": {"source": "1m", "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}, "4h": {"source": "60m", "rule": "4h"}, "1d": {"source": "1d", "rule": None}, } MODEL_NAMES = ["ARIMA", "Auto-ARIMA", "ARIMA-GARCH", "Moirai", "TimesFM"] BASELINE_MODEL_NAMES = ["Naive", "Last-Return", "Drift", "Majority"] ALL_MODEL_NAMES = MODEL_NAMES + BASELINE_MODEL_NAMES MOIRAI_CHECKPOINT = "Salesforce/moirai-1.1-R-small" TIMESFM_CHECKPOINT = "google/timesfm-2.5-200m-pytorch" RANDOM_SEED = 42 DIRECTION_NEUTRAL_THRESHOLD = 0.0 HONOR_REQUESTED_STEP_DEFAULT = True NON_OVERLAPPING_DEFAULT = False DATA_SPLIT_RATIOS = { "development": 0.60, "validation": 0.20, "final_test": 0.20, } TRADING_DEFAULTS = { "spread_bps": 1.0, "commission_bps": 0.0, "slippage_bps": 0.5, "funding_bps_per_bar": 0.0, "tp_pct": 0.002, "sl_pct": 0.002, "entry_threshold_pct": 0.0, "position_sizing": "fixed_unit", "allow_overlap": False, "both_hit_rule": "conservative_sl_first", "entry_on": "next_open", } BARS_PER_YEAR = { "1m": 365.25 * 24 * 60, "5m": 365.25 * 24 * 12, "10m": 365.25 * 24 * 6, "15m": 365.25 * 24 * 4, "30m": 365.25 * 24 * 2, "1h": 365.25 * 24, "4h": 365.25 * 6, "1d": 365.25, }