104 lines
2.8 KiB
Python
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()
|