这是一个围绕红利低波100指数的交易规划小工具,核心决策逻辑由 Decide(input, current) 提供。它根据当前指数点位、120 日均线、20 日均线以及当前仓位状态,返回本次应执行的操作建议。
Decide 的核心思路是分三段处理:
- 当指数相对 120 日均线偏离不大时,继续持有观察。
- 当指数进入高位区间时,按预设阈值分两步减仓。
- 当高位阶段结束并出现回落确认后清仓,随后等待深度回撤再重新满仓。
IndexValue:当前指数点位。MA120:当前 120 日均线。MA20:当前 20 日均线。State.Position:当前仓位状态。State.HighPhase:是否已经进入过高位阶段。
其中仓位的固定含义如下:
1.0:满仓2/3:第一次减仓后1/3:第二次减仓后0:空仓
策略按下面的顺序判断:
- 先计算 120 日乖离率:
biasPct = (IndexValue / MA120 - 1) * 100。 - 如果当前已经是空仓,则不再执行减仓或清仓逻辑,只判断是否满足重新满仓条件。
- 如果 120 日乖离率达到或超过
8%,策略进入高位阶段;若当前仓位高于2/3,则减仓到2/3。 - 如果 120 日乖离率达到或超过
10%,且当前仓位仍高于1/3,则进一步减仓到1/3。 - 只有在已经进入过高位阶段之后,若指数跌破
MA20,才触发清仓。 - 清仓后进入空仓状态;只有当指数低于
MA120 * 0.97时,才重新满仓。
当 biasPct < 8% 时,默认不触发新的交易动作,继续持有观察。
当 biasPct >= 8% 时,说明指数已经进入高位阶段,HighPhase 会被置为 true。
如果此时当前仓位高于 2/3,则建议先减仓到 2/3。
当 biasPct >= 10% 时,如果当前仓位仍高于 1/3,则建议继续减仓到 1/3。
这一步只会发生在前一步减仓之后仍有更高仓位,或者外部传入的当前仓位本来就高于 1/3 的情况下。
只有在此前已经出现过高位阶段,也就是 HighPhase = true 的前提下,指数跌破 MA20 才被视为卖出剩余仓位的确认信号。
满足这个条件时,策略建议清仓,并把仓位更新为 0,同时把 HighPhase 重置为 false。
当当前仓位已经是空仓时,策略只看是否满足重新进场条件。
如果 IndexValue < MA120 * 0.97,则认为已经出现足够回撤,建议重新满仓,同时把 HighPhase 重置为 false。
如果还没有跌到这个位置,则继续保持空仓等待。
Decide 可能返回以下动作:
hold:继续持有或继续空仓等待,不执行新的买卖动作。reduce_to_2_3:减仓到2/3。reduce_to_1_3:减仓到1/3。clear_all:清掉剩余仓位。reenter_full:从空仓重新买回到满仓。
- 当
biasPct >= 8%时,会进入高位阶段,HighPhase变为true。 - 进入高位阶段后,不代表立刻清仓;只有后续跌破
MA20才清仓。 - 清仓后,
Position变为0,HighPhase重置为false。 - 重新满仓后,
Position回到1.0,HighPhase也保持为false,等待下一轮高位信号。
- 这个函数返回的是“当前时点的操作建议”,并不强制规定必须在同一时点成交。
- 是否在次日执行、是否接入实际交易系统,由调用方自行决定。
- README 的说明以当前代码实现为准;如果后续修改了
Decide逻辑,文档也应同步更新。