附录D 常见问题与排错指南

202页 · 预计4

使用说明

本附录收集了壹信量化团队在多年实盘运营中遇到的各类常见问题,以及对应的排查思路和解决方案。涵盖策略、系统、风控、资金、数据、运营六大类,共计80+个常见问题。

当你遇到问题时,可以按以下步骤排查:

  1. 先看日志:90%的问题都能在日志中找到线索
  2. 再查本指南:按类别查找是否有类似问题
  3. 最后联系技术支持:如果以上都无法解决,联系壹信量化技术支持

每个问题都包含:问题描述、可能原因、排查步骤、解决方案、预防措施。建议你在遇到问题时,先按照排查步骤一步步来,不要上来就重启或改代码——很多时候重启会掩盖问题,导致下次再犯。


一、策略类问题(20个)

Q1:回测收益很好,实盘却亏损

问题描述:策略在回测中年化收益50%,最大回撤5%,看起来很完美。但实盘跑了一个月,反而亏了8%。

可能原因

  1. 回测有前视偏差或未来函数
  2. 回测没有扣除真实的手续费和滑点
  3. 回测用的是收盘价成交,实盘无法按收盘价成交
  4. 策略过拟合,只在历史数据上有效
  5. 市场环境发生了变化,策略失效
  6. 实盘资金量太大,冲击成本高
  7. 回测数据有问题(除权、复权、缺失数据)

排查步骤

  1. 检查回测代码,确认没有前视偏差和未来函数
  2. 对比回测和实盘在相同时期的表现,看差异有多大
  3. 检查回测的手续费和滑点设置,是否跟实盘一致
  4. 检查回测的成交价格假设(收盘价?中间价?对手价?)
  5. 做样本外测试和滚动前向分析,看策略是否过拟合
  6. 分析实盘的每笔交易,看亏损来自哪里(滑点?方向错?时机错?)

解决方案

  1. 如果是回测bug:修复bug,重新回测
  2. 如果是成本低估:提高回测成本假设(建议手续费×1.5,滑点×2)
  3. 如果是成交假设不现实:改用更保守的成交假设(如对手价+滑点)
  4. 如果是过拟合:简化策略,减少参数,或换一个更稳健的逻辑
  5. 如果是市场变化:评估策略是否进入衰退期,考虑迭代或淘汰
  6. 如果是资金量太大:降低仓位,或分批建仓

预防措施

  • 回测时始终用保守的成本假设
  • 回测通过后必须做样本外测试和模拟盘验证
  • 小资金实盘至少跑1个月,确认表现跟回测一致再加资金
  • 定期(每月)对比回测和实盘的表现差异

Q2:策略信号跟预期不一致

问题描述:明明应该出信号的时候没出,或者不该出信号的时候出了。

可能原因

  1. 数据有问题(缺失、错误、延迟)
  2. 指标计算有bug
  3. 信号逻辑写错了(条件搞反、阈值错了)
  4. 时间对齐有问题(不同数据源的时间戳不一致)
  5. 代码逻辑跟设计文档不一致
  6. 参数配置错了

排查步骤

  1. 打印原始数据,确认数据正确
  2. 打印中间计算结果(指标值、信号值),一步步核对
  3. 用一个已知的简单案例手动计算,跟代码结果对比
  4. 检查时间戳,确认数据是按时间顺序对齐的
  5. 对照设计文档,逐行检查信号逻辑
  6. 检查配置文件,确认参数正确

解决方案

  1. 数据问题:修复数据源,增加数据校验
  2. 计算bug:修复代码,增加单元测试
  3. 逻辑错误:修正逻辑,跟设计文档对齐
  4. 时间对齐:统一时间戳格式,做时间对齐处理

预防措施

  • 核心计算函数必须有单元测试
  • 增加数据校验层,异常数据告警
  • 信号生成时打印详细日志(指标值、条件判断结果)

Q3:策略频繁开平仓(过度交易)

问题描述:策略一天开平仓几十次,手续费吃掉了大部分利润。

可能原因

  1. 开仓阈值和平仓阈值太接近
  2. 没有最小持仓时间限制
  3. 信号在阈值附近反复跳动
  4. 数据噪声太大(用了太短期的周期)
  5. 没有过滤条件(如趋势过滤、波动率过滤)

排查步骤

  1. 统计交易频率,看是否在合理范围
  2. 分析每笔交易的持仓时间和盈亏
  3. 看信号是否在阈值附近反复触发
  4. 检查K线周期和参数设置

解决方案

  1. 增大开仓阈值和平仓阈值之间的差距
  2. 增加最小持仓时间限制(如至少持有1小时)
  3. 增加信号确认机制(如连续2根K线满足条件才开仓)
  4. 改用更长的K线周期(如从1分钟改为5分钟)
  5. 增加过滤条件(如只在趋势方向交易、波动率适中时交易)

预防措施

  • 回测时就关注交易频率和手续费占比
  • 设置合理的参数,不要追求过多的交易机会
  • 实盘监控交易频率,异常时告警

Q4:策略长时间不开仓

问题描述:策略跑了一周,一笔交易都没有,资金一直闲置。

可能原因

  1. 开仓阈值设置太高
  2. 市场环境不适合策略(如震荡策略遇到单边市)
  3. 数据或代码有问题,导致信号无法生成
  4. 过滤条件太严格
  5. 交易对选择不当(流动性差、波动太小)

排查步骤

  1. 检查日志,确认策略在正常运行,没有报错
  2. 打印当前的指标值和信号值,看离触发条件还有多远
  3. 检查开仓阈值和过滤条件,是否设置过严
  4. 分析近期市场环境,是否跟策略适配
  5. 检查交易对的流动性和波动率

解决方案

  1. 如果阈值太高:适当降低开仓阈值(但要确保收益覆盖成本)
  2. 如果市场不适配:等待市场环境变化,或切换到适配的策略
  3. 如果是代码bug:修复bug
  4. 如果过滤太严:放宽或优化过滤条件
  5. 如果交易对不合适:更换交易对

预防措施

  • 回测时统计开仓频率,确保在合理范围
  • 多策略组合,不同市场环境下都有策略能交易
  • 监控策略的开仓频率,长时间不开仓时告警

Q5:配对套利的价差一直不回归

问题描述:开仓后价差不仅不收敛,反而持续扩大,浮亏越来越大。

可能原因

  1. 配对的协整关系断裂(其中一个币种出现基本面变化)
  2. 开仓时机不对(价差还在扩大趋势中)
  3. 对冲比例计算错误
  4. 市场处于极端行情,所有相关性都失效
  5. 样本期太短,协整检验不可靠

排查步骤

  1. 重新做协整检验,看p值是否还在阈值以下
  2. 检查两个币种的基本面,是否有重大事件
  3. 核对对冲比例的计算是否正确
  4. 分析价差的历史走势,看当前偏离是否在历史范围内
  5. 检查开仓时的Z-Score值,是否真的达到了开仓阈值

解决方案

  1. 如果协整断裂:立即止损平仓,这个配对不再使用
  2. 如果对冲比例错误:修正对冲比例,调整仓位
  3. 如果是极端行情:设置止损,控制亏损,等市场恢复
  4. 如果是开仓时机问题:优化入场逻辑(如等待价差开始回归再入场)

预防措施

  • 每次开仓前都重新做协整检验
  • 设置Z-Score止损(如超过3.5强制平仓)
  • 分散配对,不要只做一个配对
  • 定期(每周)重新评估所有配对的有效性

Q6:网格策略遇到单边行情持续亏损

问题描述:网格策略在震荡市赚得很舒服,但遇到单边下跌,持续接飞刀,亏损严重。

可能原因

  1. 网格区间设置不合理,下界太低
  2. 没有止损机制,跌破区间后继续持有
  3. 仓位太重,下跌时资金不够补仓
  4. 没有趋势过滤,在单边市中也运行网格
  5. 网格数量太多,每格间距太小,下跌时快速满仓

排查步骤

  1. 检查网格区间的上下界,是否合理
  2. 检查是否有止损机制,跌破下界后怎么处理
  3. 分析下跌过程中的仓位变化,是否快速满仓
  4. 检查是否有趋势判断和过滤

解决方案

  1. 优化网格区间:用支撑阻力位或ATR设定合理区间
  2. 增加止损:跌破下界一定比例(如5%)全部卖出止损
  3. 控制仓位:不要满仓运行,预留资金应对极端情况
  4. 增加趋势过滤:在明显的单边趋势中暂停网格
  5. 优化网格参数:减少网格数量,增大每格间距
  6. 改用动态网格:根据价格变化动态调整区间

预防措施

  • 回测时必须包含单边行情的测试
  • 设置严格的止损,不要死扛
  • 网格策略的资金占比不要太高(建议<30%)
  • 监控市场趋势,单边市中降低仓位或暂停

Q7:资金费率套利的收益不如预期

问题描述:以为资金费率套利是"躺赚",实际跑下来收益很低,甚至亏损。

可能原因

  1. 资金费率预测不准,开仓后费率很快变了
  2. 持仓时间太长,期间费率多次变化
  3. 价格波动导致对冲头寸浮亏,超过了资金费收益
  4. 借币利率太高,侵蚀了收益
  5. 手续费和滑点成本高
  6. 资金费率本身就不高(市场平静期)

排查步骤

  1. 统计每笔交易的资金费收入和价格波动盈亏
  2. 检查开仓时的费率和持仓期间的费率变化
  3. 计算借币利率和手续费成本
  4. 分析持仓时间,是否太长

解决方案

  1. 优化入场时机:在费率最高的时候开仓,费率回归后立即平仓
  2. 缩短持仓时间:不要为了等下次结算而长期持有
  3. 控制价格波动风险:设置价格波动止损,对冲头寸偏离过大时平仓
  4. 降低借币成本:选择借币利率低的交易所和币种
  5. 多币种布局:哪个币种费率高就做哪个,不要死磕一个
  6. 市场平静期降低仓位或暂停

预防措施

  • 回测时考虑价格波动风险,不是只看资金费
  • 设置严格的止损和持仓时间限制
  • 监控全市场资金费率,选择最优机会
  • 不要用太高的杠杆做资金费率套利

Q8:跨所套利的价差一直不够大

问题描述:监控了很久,两个交易所的价差一直小于开仓阈值,没有交易机会。

可能原因

  1. 开仓阈值设置太高
  2. 选择的交易所组合价差本来就小(如两个头部交易所)
  3. 市场平静期,价差普遍小
  4. 交易对选择不当(主流币价差小,山寨币价差大但风险高)

排查步骤

  1. 统计历史价差分布,看当前阈值对应的机会频率
  2. 分析不同交易所组合的价差特征
  3. 检查交易对的价差情况

解决方案

  1. 优化阈值:根据历史价差分布设定合理阈值(如95%分位)
  2. 更换交易所组合:选择价差更大的组合(如头部交易所跟二线交易所)
  3. 更换交易对:尝试价差更大的山寨币(但要注意流动性和风险)
  4. 多组合监控:同时监控多个交易所组合和交易对
  5. 市场平静期降低预期或暂停

预防措施

  • 上线前用历史数据统计机会频率,确保在合理范围
  • 多组合、多币种布局,增加机会
  • 动态调整阈值,根据市场情况变化

Q9:期现套利的基差一直不收敛

问题描述:开仓后期现基差不仅不收敛,反而持续扩大,浮亏增加。

可能原因

  1. 开仓时机不对(基差还在扩大趋势中)
  2. 期货合约选择不当(如远月合约基差波动大)
  3. 市场处于极端行情(如牛市末期基差持续扩大)
  4. 对冲比例不对
  5. 交割日太远,基差有足够时间扩大

排查步骤

  1. 分析基差的历史走势,看当前位置
  2. 检查期货合约的到期时间
  3. 分析市场环境(牛市/熊市/震荡市)
  4. 核对对冲比例

解决方案

  1. 优化入场时机:等基差开始收敛再入场,或分批建仓
  2. 选择近月合约:近月合约基差更稳定,收敛确定性高
  3. 控制仓位:不要在基差极端时重仓
  4. 设置止损:基差扩大到一定程度时止损
  5. 持有到交割:如果是交割合约,可以持有到交割,基差必然收敛

预防措施

  • 回测时包含基差扩大的场景
  • 选择流动性好、到期时间合适的合约
  • 设置合理的止损
  • 不要在基差历史极值时重仓

Q10:事件驱动套利经常"买预期卖事实"亏损

问题描述:事件发生前买入,事件发生后价格不涨反跌,被套在高位。

可能原因

  1. 事件已经被市场充分定价(预期已经反映在价格里)
  2. 事件结果不及预期
  3. 入场时机太晚(已经涨了很多才追)
  4. 没有设置止损,事件失败后死扛
  5. 事件本身影响力不够大

排查步骤

  1. 分析事件前的价格走势,是否已经提前上涨
  2. 评估事件的预期程度和实际结果
  3. 检查入场价格和时机
  4. 分析同类历史事件的价格表现

解决方案

  1. 优化入场时机:在事件前1-2周布局,不要在事件前几天追高
  2. 评估预期程度:如果事件已经被广泛讨论、价格已经大涨,就不要追了
  3. 设置严格止损:事件结果不及预期时立即止损
  4. 分批建仓:不要一次性满仓,分2-3次建仓
  5. 选择高影响力事件:只做有重大影响力的事件,不做小事件
  6. 考虑"卖事实":事件发生后无论结果如何,先减仓或平仓

预防措施

  • 建立事件影响力评估框架,只做高影响力事件
  • 严格控制仓位,单事件仓位不超过总资金的10%
  • 设置止损,不抱幻想
  • 事件前充分研究,了解市场预期

(由于篇幅限制,以下问题给出精简版解答,实际使用时可根据需要展开)

Q11-Q20:其他策略类问题

Q11:策略在某个时间段表现特别差

  • 可能原因:市场环境变化、数据异常、参数不适应
  • 排查:分段回测,分析差的时间段的市场特征
  • 解决:增加市场环境过滤,或动态调整参数

Q12:策略夏普比率低

  • 可能原因:收益波动大、亏损交易多、仓位不稳定
  • 排查:分析收益分布,看波动来源
  • 解决:优化止损、平滑仓位、增加过滤条件

Q13:策略胜率高但总亏损

  • 可能原因:盈亏比太低,赚小钱亏大钱
  • 排查:分析平均盈利和平均亏损
  • 解决:优化止损止盈,提高盈亏比

Q14:策略盈亏比高但总亏损

  • 可能原因:胜率太低,大部分时候都在亏
  • 排查:分析胜率和交易频率
  • 解决:优化入场信号,提高胜率,或减少交易次数

Q15:回测跟模拟盘差异大

  • 可能原因:回测假设不现实、模拟盘数据有延迟、滑点差异
  • 排查:对比同一时间段的回测和模拟盘交易
  • 解决:修正回测假设,用更真实的成交模型

Q16:模拟盘跟实盘差异大

  • 可能原因:实盘滑点更大、流动性不足、订单执行差异
  • 排查:对比模拟盘和实盘的成交价格和时间
  • 解决:优化下单算法,降低滑点,选择流动性好的标的

Q17:策略在小资金上有效,大资金上失效

  • 可能原因:冲击成本高、流动性不足、市场容量有限
  • 排查:用大资金量回测,看滑点和冲击成本
  • 解决:降低仓位、分批建仓、选择容量大的策略

Q18:多个策略同时亏损

  • 可能原因:策略相关性高、市场环境对所有策略都不利
  • 排查:计算策略间的相关性,分析同时亏损的时间段
  • 解决:降低相关性高的策略仓位,增加低相关性策略

Q19:策略参数稍微一改表现就差很多

  • 可能原因:过拟合,参数敏感
  • 排查:做参数敏感性分析,看参数平面
  • 解决:简化策略,减少参数,选择参数平坦区域

Q20:策略运行一段时间后收益下降

  • 可能原因:策略进入衰退期、市场结构变化、竞争者增多
  • 排查:滚动分析收益表现,看是否有下降趋势
  • 解决:迭代优化策略,或淘汰更换新策略

二、系统类问题(15个)

Q21:策略程序突然崩溃

问题描述:策略跑着跑着就停了,没有任何征兆。

可能原因

  1. 未捕获的异常(API返回异常、数据异常、除零错误等)
  2. 内存泄漏,内存耗尽被系统杀掉
  3. 磁盘满了,无法写日志
  4. 服务器重启或宕机
  5. 依赖库版本不兼容
  6. 网络断开后没有重连,导致后续操作失败

排查步骤

  1. 查看程序日志,看最后报错信息
  2. 查看系统日志(dmesg、/var/log/syslog),看是否有OOM或系统错误
  3. 检查磁盘空间(df -h)
  4. 检查内存使用(free -h)
  5. 检查服务器运行时间(uptime),看是否重启过
  6. 如果有core dump,分析core文件

解决方案

  1. 增加全局异常捕获,所有异常都记录日志,不要让程序静默退出
  2. 修复内存泄漏(如及时释放不需要的对象、避免无限增长的列表)
  3. 清理磁盘空间,设置日志轮转
  4. 用systemd或supervisor管理进程,崩溃后自动重启
  5. 固定依赖库版本,避免自动升级导致不兼容
  6. 增加网络重连和重试机制

预防措施

  • 代码中所有可能出错的地方都有try-except
  • 用进程管理器(systemd/supervisor)管理,自动重启
  • 监控服务器资源(CPU、内存、磁盘),异常告警
  • 定期(每周)检查日志,看是否有潜在问题

Q22:API调用频繁报错

问题描述:调用交易所API时经常返回错误,如429(限流)、500(服务器错误)、超时等。

可能原因

  1. 调用频率超过交易所限流
  2. 网络不稳定,丢包或延迟高
  3. 交易所API服务器故障或维护
  4. API参数错误
  5. API密钥权限不足或过期
  6. 请求签名错误

排查步骤

  1. 查看错误码和错误信息,确定错误类型
  2. 统计API调用频率,看是否超过限流
  3. 测试网络连通性和延迟(ping、traceroute)
  4. 检查API参数是否正确
  5. 检查API密钥状态和权限
  6. 查看交易所公告,是否有维护或故障

解决方案

  1. 限流错误:降低调用频率,增加请求间隔,用WebSocket替代轮询
  2. 网络问题:更换服务器地理位置,优化网络,增加超时和重试
  3. 交易所故障:等待恢复,或切换到备用交易所
  4. 参数错误:修正参数
  5. 密钥问题:重新生成密钥,确认权限
  6. 签名错误:检查签名算法,确保时间戳正确

预防措施

  • 了解交易所API的限流规则,控制调用频率
  • 优先用WebSocket获取实时数据,减少REST调用
  • 增加重试机制(指数退避),但不要无限重试
  • 监控API错误率,异常时告警
  • 有备用数据源和交易所

Q23:订单成交延迟高或不成交

问题描述:下单后很久才成交,或者一直挂着不成交。

可能原因

  1. 用了限价单,价格不优
  2. 市场流动性差,深度不足
  3. 网络延迟高,订单到达慢
  4. 交易所系统卡顿
  5. 订单数量太大,无法一次成交
  6. 价格波动太快,订单刚挂出去价格就走了

排查步骤

  1. 检查订单类型和价格
  2. 查看订单簿深度,看流动性情况
  3. 测试网络延迟
  4. 查看交易所状态
  5. 分析订单数量跟市场深度的比例

解决方案

  1. 如果是限价单不成交:改用市价单,或优化限价单价格(更激进)
  2. 如果是流动性差:更换交易对,或减小订单数量,分批成交
  3. 如果是网络延迟:更换服务器,优化网络
  4. 如果是订单太大:拆单,用冰山订单或TWAP算法分批下单
  5. 如果是价格波动快:用更激进的价格,或市价单

预防措施

  • 选择流动性好的交易对
  • 用智能下单算法(限价+超时撤单+市价兜底)
  • 监控订单成交时间和滑点,异常时告警
  • 不要在流动性差的时段(如周末、深夜)下大单

Q24:WebSocket连接频繁断开

问题描述:WebSocket连接经常断开,需要不断重连,影响数据实时性。

可能原因

  1. 网络不稳定
  2. 交易所WebSocket服务器不稳定
  3. 没有发送心跳包,被服务器断开
  4. 连接超时设置不合理
  5. 订阅的频道太多,数据量太大
  6. 防火墙或代理断开长连接

排查步骤

  1. 查看断开时的错误信息
  2. 检查网络稳定性
  3. 确认是否有心跳机制
  4. 检查订阅的频道数量和数据量

解决方案

  1. 增加自动重连机制(指数退避)
  2. 确保发送心跳包(通常每30秒一次)
  3. 优化订阅,只订阅需要的频道
  4. 调整超时设置
  5. 如果是网络问题:更换服务器或网络
  6. 如果是交易所问题:考虑备用数据源

预防措施

  • WebSocket客户端必须有自动重连
  • 有心跳机制
  • 监控连接状态,断开时告警
  • 关键数据有备用数据源(如REST轮询兜底)

Q25:服务器时间不同步

问题描述:API签名错误,或者数据时间戳对不上,排查后发现是服务器时间不准。

可能原因

  1. 没有配置NTP时间同步
  2. NTP服务没启动或配置错误
  3. 服务器虚拟化导致时间漂移
  4. 手动修改过时间

排查步骤

  1. 查看当前时间(date),跟标准时间对比
  2. 检查NTP服务状态(systemctl status ntp / chronyd)
  3. 检查时间同步状态(ntpq -p / chronyc tracking)

解决方案

  1. 安装并启动NTP服务(推荐chrony)
  2. 配置可靠的NTP服务器(如ntp.aliyun.com、time.windows.com)
  3. 手动同步一次时间(chronyc makestep)
  4. 设置开机自启

预防措施

  • 所有服务器都配置NTP时间同步
  • 监控时间偏差,超过1秒时告警
  • 不要手动修改服务器时间

Q26-Q35:其他系统类问题

Q26:服务器CPU使用率100%

  • 可能原因:死循环、计算量太大、日志写入过多
  • 排查:用top/htop定位进程,用py-spy分析Python程序调用栈
  • 解决:优化代码,增加sleep,减少不必要的计算

Q27:内存占用持续增长

  • 可能原因:内存泄漏、缓存无限增长、大对象未释放
  • 排查:用memory_profiler或objgraph分析内存使用
  • 解决:修复泄漏,限制缓存大小,及时释放大对象

Q28:磁盘空间满了

  • 可能原因:日志没轮转、数据文件没清理、core dump文件
  • 排查:du -sh /* 找大文件
  • 解决:配置日志轮转,定期清理旧文件,删除core dump

Q29:程序运行越来越慢

  • 可能原因:内存泄漏、数据量增长、日志文件太大、碎片
  • 排查:监控性能指标,分析慢的时间段
  • 解决:优化代码,定期重启,清理数据

Q30:部署新版本后出问题

  • 可能原因:新版本有bug、配置没更新、依赖变了
  • 排查:查看变更内容,回滚到上一个版本验证
  • 解决:回滚,修复bug后重新发布
  • 预防:灰度发布,先在模拟盘或小资金验证

Q31:API密钥被盗用

  • 可能原因:服务器被入侵、代码泄露、密钥存储不安全
  • 排查:查看API调用日志,看是否有异常IP或操作
  • 解决:立即禁用密钥,更换新密钥,排查服务器安全
  • 预防:密钥只存服务器,不提交代码,设置IP白名单,不开提现权限

Q32:交易所API维护期间策略异常

  • 可能原因:没关注维护公告,维护期间API不可用
  • 排查:查看交易所公告,确认维护时间
  • 解决:维护前暂停策略,维护后恢复
  • 预防:订阅交易所公告,维护前自动暂停

Q33:不同交易所的K线数据不一致

  • 可能原因:时间戳定义不同、数据来源不同、除权处理不同
  • 排查:对比同一时间点的K线数据
  • 解决:统一数据来源,或做数据对齐处理
  • 预防:用a-sig.com等统一数据源,避免直接用不同交易所的原始数据

Q34:订单状态不同步

  • 可能原因:网络延迟、订单状态推送丢失、本地状态跟交易所不一致
  • 排查:查询交易所订单状态,跟本地对比
  • 解决:定期同步订单状态,以交易所状态为准
  • 预防:用WebSocket推送订单状态,同时定期REST查询兜底

Q35:策略跟交易所断连后资金安全

  • 可能原因:断连后持仓还在,价格波动可能导致亏损
  • 排查:断连时的持仓和价格情况
  • 解决:断连后尽快恢复,或设置交易所端的止损单
  • 预防:关键止损单挂在交易所端(条件单),不依赖本地程序

三、风控类问题(15个)

Q36:风控触发后不知道为什么

问题描述:突然收到风控告警,策略被暂停或平仓,但不知道具体原因。

可能原因

  1. 风控日志不详细,只记录了触发,没记录原因
  2. 多个风控规则同时触发,分不清是哪个
  3. 风控阈值设置不合理,误触发
  4. 数据异常导致风控误判

排查步骤

  1. 查看风控日志,看触发的具体规则和数值
  2. 对比风控阈值,看是哪个指标超限
  3. 检查触发时的原始数据,是否有异常
  4. 分析触发时的市场环境和持仓情况

解决方案

  1. 完善风控日志,记录:触发时间、触发规则、当前值、阈值、持仓、操作
  2. 风控告警信息中包含具体原因和数值
  3. 如果是误触发:优化风控阈值,增加数据校验
  4. 如果是真实风控:分析原因,优化策略或风控

预防措施

  • 风控系统必须有详细日志
  • 告警信息必须包含具体原因
  • 定期复盘风控触发事件,优化风控规则

Q37:最大回撤超过预期

问题描述:回测最大回撤5%,实盘却出现了15%的回撤。

可能原因

  1. 回测没有包含极端行情
  2. 回测成本低估,实盘滑点大
  3. 实盘资金量大,冲击成本高
  4. 策略在实盘中表现跟回测差异大
  5. 多个策略同时亏损,组合回撤大
  6. 风控没执行到位(该止损没止损)

排查步骤

  1. 分析回撤期间的每笔交易,看亏损来源
  2. 对比回测和实盘在相同时期的表现
  3. 检查风控执行记录,看是否有该止损没止损的情况
  4. 分析回撤期间的市场环境
  5. 计算组合中各策略的贡献

解决方案

  1. 如果是回测不充分:重新回测,包含更多极端场景
  2. 如果是成本低估:提高回测成本假设
  3. 如果是资金量问题:降低仓位,或分批建仓
  4. 如果是策略失效:迭代或淘汰策略
  5. 如果是组合问题:优化策略组合,降低相关性
  6. 如果是风控执行问题:完善风控自动化,确保严格执行

预防措施

  • 回测必须包含极端行情压力测试
  • 用保守的成本假设
  • 严格执行风控,不抱幻想
  • 监控组合回撤,异常时及时减仓

Q38:止损单没成交或滑点巨大

问题描述:触发止损时,止损单没成交,或者成交价格跟预期差很多。

可能原因

  1. 用了限价止损单,价格跳空时无法成交
  2. 市场流动性差,深度不足
  3. 网络延迟,止损单下达慢
  4. 价格波动太快,止损单刚挂出去价格就走了
  5. 交易所系统故障

排查步骤

  1. 检查止损单的类型和价格
  2. 查看止损触发时的订单簿和成交记录
  3. 检查网络延迟和系统日志
  4. 分析当时的市场波动情况

解决方案

  1. 用市价止损单(确保成交,但可能滑点大)
  2. 或用"限价止损+超时撤单+市价兜底"的组合
  3. 止损单挂在交易所端(条件单),不依赖本地程序
  4. 选择流动性好的交易对
  5. 设置更宽的止损(避免在噪声中被止损),但控制仓位
  6. 极端行情下提前减仓,不要等止损

预防措施

  • 关键止损单挂在交易所端
  • 用市价止损或智能止损算法
  • 选择流动性好的标的
  • 不要在流动性差的时段重仓
  • 极端行情前主动减仓

Q39:杠杆仓位被强平

问题描述:合约仓位被交易所强制平仓,造成巨大损失。

可能原因

  1. 仓位太重,保证金不足
  2. 价格波动太大,保证金率快速下降
  3. 没有及时追加保证金
  4. 维持保证金率设置理解错误
  5. 交易所调整保证金率
  6. 网络断开,无法操作

排查步骤

  1. 查看强平记录,看强平时的保证金率和价格
  2. 分析强平前的仓位和价格变化
  3. 检查是否有追加保证金的操作
  4. 查看交易所保证金规则

解决方案

  1. 立即降低杠杆,控制仓位
  2. 设置保证金率告警,低于阈值时及时追加或减仓
  3. 用更低的杠杆(套利策略建议1-3倍)
  4. 预留足够的保证金,不要满仓
  5. 设置自动减仓机制,保证金率下降时自动减仓
  6. 关键操作不依赖网络(如设置条件单)

预防措施

  • 严格控制杠杆和仓位
  • 监控保证金率,设置多级告警
  • 预留足够的保证金
  • 不要用高杠杆做套利
  • 了解交易所的强平规则

Q40-Q50:其他风控类问题

Q40:单日亏损超过限制

  • 可能原因:极端行情、策略集中亏损、风控没执行
  • 解决:严格执行单日亏损限制,触发后暂停交易
  • 预防:分散策略,控制仓位,严格风控

Q41:单笔亏损超过限制

  • 可能原因:止损不及时、滑点大、仓位重
  • 解决:优化止损,控制单笔仓位
  • 预防:设置单笔止损,严格执行

Q42:持仓超过限制

  • 可能原因:代码bug、重复下单、手动加仓
  • 解决:增加持仓上限检查,超过时禁止开仓
  • 预防:自动化仓位管理,定期核对持仓

Q43:某个币种仓位过重

  • 可能原因:多策略同时交易同一个币种
  • 解决:增加币种级别的仓位限制
  • 预防:组合层面的仓位管理

Q44:某个交易所仓位过重

  • 可能原因:资金分配不均、策略集中在某个交易所
  • 解决:增加交易所级别的仓位限制,定期再平衡
  • 预防:资金分配管理

Q45:风控规则之间冲突

  • 可能原因:多个风控规则同时触发,操作矛盾
  • 解决:明确风控规则的优先级,冲突时按最严格的执行
  • 预防:风控规则设计时考虑冲突

Q46:风控误触发导致错过行情

  • 可能原因:阈值设置太严、数据异常
  • 解决:优化阈值,增加数据校验
  • 预防:定期复盘风控触发,优化规则

Q47:极端行情下风控失效

  • 可能原因:流动性枯竭、价格跳空、系统故障
  • 解决:极端行情前主动减仓,不依赖风控
  • 预防:压力测试,应急预案

Q48:策略之间风险传染

  • 可能原因:策略相关性高,同时亏损
  • 解决:降低相关性,控制组合仓位
  • 预防:组合层面的风险管理

Q49:人工干预破坏风控

  • 可能原因:手动加仓、手动取消止损、手动恢复交易
  • 解决:限制人工干预权限,关键操作需要审批
  • 预防:自动化为主,人工干预有记录和审批

Q50:风控系统本身故障

  • 可能原因:风控程序崩溃、数据异常、配置错误
  • 解决:风控系统高可用,有备用方案
  • 预防:监控风控系统状态,定期测试

四、资金类问题(10个)

Q51:跨所转账长时间不到账

问题描述:从A交易所转币到B交易所,过了很久都没到账,影响跨所套利。

可能原因

  1. 链上拥堵,转账确认慢
  2. 转账网络选错(如转错链)
  3. 地址填错
  4. 交易所处理延迟(充值审核、风控拦截)
  5. 金额太小,没达到最低确认数
  6. 交易所维护,暂停充值

排查步骤

  1. 在区块链浏览器上查询交易哈希,看是否确认
  2. 核对转账地址和网络是否正确
  3. 查看转出交易所的提现记录,看是否已转出
  4. 查看转入交易所的充值记录,看是否有待处理
  5. 查看交易所公告,是否有维护或风控

解决方案

  1. 如果是链上拥堵:等待确认,或下次用更高的手续费
  2. 如果是网络选错:联系交易所客服,看能否找回(可能找不回)
  3. 如果是地址填错:基本无法找回,只能吸取教训
  4. 如果是交易所处理延迟:联系客服催促
  5. 如果是交易所维护:等待维护结束
  6. 如果金额太小没确认:等待,或下次转足够金额

预防措施

  • 转账前仔细核对地址和网络
  • 先小额测试,确认没问题再大额转
  • 选择拥堵少的链(如BSC、Polygon,但注意安全性)
  • 预留足够的资金在每个交易所,不要频繁转账
  • 转账时设置合理的手续费
  • 重要转账在区块链浏览器上跟踪确认

Q52:交易所无法提币

问题描述:想把币从交易所提出来,发现提币功能被禁用或限制。

可能原因

  1. 交易所维护,暂停提币
  2. 账户风控限制(异常登录、可疑操作)
  3. KYC未完成或需要升级
  4. 提币额度限制(24小时额度)
  5. 交易所出现兑付危机(极端情况)
  6. 该币种暂时无法提币(钱包维护)

排查步骤

  1. 查看交易所公告,是否有维护
  2. 查看账户状态,是否有风控限制
  3. 检查KYC状态和提币额度
  4. 尝试提其他币种,看是否都不能提
  5. 联系客服确认原因

解决方案

  1. 如果是维护:等待维护结束
  2. 如果是风控限制:联系客服申诉,完成验证
  3. 如果是KYC:完成KYC升级
  4. 如果是额度限制:分批提币,或升级KYC提高额度
  5. 如果是兑付危机:尽快想办法转出,或通过其他方式(如C2C交易)变现
  6. 如果是单币种维护:换其他币种提,或等待

预防措施

  • 不要把所有资金放在一个交易所
  • 关注交易所公告和行业动态
  • 完成高级KYC,提高提币额度
  • 定期(如每月)测试提币功能是否正常
  • 选择信誉好、头部的交易所
  • 有备用的资金通道(如多个交易所、钱包)

Q53-Q60:其他资金类问题

Q53:账户资金对不上

  • 可能原因:订单未完全成交、手续费计算差异、资金费率、利息
  • 排查:导出交易记录,逐笔核对
  • 解决:以交易所记录为准,修正本地计算
  • 预防:定期对账,了解所有费用项目

Q54:借币利率突然升高

  • 可能原因:市场需求大、交易所调整利率
  • 解决:提前还币,或换利率低的交易所
  • 预防:监控借币利率,设置利率上限

Q55:资金费率突然变负

  • 可能原因:市场情绪反转、空头增加
  • 解决:评估是否继续持有,或平仓
  • 预防:监控资金费率预测,及时调整

Q56:充值地址变更

  • 可能原因:交易所升级钱包、币种合并
  • 解决:每次充值前获取最新地址
  • 预防:不要保存旧地址长期使用,每次都重新获取

Q57:转账手续费太高

  • 可能原因:链上拥堵、选择了高手续费的链
  • 解决:选择低手续费的链,或在拥堵少时转
  • 预防:比较不同链的手续费,选择合适的

Q58:C2C交易遇到问题

  • 可能原因:买家不付款、卖家不放币、纠纷
  • 解决:联系平台客服,保留证据
  • 预防:选择信誉好的商家,小额多次交易

Q59:法币出入金受限

  • 可能原因:银行风控、支付渠道限制
  • 解决:换银行卡或支付渠道
  • 预防:有多个出入金渠道

Q60:资金被冻结

  • 可能原因:司法冻结、交易所风控
  • 解决:联系冻结方,了解原因,配合调查
  • 预防:不参与洗钱等违法活动,资金来源合法

五、数据类问题(10个)

Q61:行情数据有缺失或异常

问题描述:K线数据有断档,或者价格突然跳到一个不合理的值。

可能原因

  1. 数据源故障
  2. 网络问题导致数据丢失
  3. 交易所数据异常(如测试单、错误报价)
  4. 除权/拆股/合并导致价格跳变
  5. 不同数据源的定义不同
  6. 时间戳错误导致数据错位

排查步骤

  1. 对比多个数据源,看是否都有问题
  2. 查看原始数据,确认异常值
  3. 检查时间戳是否连续
  4. 查看是否有除权等事件
  5. 查看交易所公告

解决方案

  1. 如果是数据源故障:切换到备用数据源
  2. 如果是网络问题:优化网络,增加数据缓存和补全机制
  3. 如果是异常值:增加数据清洗和异常值检测,过滤异常值
  4. 如果是除权:做除权处理,或用复权数据
  5. 如果是定义不同:统一数据定义,或做转换
  6. 如果是时间戳错误:修正时间戳,做时间对齐

预防措施

  • 有多个备用数据源
  • 增加数据校验层(范围检查、连续性检查、异常值检测)
  • 数据异常时告警,不要静默使用
  • 用a-sig.com等高质量数据源,减少数据问题

Q62:不同数据源的价格不一致

问题描述:从A数据源获取的BTC价格是30000,从B数据源获取的是30050,差了50刀。

可能原因

  1. 时间戳不同(不是同一时刻的价格)
  2. 交易所不同(不同交易所的价格本来就有差异)
  3. 价格类型不同(最新成交价?买一价?卖一价?中间价?)
  4. 数据延迟不同
  5. 某个数据源有异常

排查步骤

  1. 确认时间戳是否一致
  2. 确认是否是同一个交易所
  3. 确认价格类型是否一致
  4. 对比多个数据源,看哪个异常

解决方案

  1. 统一时间戳,用同一时刻的数据
  2. 统一交易所,或明确是哪个交易所的价格
  3. 统一价格类型(建议用中间价)
  4. 排除异常数据源

预防措施

  • 明确数据定义(交易所、价格类型、时间戳)
  • 用统一的数据源(如a-sig.com),避免多源不一致
  • 数据使用前做一致性校验

Q63-Q70:其他数据类问题

Q63:K线数据时间戳不对

  • 可能原因:时区问题、开盘时间定义不同
  • 解决:统一时区,明确K线开盘时间定义
  • 预防:用标准时间戳,做时区转换

Q64:成交量数据异常

  • 可能原因:交易所刷量、数据错误、单位不同
  • 解决:对比多个交易所,过滤异常值
  • 预防:了解数据质量,不盲目信任成交量

Q65:资金费率数据获取失败

  • 可能原因:API端点变更、参数错误、交易所不支持
  • 解决:检查API文档,修正参数
  • 预防:用a-sig.com统一获取资金费率

Q66:回测数据跟实盘数据不一致

  • 可能原因:回测用了复权数据,实盘是实际价格
  • 解决:统一数据处理方式
  • 预防:回测数据跟实盘数据用同一来源和处理方式

Q67:数据延迟太高

  • 可能原因:服务器地理位置远、网络差、数据源慢
  • 解决:更换服务器,优化网络,用WebSocket
  • 预防:监控数据延迟,异常时告警

Q68:历史数据不完整

  • 可能原因:交易所上线时间短、数据保存有限
  • 解决:用多个数据源拼接,或接受较短的回测期
  • 预防:用a-sig.com等有完整历史数据的平台

Q69:实时数据跟历史数据对不上

  • 可能原因:除权调整、数据修正、定义不同
  • 解决:了解差异原因,做相应处理
  • 预防:用同一数据源的实时和历史数据

Q70:数据存储占用太大

  • 可能原因:存储了不必要的高频数据、没压缩
  • 解决:只存需要的数据,压缩存储,定期清理
  • 预防:合理设计数据存储方案

六、运营类问题(10个)

Q71:告警太多,麻木了

问题描述:每天收到几十上百条告警,后来根本不看了,真正重要的告警也被忽略。

可能原因

  1. 告警阈值设置不合理,误报太多
  2. 告警级别没有区分,所有告警都一样
  3. 告警渠道太多,信息重复
  4. 没有告警聚合,同一问题反复告警
  5. 告警内容不清晰,不知道要不要处理

排查步骤

  1. 统计告警数量和类型,看哪些是误报
  2. 分析告警的处理率和有效率
  3. 检查告警级别和渠道设置

解决方案

  1. 优化告警阈值,减少误报
  2. 分级告警(信息/警告/严重),不同级别用不同渠道
  3. 告警聚合,同一问题只告警一次(或限流)
  4. 告警内容清晰,包含:时间、策略、问题、当前值、阈值、建议操作
  5. 定期(每周)复盘告警,优化规则
  6. 设置"静默期",非工作时间只发严重告警

预防措施

  • 告警系统设计时就考虑信噪比
  • 定期复盘和优化告警规则
  • 重要告警跟一般告警区分开

Q72:忘记检查策略,出问题很久才发现

问题描述:策略崩溃了或亏损了好几天,才发现。

可能原因

  1. 没有固定的检查习惯
  2. 告警没收到或被忽略
  3. 监控系统不完善
  4. 太忙了,顾不上

排查步骤

  1. 分析问题发生的时间和发现的时间
  2. 检查告警是否发送,是否被查看
  3. 检查监控系统是否正常

解决方案

  1. 建立固定的检查流程(每天早中晚各一次)
  2. 完善监控和告警,关键问题必须能及时通知
  3. 用监控看板,一眼就能看到所有策略状态
  4. 设置"心跳"机制,策略定期上报状态,超时没上报就告警
  5. 重要策略有专人负责

预防措施

  • 自动化监控为主,人工检查为辅
  • 关键问题必须有告警
  • 建立日常运营SOP

Q73-Q80:其他运营类问题

Q73:策略表现好就加仓,结果加仓后就亏

  • 可能原因:追高、策略进入衰退期、仓位管理不当
  • 解决:制定渐进式加仓计划,不要情绪化加仓
  • 预防:严格的资金管理,加仓有条件和计划

Q74:策略亏损就想改参数,改完更亏

  • 可能原因:情绪化调整、过度拟合短期数据
  • 解决:亏损时先分析原因,不要急着改参数;改参数需要回测验证
  • 预防:参数调整有流程,不是拍脑袋

Q75:多个策略管理不过来

  • 可能原因:策略太多、没有系统化管理
  • 解决:减少策略数量,聚焦核心策略;用统一的管理平台
  • 预防:策略上线有标准,不是想上就上

Q76:回测报告看不懂

  • 可能原因:指标太多、定义不清
  • 解决:学习常用指标,关注核心指标(年化、回撤、夏普、胜率)
  • 预防:用a-sig.com的标准化回测报告

Q77:团队协作混乱

  • 可能原因:没有明确分工、没有文档、没有流程
  • 解决:明确分工,建立文档和流程,用项目管理工具
  • 预防:团队管理规范化

Q78:策略代码丢失

  • 可能原因:没备份、服务器故障、误删除
  • 解决:用Git管理,远程仓库备份
  • 预防:代码必须有版本控制和备份

Q79:参数配置混乱

  • 可能原因:多个环境(回测/模拟/实盘)参数不一样,没管理好
  • 解决:用配置文件管理,不同环境不同配置,有版本记录
  • 预防:配置跟代码分离,有配置管理流程

Q80:不知道策略什么时候该淘汰

  • 可能原因:没有策略生命周期管理、没有失效判断标准
  • 解决:建立策略健康度评分,定期评估,不达标就迭代或淘汰
  • 预防:策略库管理,定期复盘

排错通用方法论

最后,总结一下通用的排错方法论,遇到任何问题都可以按这个思路来:

第一步:稳定情绪,不要慌

  • 很多时候问题没那么严重,慌了反而容易做出错误决策
  • 如果是紧急情况(如正在亏损),先止损(平仓或暂停),再排查

第二步:收集信息

  • 看日志:90%的问题在日志里有线索
  • 看数据:原始数据、中间结果、当前状态
  • 看时间线:问题什么时候开始的,之前发生了什么
  • 看变更:最近改了什么代码、参数、配置

第三步:定位问题

  • 从现象倒推原因,一步步缩小范围
  • 用排除法:先排除最不可能的原因
  • 用对比法:正常的时候跟异常的时候有什么不同
  • 用复现法:能不能在测试环境复现这个问题

第四步:解决问题

  • 先临时解决(止损、回滚、切换备用),再根本解决
  • 解决后验证:确认问题真的解决了,不是暂时掩盖
  • 记录解决方案:写下来,下次遇到直接用

第五步:复盘和预防

  • 分析问题的根本原因,不是表面原因
  • 制定预防措施,避免下次再犯
  • 更新文档和检查清单
  • 如果是共性问题,优化系统或流程

总结

这份排错指南涵盖了量化交易中最常见的80个问题,每个问题都有详细的排查思路和解决方案。但实际中的问题千变万化,不可能全部覆盖。最重要的是掌握排错的方法论,遇到问题时能有条不紊地分析和解决。

记住几个原则:

  1. 先止损,再排查:遇到紧急情况,先控制损失,再慢慢找原因
  2. 看日志,看数据:不要猜,用事实说话
  3. 不要盲目重启:重启可能掩盖问题,导致下次再犯
  4. 记录和复盘:每个问题都记录下来,变成团队的知识资产
  5. 预防胜于治疗:完善监控、告警、测试、检查清单,把问题消灭在萌芽状态

在壹信量化平台上,a-sig.com提供高质量的数据和回测工具,减少数据和回测类问题;intoquant.com提供专业的策略部署和运维服务,减少系统和运营类问题。如果你遇到无法解决的问题,可以联系壹信量化的技术支持团队,我们有多年实盘经验的工程师帮你排查和解决。

量化交易是一个不断踩坑、不断成长的过程。每个问题都是一次学习的机会,解决的问题越多,你的系统就越稳健,你的经验就越丰富。希望这份指南能帮你少踩一些坑,在量化交易的路上走得更稳、更远。

⚠️ 风险提示:本书内容仅为量化研究与知识分享,不构成任何投资建议。套利交易存在基差、费率、流动性、平台与极端行情等风险,历史表现不代表未来收益。投资有风险,入市需谨慎,请自主决策、量力而行。

💡 键盘 ←/→ 翻章 · T 键切换目录