一个双顶形态,在程序员眼里长什么样?答案是一串数组:[1, 5, 3, 5, 1]。不是收盘价,不是成交量,就是5个数字的起伏。Sofien Kaabar最近放出的这套方法,把技术分析里最玄乎的"盘感"彻底拆解成了可量化的数值模板。
这事有意思的地方在于:他没用什么机器学习,没跑神经网络,就靠最朴素的序列匹配,在随机生成的股价数据里找形态。听起来像大海捞针?确实就是大海捞针。但针捞上来之后,你能清楚知道它是真的结构还是纯属巧合。
把"杯柄形态"压缩成9个数字
Kaabar列了10种经典形态的数值模板。双底是[5, 1, 3, 1, 5],头肩顶是[1, 3, 2, 5, 2, 3, 1],圆弧底拉长到9个点:[5, 4, 3, 2, 1.5, 2, 3, 4, 5.5]。这些数字不代表具体价格,只代表相对高低——1是谷底,5是峰值,3是中间位。
关键设定:时间被压平了。模板里每个数字之间的间隔默认相等,不管实际K线是日线还是小时线。这牺牲了一部分精度,换来的是跨周期通用的可能性。同一个[1, 5, 4, 4.2, 4.0, 4.3, 6],放在日线叫牛市旗形,放在15分钟线也是牛市旗形。
形态识别的老问题在这里暴露无遗:什么是"足够像"?两个峰值高度差5%算双顶,还是10%才算?Kaabar的解法很粗暴——不设死规则,把模糊匹配交给相似度算法,让数据自己说话。
用随机漫步当"照妖镜"
测试数据的选择暴露了作者的谨慎。他没用真实股价,而是用几何随机游走(geometric random walk)生成合成序列,还加了波动率聚集(volatility clustering)——也就是那种"大跌之后跟着大波动"的真实市场特征。
为什么故意造出没有规律的数据?这是整套方法最狠的一招。如果算法能在纯随机序列里"发现"头肩顶,那说明识别标准太松,全是假阳性。反过来,如果随机数据里几乎扫不出形态,而真实数据里频繁出现,这个对比本身就有信息量。
生成代码很简洁:用GARCH模型(广义自回归条件异方差模型)模拟波动率变化,再叠加上正态分布的收益率。最终价格是对数收益率的累加指数。整个过程没有嵌入任何预设形态,"就像往水里扔颜料,看会不会偶然组成一幅画"。
相似度计算:欧氏距离的变通
具体怎么比?把股价序列切成滑动窗口,每个窗口归一化到和模板相同的数值范围,然后算欧氏距离。距离低于阈值就算匹配。这里没有深度学习,没有特征工程,就是小学数学级别的"两根线有多像"。
Kaabar自己承认:这不代表预测能力。形态出现和后续涨跌的因果关系,是另一个需要单独验证的命题。他现在做的只是"定位"——在噪声里标出哪些地方长得像教科书插图。
但恰恰是这种克制让方法有了实用价值。很多量化新手反过来的:先假设形态有用,再拼命调参直到回测漂亮。Kaabar的框架逼你先回答一个更基础的问题:你所谓的"双底",在数据里到底存不存在?
从模板到实战的断层
这套代码开源后,量化社区的反应分成两派。一派觉得终于有人把形态识别的基础设施建设清楚了,"至少知道自己在瞎猜还是真看到了什么"。另一派嫌太简陋,真实K线有影线、有跳空、有除权除息,压缩成5个数字损失太多信息。
两派都没说错。数值模板是起点,不是终点。Kaabar在文末留了个钩子:他做的Quant Atlas平台用了更复杂的多模型融合,这篇文章只是底层原理的演示。
有个细节值得玩味。他列的10个模板里,"牛市旗形"和"熊市旗形"的数值设计明显比经典形态更主观——[1, 5, 4, 4.2, 4.0, 4.3, 6]这种带小数的精细刻度,和双顶的整数序列风格不统一。这暗示模板本身也需要迭代优化,或许该用真实数据聚类出"市场公认"的形态定义,而不是交易员手绘的示意图。
如果让你用同样的方法定义"楔形整理"或"岛形反转",你会给那串数字赋什么值?
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.