C++ 缠论插件的实现思路与架构拆解
缠论这类技术分析方法,人工看图时靠经验,落到程序里就得把'看起来像'拆成一组可计算的规则。这个插件用 C++ 做自动化分析,重点不是把概念讲漂亮,而是把高低点、中枢、周期联动这些东西稳定地算出来。
算法怎么落地
缠论分析的核心是识别价格运动里的结构重复。实现时,插件会持续追踪高低点序列,再据此判断中枢是否成立、区间是否有效。说白了,它做的是把 K 线图里的主观判断收紧成确定的计算流程。
这套实现里有几个比较关键的点:
- 用双端点追踪价格波动,及时更新关键高低位
- 用状态机维护中枢识别过程,避免前后逻辑断裂
- 把不同周期分开计算,再做时间轴对齐
这种做法不花哨,但好处是结果更稳定,调试起来也更直接。
中枢识别是核心
传统缠论分析里,最费时间的就是在线段和中枢之间来回确认。插件里用 CCentroid 结构来保存中枢状态,包含高低点索引、价格边界、线段数量和起止位置:
struct CCentroid {
bool bValid; // 中枢有效性标志
int nTop1, nTop2; // 高点索引序列
int nBot1, nBot2; // 低点索引序列
float fTop1, fTop2; // 高点价格序列
float fBot1, fBot2; // 低点价格序列
int nLines; // 线段数量统计
int nStart, nEnd; // 中枢起始和结束位置
float fHigh, fLow; // 中枢区间上下边界
};
这类结构的价值在于,后续无论是画图还是输出信号,都可以直接读状态,不需要每次重新扫一遍历史数据。
多周期分析怎么处理
插件支持 5 分钟、30 分钟、日线等周期同步分析。每个周期自己跑一套中枢识别,互不干扰,再通过时间轴做对齐。这样做的好处是,短周期的噪声不会直接污染长周期判断,反过来也能避免只看大周期而忽略局部结构。
架构拆开看更清楚
整体是典型的分层思路:
- 核心算法层:
CCentroid负责中枢识别 - 接口适配层:
FxIndicator处理通达信通信协议 - 主控协调层:
Main负责调度各个模块
这种拆法的好处不难理解。算法改动时尽量不碰接入层,接入层换平台时也不用重写核心逻辑。对插件来说,这比把所有东西揉在一起更省后续维护成本。
性能上做了什么
这里没有追求复杂优化,思路比较务实:能提前固定的数据就固定,能线性处理的就别回头扫。
| 优化类别 | 具体措施 | 效果提升 |
|---|
