2b5a32ca1e
新增模块: - fund_flow_analyzer.py: 主力资金流向分析(P0, ±20) - market_sentiment.py: 市场情绪指标(P1, ±10) - external_factors.py: 北向资金/美股/大宗商品/汇率(P2-P4,P7) - news_analyzer.py: 公告/并购/政策面LLM分析(P5-P6) - score_engine.py: 综合评分引擎,整合技术面+外部因素 路由更新: - analysis.py: deep_analyze接入综合评分,根据最终评级修正买卖建议 - market.py: 新增4个外部因素API端点 - trades.py: 交易路由更新 算法文档重构: - 章节重排: 技术面(二三)→外部因素(四)→买卖决策(五)→数据源(六)→性能(七) - 架构图更新为五层,标注章节对应 - 5.1/5.2标注纯技术面,5.3整合外部因素修正推荐
56 lines
2.0 KiB
Python
56 lines
2.0 KiB
Python
"""
|
|
应用配置 — 所有敏感信息从环境变量读取,支持 .env 文件
|
|
"""
|
|
import os
|
|
|
|
# 加载 .env 文件(如果存在)
|
|
_env_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '.env')
|
|
if os.path.exists(_env_path):
|
|
with open(_env_path) as f:
|
|
for line in f:
|
|
line = line.strip()
|
|
if not line or line.startswith('#') or '=' not in line:
|
|
continue
|
|
key, _, value = line.partition('=')
|
|
key, value = key.strip(), value.strip().strip('"').strip("'")
|
|
if key and key not in os.environ:
|
|
os.environ[key] = value
|
|
|
|
class Config:
|
|
# Flask 配置
|
|
SECRET_KEY = os.environ.get('SECRET_KEY', 'stock-app-secret-key-2026')
|
|
|
|
# 数据库配置
|
|
DB_HOST = os.environ.get('DB_HOST', 'localhost')
|
|
DB_PORT = int(os.environ.get('DB_PORT', 5432))
|
|
DB_NAME = os.environ.get('DB_NAME', 'stock_app')
|
|
DB_USER = os.environ.get('DB_USER', 'postgres')
|
|
DB_PASSWORD = os.environ.get('DB_PASSWORD', '')
|
|
|
|
# 文件路径
|
|
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
|
STOCK_DATA_CACHE_DIR = os.path.join(BASE_DIR, 'stock_data_cache')
|
|
STOCK_NAME_CACHE_FILE = os.path.join(BASE_DIR, 'stock_names.json')
|
|
TRADES_FILE = os.path.join(BASE_DIR, 'trades.json')
|
|
WATCHLIST_FILE = os.path.join(BASE_DIR, 'watchlist.json')
|
|
ALERTS_CACHE_FILE = os.path.join(BASE_DIR, 'alerts_cache.json')
|
|
|
|
# 阿里云K线API
|
|
ALICLOUD_APPCODE = os.environ.get('ALICLOUD_APPCODE', '')
|
|
ALICLOUD_KLINE_URL = 'https://jmqqgphqcx.market.alicloudapi.com/finance/a-shares-kline'
|
|
|
|
# 豆包AI API
|
|
DOUBAO_API_KEY = os.environ.get('DOUBAO_API_KEY', '')
|
|
|
|
# 麦蕊API
|
|
MAIRUI_LICENCE = os.environ.get('MAIRUI_LICENCE', '')
|
|
|
|
# 服务端口
|
|
PORT = int(os.environ.get('PORT', 3333))
|
|
|
|
# 确保缓存目录存在
|
|
@classmethod
|
|
def init_app(cls):
|
|
if not os.path.exists(cls.STOCK_DATA_CACHE_DIR):
|
|
os.makedirs(cls.STOCK_DATA_CACHE_DIR)
|