Files
stockTradingGNN/config.py
T
2026-05-26 12:43:47 +02:00

104 lines
2.8 KiB
Python

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()