152 lines
4.2 KiB
Python
152 lines
4.2 KiB
Python
"""
|
||
全局配置 — 交易参数、指标参数、模型参数
|
||
"""
|
||
from pathlib import Path
|
||
|
||
# ============ 路径 ============
|
||
PROJECT_ROOT = Path(__file__).parent.parent
|
||
DB_PATH = PROJECT_ROOT / 'models' / 'database.db'
|
||
|
||
# ============ 交易参数 ============
|
||
TRADE_CONFIG = {
|
||
'symbol': 'ETHUSDT',
|
||
'commission': 0.0006, # 名义手续费 0.06%
|
||
'commission_rebate': 0.90, # 90% 返佣(次日 8 点结算),实付 = commission * (1 - rebate)
|
||
'slippage': 0.0001, # 滑点 0.01%
|
||
'initial_capital': 10000, # 本金 USDT
|
||
'leverage': 100, # 杠杆倍数
|
||
'position_notional_usd': 500, # 每笔名义 500U(开 100 倍),目标月均收益约 500U
|
||
'max_drawdown_limit': 300, # 最大回撤硬约束:权益从峰值回落超过 300U 则不再开新仓
|
||
# 兼容旧逻辑(若用比例算仓则用此项)
|
||
'position_size': 0.95,
|
||
}
|
||
|
||
# ============ K线周期 ============
|
||
KLINE_PERIODS = {
|
||
1: '1m',
|
||
3: '3m',
|
||
5: '5m',
|
||
15: '15m',
|
||
30: '30m',
|
||
60: '1h',
|
||
}
|
||
|
||
# 主周期(用于生成信号)
|
||
PRIMARY_PERIOD = 15 # 15分钟
|
||
# 辅助周期(用于多周期融合特征);加入 1m 可捕捉 15m 内短时冲高回落,减少“涨到一半又跌止损”
|
||
AUX_PERIODS = [1, 5, 60]
|
||
|
||
# ============ 指标参数 ============
|
||
INDICATOR_PARAMS = {
|
||
# 趋势类
|
||
'sma_windows': [5, 10, 20, 50, 200],
|
||
'ema_windows': [12, 26],
|
||
'macd_fast': 12,
|
||
'macd_slow': 26,
|
||
'macd_signal': 9,
|
||
'adx_window': 14,
|
||
'ichimoku_conversion': 9,
|
||
'ichimoku_base': 26,
|
||
'ichimoku_span_b': 52,
|
||
'trix_window': 15,
|
||
'aroon_window': 25,
|
||
'cci_window': 20,
|
||
'dpo_window': 20,
|
||
'kst_roc1': 10,
|
||
'kst_roc2': 15,
|
||
'kst_roc3': 20,
|
||
'kst_roc4': 30,
|
||
'vortex_window': 14,
|
||
|
||
# 动量类
|
||
'rsi_window': 14,
|
||
'stoch_window': 14,
|
||
'stoch_smooth': 3,
|
||
'williams_window': 14,
|
||
'roc_window': 12,
|
||
'mfi_window': 14,
|
||
'tsi_slow': 25,
|
||
'tsi_fast': 13,
|
||
'uo_short': 7,
|
||
'uo_medium': 14,
|
||
'uo_long': 28,
|
||
'ao_short': 5,
|
||
'ao_long': 34,
|
||
'kama_window': 10,
|
||
'ppo_slow': 26,
|
||
'ppo_fast': 12,
|
||
'stoch_rsi_window': 14,
|
||
'stoch_rsi_smooth': 3,
|
||
|
||
# 波动率类
|
||
'bb_window': 20,
|
||
'bb_std': 2,
|
||
'atr_window': 14,
|
||
'kc_window': 20,
|
||
'dc_window': 20,
|
||
|
||
# 成交量类(部分指标需要volume,K线数据可能无volume则跳过)
|
||
'obv_enabled': True,
|
||
'cmf_window': 20,
|
||
'emv_window': 14,
|
||
'fi_window': 13,
|
||
}
|
||
|
||
# ============ 特征工程参数 ============
|
||
FEATURE_CONFIG = {
|
||
'label_forward_periods': 10, # 未来N根K线用于生成标签
|
||
'label_threshold': 0.002, # 涨跌阈值(0.2%以内算震荡)
|
||
'lookback_lags': [1, 3, 5], # 滞后特征的lag值
|
||
'normalize': True, # 是否标准化
|
||
}
|
||
|
||
# ============ 模型参数 ============
|
||
MODEL_CONFIG = {
|
||
'walk_forward_train_size': 20000, # Walk-Forward 训练窗口大小
|
||
'walk_forward_test_size': 2000, # Walk-Forward 测试窗口大小
|
||
'walk_forward_step': 2000, # 滚动步长
|
||
'warm_up_months': 12, # 指定回测区间时向前加载的月数,使区间首月即有预测
|
||
|
||
'lightgbm': {
|
||
'n_estimators': 300,
|
||
'max_depth': 4,
|
||
'learning_rate': 0.03,
|
||
'num_leaves': 15,
|
||
'min_child_samples': 50,
|
||
'subsample': 0.7,
|
||
'colsample_bytree': 0.6,
|
||
'reg_alpha': 1.0,
|
||
'reg_lambda': 1.0,
|
||
'objective': 'multiclass',
|
||
'num_class': 3,
|
||
'verbose': -1,
|
||
},
|
||
|
||
'xgboost': {
|
||
'n_estimators': 300,
|
||
'max_depth': 4,
|
||
'learning_rate': 0.03,
|
||
'subsample': 0.7,
|
||
'colsample_bytree': 0.6,
|
||
'reg_alpha': 1.0,
|
||
'reg_lambda': 1.0,
|
||
'objective': 'multi:softprob',
|
||
'num_class': 3,
|
||
'verbosity': 0,
|
||
},
|
||
}
|
||
|
||
# ============ 统计筛选参数 ============
|
||
STAT_CONFIG = {
|
||
'top_n_features': 15, # 筛选Top N个指标
|
||
'correlation_threshold': 0.9, # 去除高相关特征的阈值
|
||
'grid_search_cv': 3, # 网格搜索交叉验证折数
|
||
}
|
||
|
||
# ============ 信号标签映射 ============
|
||
SIGNAL_MAP = {
|
||
0: '观望',
|
||
1: '做多',
|
||
2: '做空',
|
||
}
|