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.

102 lines
4.3 KiB

# 配置管理工具
import os
import json
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):
"""加载配置"""
# 配置文件路径
config_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(__file__))))), 'config.json')
print(f"[ConfigManager]尝试加载配置文件: {config_path}")
# 默认配置
default_config = {
'openai_api_key': '',
'deepseek_api_key': '',
'deepseek_api_url': 'https://api.deepseek.com/v1/chat/completions',
'db_path': './data/futures_analysis.db',
'tqserver_host': 'api.shinnytech.com',
'tqserver_port': 7777,
'max_risk_percent': 0.02,
'min_profit_loss_ratio': 1.5,
'default_atr_multiplier': 2.0,
'default_adx_threshold': 20,
'review_times': '09:00,12:30,15:30'.split(',')
}
# 从config.json加载配置
if os.path.exists(config_path):
try:
with open(config_path, 'r', encoding='utf-8') as f:
config_data = json.load(f)
# 从aiModel部分获取API配置
if 'aiModel' in config_data and 'models' in config_data['aiModel']:
# 查找启用的模型
enabled_models = [model for model in config_data['aiModel']['models'] if model.get('enabled', False)]
# 优先使用DeepSeek模型的配置
deepseek_model = next((model for model in config_data['aiModel']['models'] if model.get('name') == 'DeepSeek'), None)
if deepseek_model:
default_config['deepseek_api_key'] = deepseek_model.get('apiKey', '')
default_config['deepseek_api_url'] = deepseek_model.get('apiBaseUrl', 'https://api.deepseek.com/v1/chat/completions')
# 查找GPT-4模型的配置
gpt4_model = next((model for model in config_data['aiModel']['models'] if model.get('name') == 'GPT-4'), None)
if gpt4_model:
default_config['openai_api_key'] = gpt4_model.get('apiKey', '')
except Exception as e:
print(f"加载config.json失败: {e}")
# 使用默认配置
# 设置配置值
self.openai_api_key = default_config['openai_api_key']
self.deepseek_api_key = default_config['deepseek_api_key']
self.deepseek_api_url = default_config['deepseek_api_url']
self.db_path = default_config['db_path']
self.tqserver_host = default_config['tqserver_host']
self.tqserver_port = default_config['tqserver_port']
self.max_risk_percent = default_config['max_risk_percent']
self.min_profit_loss_ratio = default_config['min_profit_loss_ratio']
self.default_atr_multiplier = default_config['default_atr_multiplier']
self.default_adx_threshold = default_config['default_adx_threshold']
self.review_times = default_config['review_times']
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()