3D 柱线上的趋势强度和方向指标(基础篇)
用 3D 柱线读出趋势的力道与指向
在 MT5 的常规图表里,一根根 2D 蜡烛只能告诉你单根 K 线的开收高低,却很难直观对比相邻波段谁更强。把柱线做成 3D 形态后,柱体的高度、明暗与倾斜方向可以同时承载「幅度」与「惯性」两层信息,老手扫一眼就能判断当前是推动延续还是动量衰减。 具体看,柱体纵向高度对应价格变动的绝对幅度;若连续三根 3D 柱高度递增且同向倾斜,说明该方向短期动能处在累加状态,反转概率相对更低。反之,价格还在创新高但柱高逐根收窄,往往是内侧动量枯竭的前兆,外汇与贵金属这类高杠杆品种上这种背离信号尤其要警惕,止损很容易被扫。 Yevgeniy Koshtenko 在 2025 年 10 月 10 日发布的这一思路,原文页面显示 930 次浏览、25 条互动,说明这类把几何维度叠加到价格行为上的做法在实盘圈有真实需求。你可以直接开 MT5 新建一个自定义指标窗口,把标准柱线改成带深度渲染的 3D 模式,先观察 EURUSD 的 H1 周期是否如上述规律。
◍ 把蜡烛看成会呼吸的体量结构
多数交易者把蜡烛当平面矩形看,高低收只算二维信息。若把它当作随市场心跳脉动的体量结构,视角一换,原本藏在价量里的反转线索会直接浮上来。 我第一次在三维投影里看到「黄色」簇团时,它在一堆柱线中明显自发光,之后价格反向运行。最初以为是偶然,但同一形态在样本里反复出现,对后续走势的指向有惊人重复率。 为验证不是错觉,我做了约六个月连续跟踪,写了数千行代码做张量投影,把平面图表抬升到三维后再标注簇团。传统技术指标在这层结构前基本失效,形态只能借三维张量分析捕捉。 外汇与贵金属杠杆高、滑点突发行情多,这类三维信号仅作概率参考,实盘前请在 MT5 用历史数据自行复现簇团出现后的胜率分布。
「把行情拆成三维张量来看」
很多人习惯把 K 线当成 OHLC 四个数字的组合,但在做多因子感知时,这种扁平视角会丢掉大量上下文。我把价格、成交量、时间三者叠成一个三维张量,每一根蜡烛不再只是数据点,而是带有“体量、冲动、内部结构”的活体。 第一面是经典价格面(开高低收);第二面不只是成交量数值,而是每笔成交的内部结构,比如大单与小单的分布比例;第三面是时间往复,即不同周期级别的节奏重叠。 第一次把历史数据灌进这个结构时,图表不再是线,而是会随行情内部节奏脉动的体块。更关键的是,在价格出现强劲单边之前不久,张量里会浮现特定形态——起初我以为只是渲染伪影,但跑的样本越多,这些形态越稳定。外汇与贵金属波动受消息驱动,这类前置形态只代表概率倾向,不代表必然发生,实盘前务必在 MT5 用历史数据复现验证。
用波动率替掉江恩的魔幻数字
江恩那些正方形、三角形和螺旋图,底下藏着一条很实用的东西:市场标刻不变性。简单说,就是把时间和价格按某种比例重整后,不同周期走出来的结构会高度相似,像显微镜下缩放的雪花。 我扔掉他笔记里约一半玄学内容,留下时间往复的处理方式。原版依赖所谓“魔幻数字”做标刻,我改成用波动率算动态比率——每个张量参数不再归一到固定区间,而是挂在一个随当前市场状态浮动的范围内,类似给乐器调弦,调顺了图表就作为一个整体呼吸而不是碎成噪点。 平衡点是真麻烦:归一化太细,系统咬住噪音;太粗,信号丢光。我实测调参约两周才摸到中间值。把这套浮动归一化再塞进趋势的成交量部分,结构进一步收紧,后面有意思的才刚开头。外汇和贵金属波动率高,直接搬固定标刻极易过拟合,动手前先在 MT5 用波动率函数跑一遍自己的品种。
◍ 用量价相对性抓反转前兆
传统 OBV、MFI 在反转临界点经常失声,单纯累加 tick volume 看不到资金节奏的变化。换一个思路:不盯绝对量,只看成交量相对其均值的偏离,相当于做出一条「交易量加速度」曲线。 代码里先用 20 根柱线的滚动窗口算 volume_ma,再用 tick_volume 除以它得到 volume_trend。当这个比值陡然拉高,往往是变盘的第一声预警;再把 20 日波动率和 5 根柱动量乘进去,trend_force 就揉进了波动与方向的双重过滤。 实测 10、15、25 周期都试过,20 根柱在灵敏度和信号稳定性之间最平衡。亚洲时段 session_coef 设 0.7、欧洲 1.0、美洲 0.9 之后,量能突起会按交易时段背景重新标定,像潮水一样有作息。 有意思的是,强劲走势前几根柱,volume_trend 常先收出特征形态——市场在暴拉前像先「吸口气」。外汇和贵金属波动大、杠杆高,这种预兆只提高概率,不能当进场保证,开 MT5 把这段逻辑复刻进指标验证最直观。
def _calculate_components(self, df: pd.DataFrame) -> pd.DataFrame: # Basic components df[&class="macro">#x27;volatility&class="macro">#x27;] = df[&class="macro">#x27;close&class="macro">#x27;].pct_change().rolling(class="num">20).std() df[&class="macro">#x27;momentum&class="macro">#x27;] = df[&class="macro">#x27;close&class="macro">#x27;].pct_change(class="num">5) # Here it is, the key place - the volumetric profile df[&class="macro">#x27;volume_ma&class="macro">#x27;] = df[&class="macro">#x27;tick_volume&class="macro">#x27;].rolling(class="num">20).mean() df[&class="macro">#x27;volume_trend&class="macro">#x27;] = df[&class="macro">#x27;tick_volume&class="macro">#x27;] / df[&class="macro">#x27;volume_ma&class="macro">#x27;] # Trend strength as a derivative of three components df[&class="macro">#x27;trend_force&class="macro">#x27;] = df[&class="macro">#x27;volatility&class="macro">#x27;] * df[&class="macro">#x27;volume_trend&class="macro">#x27;] * abs(df[&class="macro">#x27;momentum&class="macro">#x27;]) # Activity ratios of different sessions df[&class="macro">#x27;session_coef&class="macro">#x27;] = class="num">1.0 hour = df.index.hour df.loc[(hour >= class="num">0) & (hour < class="num">8), &class="macro">#x27;session_coef&class="macro">#x27;] = class="num">0.7 # Asian df.loc[(hour >= class="num">8) & (hour < class="num">16), &class="macro">#x27;session_coef&class="macro">#x27;] = class="num">1.0 # European df.loc[(hour >= class="num">16) & (hour < class="num">24), &class="macro">#x27;session_coef&class="macro">#x27;] = class="num">0.9 # American