制度匹配多策略投资组合架构 | AI生成和翻译
问题: 解释我的多策略交易机器人的架构和逻辑——三种策略跨越五种工具,并共享一个风险层。
回答:
你的机器人是一个经典的制度匹配投资组合:每种策略与其市场的统计行为配对,一个共享的风险层将它们全部标准化为可比较的投注。以下是系统的逐层解析。
1. 为何每种策略适配其工具
核心洞察是不同时间尺度上的收益率自相关性:
- 指数ETF(SPLG/QQQM)日内表现出负的短周期自相关性——过度延伸往往会回弹。因此你逆势操作极端行情(均值回归)。
- 比特币(IBIT) 表现出正自相关性——新高之后往往跟随更多高点。逆势操作比特币过度延伸会让你受损;跟随突破则有效(动量策略)。
- 商品(GLD/USO) 存在趋势,但缓慢且带有噪音。4小时SMA交叉是一个低通滤波器:它忽略日内震荡,仅在中长期趋势实际转向时触发信号(趋势跟踪)。
你本质上是在信号类型上分散投资,而不仅仅是交易品种。均值回归和趋势跟踪在历史上具有低或负的收益率相关性——当震荡消灭趋势策略时,回归策略获利;当强劲趋势消灭回归策略时,趋势策略获利。
2. 三个信号引擎
均值回归(z-score):
def zscore_signal(closes, n=20):
mu = closes[-n:].mean()
sigma = closes[-n:].std()
z = (closes[-1] - mu) / sigma
if z <= -2: return "BUY" # 低于均值2个标准差:统计上超卖
if z >= 0: return "SELL" # 回归至均值:优势已耗尽
这种非对称性很关键:你在-2σ入场,但在0离场,而非+2σ。你仅收割回归部分,不押注超越均值的持续走势。这保持了较短的持仓期,避免过度停留。
动量突破(唐奇安通道):
def donchian_signal(highs, lows, close):
if close > highs[-21:-1].max(): return "BUY" # 突破前20根K线高点
if close < lows[-11:-1].min(): return "SELL" # 跌破前10根K线低点
非对称通道(20根入场/10根离场)是刻意设计的:入场缓慢(确认突破真实有效),离场快速(趋势消亡时回吐更少)。这是经典的 Turtle 式结构。
趋势跟踪(双SMA):
def sma_trend_signal(closes):
fast, slow = closes[-20:].mean(), closes[-50:].mean()
if fast > slow and closes[-1] > slow: return "BUY"
if fast < slow: return "SELL"
额外条件 价格 > 慢速SMA 过滤掉了交叉发生但价格已开始回落时的入场——这是一个廉价的震荡过滤机制。
3. 风险层——真正的工程所在
基于ATR的1%仓位规模 即波动率标准化:
risk_dollars = 0.01 * equity
stop_dist = 2 * atr14
shares = risk_dollars / stop_dist
由于 stop_dist 随波动率缩放,一个平静的工具(GLD)获得大仓位,而一个剧烈波动的工具(IBIT)获得小仓位——但两者在触发止损时恰好亏损净值的1%。在风险空间中,每笔交易都是相同大小的投注。这使得一个包含5种工具、3种策略的投资组合保持连贯:各仓位是可比较的单位。
在经纪商处设置GTC止损单 将风险执行与机器人运行状态解耦。由于你在GitHub Actions上运行(可能延迟、受速率限制或停机),止损单驻留在经纪商服务器端意味着1%上限不依赖于你的定时任务触发。这是设计中最重要的可靠性决策。
相关性过滤器(SPLG/QQQM/IBIT最多2个多头):这三个都是风险偏好型资产——在避险冲击中它们会同步下跌,因此三个“独立”的1%投注实际上是一个约3%的投注。上限设为2限制住了相关回撤。
无杠杆、95%现金上限、每个工具25%仓位上限:硬性护栏确保任何仓位规模错误、ATR崩溃(小ATR导致大股数)或信号堆积不会突破合理风险敞口。25%上限特别防范了ATR仓位规模失效模式——低波动率导致巨大仓位。
4. 执行模型及其优势
引擎每15分钟唤醒一次,评估全部五种工具,仅对新出现的信号转换执行操作——即采用边沿触发而非电平触发。这防止了每个周期重复进入同一信号。
本设计中值得关注的事项:
- K线收盘对齐:你的1小时(IBIT)和4小时(GLD/USO)策略每4至16个周期才有一次新信息。确保机器人仅基于已收盘的K线评估它们,否则SMA/唐奇安值会在K线内部闪烁,产生虚假信号。
- 跳空风险:GTC止损单在止损价格处限制风险,而非1%处。隔夜跳空穿过止损价(尤其是跟踪24/7比特币交易但受限于美国交易时段的IBIT)可能会亏损超过1%。这里的25%仓位上限才是你真正的极端情况边界。
- GitHub Actions抖动:计划的工作流可能延迟几分钟执行,或在负载下被跳过。由于止损单在经纪商处,这仅延迟基于信号的入场/离场,不影响风险执行——这是正确的失效模式。
- σ趋近于零时的z-score:在极度平静的交易时段,20根K线的标准差可能变得极小,导致z-score爆炸。一个最小σ下限可避免在噪音中产生虚假的-2σ入场信号。
一行总结
三种不相关优势类型(逆势/突破/趋势),每种匹配其市场的自相关性制度,全部通过ATR仓位规模标准化为相同的1%风险单位,并设置经纪商端止损单——即使机器人未运行,风险依然可控。
由于涉及真实资金,需注意:我不是财务顾问,这里任何内容均不声称这些优势当前能够盈利——上述解释涵盖的是机械原理和工程稳健性,这两方面是可靠的。至于实证问题(这些信号在扣除费用/滑点后、在15分钟粒度上是否仍具备优势?)只能通过你的回测和实盘成交数据来回答。