import os from datetime import datetime class Config: # Data settings DATA_DIR = os.path.join(os.path.dirname(__file__), "data") RAW_DATA_DIR = os.path.join(DATA_DIR, "raw") PROCESSED_DATA_DIR = os.path.join(DATA_DIR, "processed") EXTERNAL_DATA_DIR = os.path.join(DATA_DIR, "external") # Ensure directories exist os.makedirs(RAW_DATA_DIR, exist_ok=True) os.makedirs(PROCESSED_DATA_DIR, exist_ok=True) os.makedirs(EXTERNAL_DATA_DIR, exist_ok=True) # Stock universe settings INITIAL_TICKERS = [ "AAPL", "MSFT", "GOOGL", "AMZN", "META", "TSLA", "NVDA", "JPM", "V", "WMT", "PG", "DIS", "NFLX", "ADBE", "PYPL", "INTC", "CSCO", "PEP", "KO", "XOM", ] INDEX_TICKER = "^GSPC" # S&P 500 DELISTED_TICKERS_FILE = os.path.join(EXTERNAL_DATA_DIR, "delisted_stocks.csv") # Date settings START_DATE = "2010-01-01" END_DATE = datetime.now().strftime("%Y-%m-%d") TRAIN_END_DATE = "2020-12-31" VAL_END_DATE = "2021-12-31" # Model settings MODEL_DIR = os.path.join(os.path.dirname(__file__), "models") os.makedirs(MODEL_DIR, exist_ok=True) MODEL_NAME = "stock_gnn" HIDDEN_CHANNELS = 64 NUM_HEADS = 8 DROPOUT = 0.6 LEARNING_RATE = 0.001 EPOCHS = 100 BATCH_SIZE = 32 LOOKBACK_WINDOW = 30 # Days for feature calculation # Backtesting settings INITIAL_CAPITAL = 100000 TRANSACTION_COST = 0.001 # 0.1% per trade # Evaluation settings BENCHMARK_TICKER = "^GSPC" # News data settings NEWS_API_KEY = "your_news_api_key" # For NewsAPI or similar NEWS_SOURCES = ["reuters", "bloomberg", "financial-times", "wsj"] NEWS_CATEGORIES = ["business", "financial", "economy"] NEWS_LOOKBACK_DAYS = 7 # Number of days to look back for news # Social media settings TWITTER_BEARER_TOKEN = "your_twitter_bearer_token" REDDIT_CLIENT_ID = "your_reddit_client_id" REDDIT_CLIENT_SECRET = "your_reddit_client_secret" SOCIAL_MEDIA_LOOKBACK_DAYS = 3 # Number of days to look back for social media # Sentiment analysis settings SENTIMENT_MODEL = "vader" # 'vader', 'finbert', or 'custom' FINBERT_MODEL_PATH = "yiyanghkust/finbert-tone" # HuggingFace model path # Alternative data features NEWS_FEATURES = [ "sentiment_score", "mention_count", "positive_score", "negative_score", ] SOCIAL_FEATURES = [ "twitter_sentiment", "reddit_sentiment", "twitter_volume", "reddit_volume", ] ALTERNATIVE_DATA_WEIGHT = 0.3 # Weight for alternative data in final prediction # Database settings for alternative data ALTERNATIVE_DATA_DB = os.path.join(DATA_DIR, "alternative_data.db") config = Config()