You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.4 KiB

# 配置管理工具
import os
from dotenv import load_dotenv
from typing import Dict, Optional
class ConfigManager:
"""配置管理类"""
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super(ConfigManager, cls).__new__(cls)
cls._instance._load_config()
return cls._instance
def _load_config(self):
"""加载配置"""
# 加载.env文件
load_dotenv()
# API配置
self.openai_api_key = os.getenv('OPENAI_API_KEY', '')
self.deepseek_api_key = os.getenv('DEEPSEEK_API_KEY', '')
self.deepseek_api_url = os.getenv('DEEPSEEK_API_URL', 'https://api.deepseek.com/v1/chat/completions')
# 数据库配置
self.db_path = os.getenv('DB_PATH', './data/futures_analysis.db')
# 天勤TQSDK配置
self.tqserver_host = os.getenv('TQSERVER_HOST', 'api.shinnytech.com')
self.tqserver_port = int(os.getenv('TQSERVER_PORT', '7777'))
# 风险配置
self.max_risk_percent = float(os.getenv('MAX_RISK_PERCENT', '0.02'))
self.min_profit_loss_ratio = float(os.getenv('MIN_PROFIT_LOSS_RATIO', '1.5'))
# 策略配置
self.default_atr_multiplier = float(os.getenv('DEFAULT_ATR_MULTIPLIER', '2.0'))
self.default_adx_threshold = float(os.getenv('DEFAULT_ADX_THRESHOLD', '20'))
# 定时任务配置
self.review_times = os.getenv('REVIEW_TIMES', '09:00,12:30,15:30').split(',')
def get_config(self) -> Dict:
"""获取所有配置"""
return {
'openai_api_key': self.openai_api_key,
'deepseek_api_key': self.deepseek_api_key,
'deepseek_api_url': self.deepseek_api_url,
'db_path': self.db_path,
'tqserver_host': self.tqserver_host,
'tqserver_port': self.tqserver_port,
'max_risk_percent': self.max_risk_percent,
'min_profit_loss_ratio': self.min_profit_loss_ratio,
'default_atr_multiplier': self.default_atr_multiplier,
'default_adx_threshold': self.default_adx_threshold,
'review_times': self.review_times
}
def update_config(self, config: Dict):
"""更新配置"""
for key, value in config.items():
if hasattr(self, key):
setattr(self, key, value)
# 全局配置实例
config_manager = ConfigManager()