auto_trade_sys/trading_system/config.py
薇薇安 8a89592cb5 a
2026-01-13 17:30:59 +08:00

95 lines
3.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
配置文件 - 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'