GLM / config.py
Kashaf1's picture
Uploaded complete 89 contents
a720b3d
Raw
History Blame Contribute Delete
4.37 kB
"""
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)
# ---------------------------------------------------------------------------
# Symbols (yfinance ticker format)
# ---------------------------------------------------------------------------
# Forex pairs use the "=X" suffix, crypto pairs use "-USD".
# NOTE on "all symbols": yfinance/Yahoo Finance covers a huge number of forex
# and crypto tickers, so there is no fixed master list to hardcode. The app's
# Symbol dropdown ships with the popular ones below AND accepts any custom
# yfinance-valid ticker typed in directly (allow_custom_value=True) — so you
# are not limited to this list, this is just a convenient starting set.
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
# ---------------------------------------------------------------------------
# Timeframes
# ---------------------------------------------------------------------------
# Yahoo Finance only serves a fixed set of native intraday intervals, each
# with its own history-depth limit (enforced by Yahoo, not by us):
# 1m -> last 7 days only
# 2m/5m/15m/30m/90m -> last 60 days
# 60m (1h) -> last 730 days
# 1d/1wk/1mo -> full history
YF_NATIVE_INTERVALS = {
"1m": {"max_days": 7},
"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},
}
# Timeframes offered in the app UI. Ones that aren't native Yahoo intervals
# (e.g. "10m") are built by resampling a smaller native interval, so you can
# ask for basically any custom candle size, not just what Yahoo natively has.
#
# `rule: None` means this timeframe IS a native Yahoo interval already (just
# under a friendlier display name) -- return it as-is, no resampling.
# `rule: "<pandas rule>"` means genuine upsampling from a smaller native
# interval is needed.
#
# "1h" -> source "60m" is the one case where the display name and yfinance's
# native interval name differ ("1h" vs "60m") even though they're the same
# candle size. That mismatch used to make get_historical()'s
# `source_interval != timeframe` check misfire and re-resample already-hourly
# candles through rule="1h" -- a harmless-looking no-op when Yahoo's 60m
# candles happen to fall on clean UTC hour boundaries, but not otherwise: it
# silently re-labels each candle's timestamp to the bucket start (observed
# shifting real candle times by up to 59 minutes in testing) and, for
# irregularly-spaced candles (weekend gaps, DST), can merge two distinct
# candles into one bucket or drop one to a dropna(how="any"). Native
# passthrough (`rule: None`) sidesteps all of that.
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},
}
# ---------------------------------------------------------------------------
# Models
# ---------------------------------------------------------------------------
MODEL_NAMES = ["ARIMA", "Auto-ARIMA", "ARIMA-GARCH", "Moirai", "TimesFM"]
# Small/CPU-friendly checkpoints, picked to fit comfortably in 2 vCPU / 16GB
# RAM. Change these if you deploy on bigger (e.g. GPU) hardware.
MOIRAI_CHECKPOINT = "Salesforce/moirai-1.1-R-small"
TIMESFM_CHECKPOINT = "google/timesfm-2.5-200m-pytorch"
RANDOM_SEED = 42