95 lines
3.9 KiB
Python
95 lines
3.9 KiB
Python
"""
|
||
配置文件 - 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'
|