""" 配置文件 - API密钥和交易参数配置 支持从数据库读取配置(优先),回退到环境变量和默认值 """ import os from typing import Optional # 尝试从数据库加载配置 USE_DB_CONFIG = False try: import sys from pathlib import Path # 从trading_system目录向上两级到项目根目录,然后找backend project_root = Path(__file__).parent.parent backend_path = project_root / 'backend' if backend_path.exists(): sys.path.insert(0, str(backend_path)) from config_manager import config_manager USE_DB_CONFIG = True else: USE_DB_CONFIG = False except Exception: USE_DB_CONFIG = False # 币安API配置(优先从数据库,回退到环境变量和默认值) if USE_DB_CONFIG: BINANCE_API_KEY: Optional[str] = config_manager.get('BINANCE_API_KEY') or os.getenv('BINANCE_API_KEY', 'pMEXSgISMgpUIpGjyhikMXWQ7K7cCs1FFATyIvNIwWrUIQegoipVBskPUoUuvaVN') BINANCE_API_SECRET: Optional[str] = config_manager.get('BINANCE_API_SECRET') or os.getenv('BINANCE_API_SECRET', 'RklItVtBCjGV40mIquoSj78xlTGkdUxz0AFyTnsnuzSBfx776VG0S2Vw5BRLRRg2') USE_TESTNET: bool = config_manager.get('USE_TESTNET', False) if config_manager.get('USE_TESTNET') is not None else os.getenv('USE_TESTNET', 'False').lower() == 'true' else: BINANCE_API_KEY: Optional[str] = os.getenv('BINANCE_API_KEY', 'pMEXSgISMgpUIpGjyhikMXWQ7K7cCs1FFATyIvNIwWrUIQegoipVBskPUoUuvaVN') BINANCE_API_SECRET: Optional[str] = os.getenv('BINANCE_API_SECRET', 'RklItVtBCjGV40mIquoSj78xlTGkdUxz0AFyTnsnuzSBfx776VG0S2Vw5BRLRRg2') USE_TESTNET: bool = os.getenv('USE_TESTNET', 'False').lower() == 'true' # 交易参数配置(优先从数据库读取) if USE_DB_CONFIG: TRADING_CONFIG = config_manager.get_trading_config() else: TRADING_CONFIG = { # 仓位控制 'MAX_POSITION_PERCENT': 0.05, # 单笔最大仓位:账户余额的5% 'MAX_TOTAL_POSITION_PERCENT': 0.30, # 总仓位上限:账户余额的30% 'MIN_POSITION_PERCENT': 0.01, # 单笔最小仓位:账户余额的1% # 涨跌幅阈值 'MIN_CHANGE_PERCENT': 2.0, # 最小涨跌幅阈值:2% 'TOP_N_SYMBOLS': 10, # 选择前N个货币对 # 风险控制 'STOP_LOSS_PERCENT': 0.03, # 止损:3% 'TAKE_PROFIT_PERCENT': 0.05, # 止盈:5% # 市场扫描(1小时主周期) 'SCAN_INTERVAL': 3600, # 扫描间隔:1小时(秒) 'KLINE_INTERVAL': '1h', # K线周期:1小时 'PRIMARY_INTERVAL': '1h', # 主周期:1小时 'CONFIRM_INTERVAL': '4h', # 确认周期:4小时 'ENTRY_INTERVAL': '15m', # 入场周期:15分钟 # 过滤条件 'MIN_VOLUME_24H': 10000000, # 最小24小时成交量:1000万USDT 'MIN_VOLATILITY': 0.02, # 最小波动率:2% # 高胜率策略参数 'MIN_SIGNAL_STRENGTH': 5, # 最小信号强度(0-10),越高越严格,胜率越高 'LEVERAGE': 10, # 杠杆倍数 'USE_TRAILING_STOP': True, # 是否使用移动止损 'TRAILING_STOP_ACTIVATION': 0.01, # 移动止损激活阈值(盈利1%后激活) 'TRAILING_STOP_PROTECT': 0.01, # 移动止损保护利润(保护1%利润) # Unicorn WebSocket配置 'USE_UNICORN_WEBSOCKET': True, # 是否使用Unicorn WebSocket(高性能实时数据流) } # 如果使用数据库配置,确保包含所有必要的默认值 if USE_DB_CONFIG: defaults = { 'SCAN_INTERVAL': 3600, 'KLINE_INTERVAL': '1h', 'PRIMARY_INTERVAL': '1h', 'CONFIRM_INTERVAL': '4h', 'ENTRY_INTERVAL': '15m', } for key, value in defaults.items(): if key not in TRADING_CONFIG: TRADING_CONFIG[key] = value # 连接配置 CONNECTION_TIMEOUT = int(os.getenv('CONNECTION_TIMEOUT', '30')) # 连接超时时间(秒) CONNECTION_RETRIES = int(os.getenv('CONNECTION_RETRIES', '3')) # 连接重试次数 # 日志配置 LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO') LOG_FILE = 'trading_bot.log'