|
|
|
|
import os
|
|
|
|
|
import time
|
|
|
|
|
from datetime import datetime, date, timedelta
|
|
|
|
|
from urllib.parse import urlparse
|
|
|
|
|
|
|
|
|
|
# PARAMETERS
|
|
|
|
|
CONFIGS = {
|
|
|
|
|
"SECRET_KEY": os.environ.get("SECRET_KEY", os.urandom(30).hex()), # Set the secret key for session authentication
|
|
|
|
|
"PERMANENT_SESSION_LIFETIME": timedelta(minutes=60)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# PostgreSQL config - support both Railway and local Docker
|
|
|
|
|
DATABASE_URL = os.environ.get('DATABASE_URL')
|
|
|
|
|
if DATABASE_URL:
|
|
|
|
|
# Railway provides DATABASE_URL
|
|
|
|
|
url = urlparse(DATABASE_URL)
|
|
|
|
|
SQL_CONFIG = dict(
|
|
|
|
|
database=url.path[1:],
|
|
|
|
|
user=url.username,
|
|
|
|
|
host=url.hostname,
|
|
|
|
|
port=url.port or 5432,
|
|
|
|
|
password=url.password
|
|
|
|
|
)
|
|
|
|
|
else:
|
|
|
|
|
# Local Docker fallback
|
|
|
|
|
SQL_CONFIG = dict(
|
|
|
|
|
database="portfolio_platform",
|
|
|
|
|
user="postgres",
|
|
|
|
|
host="db",
|
|
|
|
|
port="5432",
|
|
|
|
|
password="thiispassword1qaz!QAZ"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
# Redis config - support both Railway and local Docker
|
|
|
|
|
REDIS_URL = os.environ.get('REDIS_URL')
|
|
|
|
|
if REDIS_URL:
|
|
|
|
|
# Railway provides REDIS_URL
|
|
|
|
|
CACHE_CONFIG = {
|
|
|
|
|
'CACHE_TYPE': 'redis',
|
|
|
|
|
'CACHE_REDIS_URL': REDIS_URL,
|
|
|
|
|
}
|
|
|
|
|
else:
|
|
|
|
|
# Local Docker fallback
|
|
|
|
|
CACHE_CONFIG = {
|
|
|
|
|
'CACHE_TYPE': 'redis',
|
|
|
|
|
'CACHE_REDIS_HOST': 'redis',
|
|
|
|
|
'CACHE_REDIS_PORT': 6379,
|
|
|
|
|
}
|
|
|
|
|
role_map = dict(max_sharpe='最大化夏普比率',
|
|
|
|
|
max_sortino='最大化索提諾比率',
|
|
|
|
|
min_volatility='最小化波動率',
|
|
|
|
|
quadratic_utility='最大化效用函數')
|