拓冰建站拓冰建站
首页 / 资讯中心 / 正文

双资产LSTM量化策略:多因子融合与实盘仓位控制

简介本资源是一套基于LSTM神经网络构建的比特币与黄金价格联合预测及交易决策模型面向量化投资初学者、金融时间序列建模学习者及Python算法实践者解决单一资产预测偏差大、多因子协同决策缺失等实际问题。压缩包共97个文件含38个核心Python脚本涵盖LSTM训练、MACD/RSI/乖离率等技术指标计算、灰色预测融合、买卖点生成与可视化绘图、42个CSV格式历史行情与中间结果数据、6个XML配置及IDE项目文件、1份PDF论文与1份Markdown说明文档整体仅1.35MB轻量易部署。已有534人学习下载资源结构清晰分层code目录组织主流程与模块化函数data目录提供多版本回测数据含权重调整、时间偏移、误差对比等敏感性实验配套脚本支持LSTM预测准度评估、综合评分计算、渐变色收益图绘制及牛熊市判断可直接复现完整策略链路并开展参数调优与实证分析。1. 这不是又一个“LSTM预测价格”的玩具模型而是一套可回测、带仓位控制、含多因子权重校准的实盘级决策流水线你见过太多用 LSTM 预测比特币收盘价的 Jupyter Notebook训练完画条拟合曲线MAPE 算个 3.2%然后戛然而止。但真实交易中光知道“明天涨不涨”毫无意义——涨 0.3% 还是 5.7%是否突破关键乖离阈值当前 MACD 是否处于背离区资金该按什么比例分配到比特币 vs 黄金这些才是决定盈亏的关键变量。本项目把 LSTM 预测嵌入完整决策闭环它不输出单一价格点而是驱动一套动态仓位调整引擎输入是比特币与黄金的双资产时序数据含 OHLCV、MACD、RSI、EMA、乖离率等 18 类衍生指标输出是每日买卖信号对应投入量资金曲线。所有模块均支持参数化重训main.py可一键启动全链路回测Trading.py封装了滑点模拟与手续费扣减逻辑评价因子的权重.csv记录了基于夏普比率和最大回撤优化出的因子权重矩阵。适合有 Python 基础、熟悉 pandas 时间序列操作、且正在构建多资产量化策略的开发者或研究员。2. LSTM 模块设计双通道输入 多步滚动预测 误差敏感型损失函数2.1 为什么用双通道 LSTM 而非单资产独立建模项目未采用“分别训练比特币 LSTM 和黄金 LSTM”这种常见做法而是构建双通道并行输入结构通道一输入比特币历史价格序列含比特币价值.csv中的开盘、最高、最低、收盘、成交量通道二输入黄金同步序列黄金价值.csv。两通道共享 LSTM 层参数但独立处理时序特征最后在全连接层前拼接隐状态向量。这种设计源于实际市场联动性——2022 年美联储加息周期中比特币与黄金的负相关性显著增强单一资产模型无法捕捉这种跨资产协动关系。代码位于LSTM-比特币.csv和LSTM-黄金.csv的生成逻辑中但核心实现藏在main.py的build_dual_lstm_model()函数内def build_dual_lstm_model(input_shape, lstm_units64, dropout_rate0.2): # 通道一比特币序列 btc_input Input(shapeinput_shape, namebtc_input) btc_lstm LSTM(lstm_units, return_sequencesTrue, dropoutdropout_rate)(btc_input) btc_lstm LSTM(lstm_units // 2, return_sequencesFalse)(btc_lstm) # 通道二黄金序列共享LSTM单元数但独立权重 gold_input Input(shapeinput_shape, namegold_input) gold_lstm LSTM(lstm_units, return_sequencesTrue, dropoutdropout_rate)(gold_input) gold_lstm LSTM(lstm_units // 2, return_sequencesFalse)(gold_lstm) # 拼接双通道隐状态 merged Concatenate()([btc_lstm, gold_lstm]) dense Dense(64, activationrelu)(merged) dropout Dropout(dropout_rate)(dense) output Dense(2, activationlinear, nameprice_delta_output)(dropout) # 同时输出BTC/GOLD未来3日价格变化率 model Model(inputs[btc_input, gold_input], outputsoutput) model.compile( optimizerAdam(learning_rate0.001), losshuber_loss, # 替代MSE对异常点如黑天鹅事件鲁棒性更强 metrics[mae] ) return model提示huber_loss是本项目关键设计。比特币单日波动超 15% 的事件频发如 2021 年 5 月暴跌MSE 会因平方项过度放大这类误差导致模型过度拟合极端值而牺牲日常波动预测精度。Huber Loss 在误差小于 δ 时退化为 MSE大于 δ 时转为线性δ 默认设为 0.5对应价格变化率 50bps已在修改误差.txt中验证其使 MAE 下降 12.7%。2.2 多步滚动预测机制与数据预处理细节模型不预测单日价格而是输出未来 3 日的累计价格变化率ΔP/P₀这是为匹配交易决策周期而设。数据预处理严格遵循以下流程对齐时间戳比特币与黄金数据采样频率不同BTC 为分钟级黄金为日线统一重采样为日频使用pandas.resample(D).last()保留当日收盘值差分消除趋势对价格序列做一阶差分dif.csv即差分后数据避免 LSTM 学习随机游走而非真实模式滑动窗口构造窗口长度设为 60 日约 3 个月每步向前滚动 1 日生成(60, 18)形状的输入张量18 维原始价格17 个技术指标归一化策略对每个特征列单独 MinMaxScaler范围 [0,1]保存 scaler 对象至scaler.pkl确保预测时能逆变换回原始量纲。关键参数表来自README.md与main.py注释参数名默认值说明修改建议SEQ_LEN60输入序列长度日短周期30提升响应速度长周期90增强趋势捕捉需权衡过拟合风险PRED_DAYS3预测未来天数设为 1 则退化为单步预测设为 5 需调整输出层维度BATCH_SIZE32训练批次大小GPU 显存不足时降至 16CPU 训练建议保持 32 以稳定梯度EPOCHS100训练轮数实际训练中早停patience15触发于第 87 轮验证集 loss 不再下降2.3 预测结果如何接入决策流看Trading.py的信号转换逻辑LSTM 输出的是价格变化率如[0.023, -0.008]表示 BTC 预期涨 2.3%黄金跌 0.8%但交易需要离散信号。Trading.py中的generate_signal_from_lstm()函数执行三重过滤def generate_signal_from_lstm(lstm_pred, current_btc_price, current_gold_price): lstm_pred: shape(2,) [btc_delta, gold_delta] 返回: signal_code (int), 1全仓BTC, 2全仓黄金, 0空仓, -1反向做空需期货支持 # Step1: 过滤微小变动0.5%视为噪音 if abs(lstm_pred[0]) 0.005 and abs(lstm_pred[1]) 0.005: return 0 # Step2: 检查方向一致性仅当两者同向且强度1.5%才考虑全仓 if lstm_pred[0] * lstm_pred[1] 0 and max(abs(lstm_pred[0]), abs(lstm_pred[1])) 0.015: return 1 if lstm_pred[0] lstm_pred[1] else 2 # Step3: 分散配置默认策略按预测强度加权 weight_btc max(0, lstm_pred[0]) / (abs(lstm_pred[0]) abs(lstm_pred[1]) 1e-8) weight_gold max(0, lstm_pred[1]) / (abs(lstm_pred[0]) abs(lstm_pred[1]) 1e-8) # 实际仓位由综合评分模块见第4章进一步校准 return weighted # 触发后续权重计算此逻辑确保模型不因噪声信号频繁切换仓位同时保留对强趋势的敏感性。买卖时机.csv文件记录了每次信号生成的时间戳与原始预测值可用于复盘误判案例。3. 多因子融合决策MACD/RSI/乖离率与 LSTM 预测的加权投票机制3.1 因子池构成与标准化处理项目未将 LSTM 预测作为唯一依据而是构建包含 7 类技术因子的评估体系全部数据已预计算并存于综合指标.csv趋势类MACDmacd.csv、EMA12/EMA26ema12.csv,ema26.csv动量类RSIrsi.csv、乖离率比特币乖离率.csv波动类ATR未显式列出但烛台图.py中计算了真实波幅LSTM 类预测变化率LSTM-比特币.csv,LSTM-黄金.csv所有因子需统一映射到 [0,1] 区间以便加权。例如 RSI 标准化公式为rsi_norm (rsi - 30) / 4030~70 为中性区而 MACD 柱状图则通过MinMaxScaler拟合历史分布。绘图-评价因素权重.py可视化各因子权重随时间的变化证实黄金的 RSI 权重在 2023 年 Q2 后显著提升反映避险属性强化。3.2 动态权重计算基于夏普比率的滚动优化权重并非固定值而是每 20 日滚动窗口内以最大化组合夏普比率为目标求解线性规划问题。核心逻辑在计算结果.py的optimize_weights()函数中def optimize_weights(historical_returns, window20): historical_returns: shape(n_days, 2) [btc_daily_ret, gold_daily_ret] 返回: weights array of shape (7,) for each factor # 构造因子暴露矩阵 X: (n_days, 7) X load_factor_exposures() # 从综合指标.csv读取 X_window X[-window:] # 取最近20日 y np.mean(historical_returns[-window:], axis1) # 对应日收益 # 目标maximize Sharpe (w^T * X * y) / std(w^T * X * y) # 转化为二次规划minimize w^T * Q * w, s.t. w^T * mu 1, sum(w)1, w0 mu X_window.T y # 因子预期收益向量 Q np.cov(X_window.T) # 因子协方差矩阵 # 使用cvxpy求解需安装cvxpy w cp.Variable(7) objective cp.Minimize(cp.quad_form(w, Q)) constraints [ w mu 1, cp.sum(w) 1, w 0 ] prob cp.Problem(objective, constraints) prob.solve() return w.value # 权重结果写入 评价因子的权重.csv供 Trading.py 实时读取注意此优化依赖cvxpy库若环境无该库项目提供降级方案——直接加载评价因子的权重.csv中预计算的静态权重2022-2023 年全周期平均值虽牺牲部分适应性但保证基础功能可用。3.3 决策信号生成MACD 主导 LSTM 修正的混合逻辑最终买卖信号由MACD决策-比特币.py与MACD决策-黄金.py执行其流程图如下文字描述MACD 基础信号检测 DIF 与 DEA 金叉/死叉结合柱状图翻红/翻绿确认趋势LSTM 修正若 LSTM 预测 BTC 未来 3 日涨幅 1.2%且 MACD 处于多头排列则将原信号强度 ×1.3反之若预测跌幅 1.5%则强制平仓乖离率过滤当 BTC 乖离率 8%比特币乖离率.csv即使 MACD 金叉也禁止开多防止追高仓位计算根据每次投入量.csv中的动态资金管理规则结合当前总资产与波动率ATR确定单笔交易金额。买卖数量.csv记录了每次交易的实际手数买点.csv与卖点.csv分别标记入场/出场时间戳二者时间差即持仓周期统计基础。4. 回测验证与敏感度分析用 5 种扰动测试模型鲁棒性4.1 标准回测结果与基准对比项目提供Trading.py的run_backtest()函数支持指定起止日期运行全链路回测。以 2021-01-01 至 2023-12-31 为区间初始资金 100,000 元手续费 0.075%滑点按 0.1% 计算结果如下指标本策略BuyHold BTCBuyHold Gold等权组合总收益率217.3%142.6%-18.9%32.1%年化收益率48.2%35.7%-9.8%15.3%最大回撤-32.4%-78.6%-24.1%-41.2%夏普比率1.320.89-0.410.67胜率58.3%49.1%42.7%51.6%提示回测中资本值变化.csv是核心输出文件每一行对应交易日的总资产、BTC 持仓市值、黄金持仓市值、现金余额。绘图-价值-买卖点.py可生成带买卖点标注的资金曲线图直观显示策略在 2022 年熊市中的抗跌能力当年 BTC 下跌 65%本策略仅回撤 22.3%。4.2 敏感度分析5 种扰动下的绩效衰减测试为验证模型对数据质量的容忍度项目设计 5 类扰动实验结果汇总于绘图-敏感度分析-二维.py与绘图-敏感度分析-三维.py随机提前/推迟交易日模拟订单执行延迟在资本值变化-随机提前或推迟X天.csvX1,2,3,4,5中记录绩效权重扰动在资本值变化-不考虑权重.csv中关闭动态权重固定各因子权重为 1/7乖离率失效在资本值变化-不考虑乖离值.csv中移除乖离率过滤逻辑LSTM 替换为灰色预测灰色预测.py生成的预测值替代 LSTM 输出对比灰色预测的评价.csv参数偏移资本值变化-偏大版.csv/偏小版.csv测试仓位比例 ±20% 的影响。关键发现交易延迟 2 日内对年化收益影响 2.1%但延迟 5 日导致夏普比率下降 0.28证明信号时效性关键关闭乖离率过滤后最大回撤扩大至 -41.7%证实其风控价值灰色预测替代 LSTM 后2023 年 Q4 收益率下降 19.3%凸显 LSTM 对非线性波动的捕捉优势。4.3 一个实用技巧用绘图-随机提前或推迟的影响.py快速定位信号脆弱点该脚本不只画图更提供定位策略弱点的诊断方法。它读取资本值变化-随机提前或推迟1天.csv至...5天.csv计算每个扰动下相对于基准回测的收益差值并按日期聚合# 提取所有扰动文件的收益序列 base_curve pd.read_csv(资本值变化.csv)[total_value] perturb_curves {} for days in range(1, 6): df pd.read_csv(f资本值变化-随机提前或推迟{days}天.csv) perturb_curves[days] df[total_value].values # 计算每日扰动敏感度std(各扰动收益) / base_curve[i] sensitivity np.std([c for c in perturb_curves.values()], axis0) / base_curve.values # 找出敏感度Top10的日期 top10_dates pd.read_csv(资本值变化.csv)[date].iloc[np.argsort(sensitivity)[-10:]].tolist() print(高敏感日期:, top10_dates) # 输出示例[2022-06-13, 2022-11-09, 2023-03-10, ...]这些日期往往对应重大事件如美联储议息、交易所暴雷提示你在这些时段应手动介入或启用保守模式。thesis.pdf第 4.2 节指出2022-06-13LUNA 崩盘次日的敏感度峰值源于 MACD 与 LSTM 信号冲突此时策略自动降仓至 30%避免了后续连跌。5. 部署前必做的三件事环境检查、数据校验、信号沙盒测试5.1 环境依赖与版本锁定项目要求 Python ≥ 3.8核心依赖已固化于requirements.txt未显式给出但可从main.py导入语句推断tensorflow2.12.0LSTM 训练pandas1.5.3时间序列处理numpy1.23.5数值计算matplotlib3.7.1绘图cvxpy1.3.1权重优化可选注意若cvxpy安装失败删除计算结果.py中optimize_weights()的调用改用评价因子的权重.csv的静态权重。所有绘图脚本均兼容无 cvxpy 环境。5.2 数据完整性校验脚本运行check_data_integrity.py项目未提供但可快速编写验证关键文件import pandas as pd required_files [ 比特币价值.csv, 黄金价值.csv, macd.csv, rsi.csv, LSTM-比特币.csv, LSTM-黄金.csv, 买卖时机.csv ] for f in required_files: try: df pd.read_csv(f) assert len(df) 1000, f{f} 数据量不足 assert date in df.columns, f{f} 缺少date列 assert not df.isnull().any().any(), f{f} 存在空值 print(f✓ {f}) except Exception as e: print(f✗ {f}: {e})缺失比特币价值.csv或黄金价值.csv将导致main.py启动失败买卖时机.csv若为空则Trading.py无法生成首笔信号。5.3 信号沙盒测试用MACD决策_返回值版.py快速验证逻辑该脚本剥离了资金管理与仓位计算仅输出纯信号1/2/0/-1便于快速验证python MACD决策_返回值版.py --asset btc --date 2023-10-15 # 输出: signal1, confidence0.82, reasonMACD金叉LSTM预测涨2.1%传入任意日期它会加载当日所有因子数据执行完整决策链返回信号码与置信度。置信度由 LSTM 预测强度、MACD 柱状图面积、RSI 距离中轴距离三者加权得出。连续 5 日测试信号稳定性可判断模型是否进入震荡失效期。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门