Features: - FastAPI backend with stocks, news, signals, watchlist, analytics endpoints - React frontend with TailwindCSS dark mode trading dashboard - Celery workers for news fetching, sentiment analysis, pattern detection - TimescaleDB schema for time-series stock data - Docker Compose setup for all services - OpenAI integration for sentiment analysis
70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
"""
|
|
Celery Application Configuration
|
|
"""
|
|
|
|
from celery import Celery
|
|
from celery.schedules import crontab
|
|
|
|
from app.core.config import settings
|
|
|
|
# Create Celery app
|
|
celery_app = Celery(
|
|
"marketscanner",
|
|
broker=settings.RABBITMQ_URL,
|
|
backend=settings.REDIS_URL,
|
|
include=[
|
|
"app.workers.tasks.news_tasks",
|
|
"app.workers.tasks.stock_tasks",
|
|
"app.workers.tasks.sentiment_tasks",
|
|
"app.workers.tasks.pattern_tasks",
|
|
"app.workers.tasks.alert_tasks",
|
|
],
|
|
)
|
|
|
|
# Celery configuration
|
|
celery_app.conf.update(
|
|
task_serializer="json",
|
|
accept_content=["json"],
|
|
result_serializer="json",
|
|
timezone="UTC",
|
|
enable_utc=True,
|
|
task_track_started=True,
|
|
task_time_limit=300, # 5 minutes
|
|
worker_prefetch_multiplier=1,
|
|
worker_concurrency=4,
|
|
)
|
|
|
|
# Beat schedule (periodic tasks)
|
|
celery_app.conf.beat_schedule = {
|
|
# Fetch news every 5 minutes
|
|
"fetch-news-every-5-minutes": {
|
|
"task": "app.workers.tasks.news_tasks.fetch_all_news",
|
|
"schedule": settings.NEWS_SCAN_INTERVAL,
|
|
},
|
|
# Update stock prices every minute
|
|
"update-prices-every-minute": {
|
|
"task": "app.workers.tasks.stock_tasks.update_stock_prices",
|
|
"schedule": settings.STOCK_PRICE_INTERVAL,
|
|
},
|
|
# Process unanalyzed news every 2 minutes
|
|
"analyze-sentiment-every-2-minutes": {
|
|
"task": "app.workers.tasks.sentiment_tasks.process_unanalyzed_news",
|
|
"schedule": 120,
|
|
},
|
|
# Detect panic events every 5 minutes
|
|
"detect-panic-every-5-minutes": {
|
|
"task": "app.workers.tasks.pattern_tasks.detect_panic_events",
|
|
"schedule": 300,
|
|
},
|
|
# Generate signals every 10 minutes
|
|
"generate-signals-every-10-minutes": {
|
|
"task": "app.workers.tasks.pattern_tasks.generate_buy_signals",
|
|
"schedule": 600,
|
|
},
|
|
# Clean old data daily at midnight
|
|
"cleanup-daily": {
|
|
"task": "app.workers.tasks.news_tasks.cleanup_old_news",
|
|
"schedule": crontab(hour=0, minute=0),
|
|
},
|
|
}
|