来源:雪球App,作者: 贪婪的阿尔法,(https://xueqiu.com//)
本来对这类指标并不感冒,但既然网友有需求,那咱就做个改良。顺手发在了社区里,结果自然也没有激起什么水花。毕竟,这都几十年的指标了,要靠这玩意来挣钱。。。。。。
反正我是抱怀疑态度,只能说可以作为一个辅助指标进行参考吧。此外,因为这是一个平台自带的指标,已经提供了源码,所以倒是可以用它来做一个演示,示范一下我们应该如何对一个功能进行分析、实现和改良的过程。
前世今生
至于这个指标的来源,在平台自带的指标里就可以看到说明。
指标简介 神奇九转指标思想来源于技术分析领域著名大师汤姆·迪马克的TD序列,即连续9天收盘价高于(低于)前4天的收盘价,其后走势很可能发生转向。其核心功能为发现当前股价走势的拐点,提高抄底、逃顶的成功率。
指标逻辑 股价在上涨或(下跌)过程中连续9日达到触发条件会生成数列1、2、3、4、5、6、7、8、9,数列会依次标注在当日K线上方(下方)。只有当股价连续第六天达到触发条件时,数列才开始进行显示,依次显示1、2、3、4、5、6,当第七天依然达到触发条件时则显示7,如第七日未达到触发条件则前面6天的序号消失。第八日同第七日的显示逻辑一样。当第九天依然达到触发条件时,便形成了一个九转结构。而当第九日未达到触发条件时则前面8日的序号消失,九转结构不成立。股价上涨过程中形成的九转结构称之为上涨9结构,数字在k线上方,而股价下跌过程中形成的九转结构则称之为下跌9结构,数字在k线下方。
指标用法 神奇九转指标最核心的用法,就是帮助我们有效的逃离股票的顶部区域,精准把握股票的底部机会。当股价在运行过程中出现上涨9结构时,此时股价往往位于顶部反转区域,个股大概率面临反转下跌的风险,此时我们需要降低仓位规避风险。而当股价出现下跌9结构时,股价往往处于底部反转区域,个股大概率开启止跌反弹的走势,此时可考虑建仓或加仓,等待获利时机。
如果你看了这个说明,觉得这只是一个普通的指标,那可就大错特错了。
要知道,汤姆·迪马克这类人物,都有自己的公司,而他公司的产品之一,就是售卖一系列的指标。
可以看到,在售卖的一系列指标之中,排名最靠前的三个就是与神奇九转类似的指标。
当然了,作为发明人,售卖自己的指标自然是无可厚非。但是这里的一个关键点是:在TradingView平台,如果你发布这种指标,就会被 DeMARK 公司投诉下架。
是这里面涉及的技术实现有多难吗?当然不是,下面是我在TradingView平台实现的神奇九转效果,还支持对上涨结构、下跌结构中各个数字颜色的设置以及数字大小的设置。
可以和平台自带的神奇九转做个对比。同样是$苹果(AAPL)$ ,同样的时间段,可以看到效果是一致的。
所以这里涉及的其实是版权的问题,你自己使用没有问题,但放平台上售卖,DeMARK 公司就会找过来了。
实现过程
要实现这个指标,首先来梳理一下它的核心逻辑。
用当日的收盘价与四天前的收盘价进行比较,如果当日收盘价大,则为高九结构的第一个起始点。然后继续比较,如果下一个交易日的收盘价不满足条件,则重新开始计数。如果此种大小关系仍能成立,则为高九结构的第二个点、第三个点,直到第九个点。直到真的连续出现了九个点,才能显示这些数字。
同理,低九结构也是同样的过程,只不过判断的条件是:当然收盘价比四天前的收盘价小。
然后还有一个特殊的处理,如果是最后一根K线,那么就不再要求其必须连续出现了九个点,只要是连续出现,且大于五个点即可。
有了核心逻辑,那么就可以来想象一下如果是手动标记这些点,应该如何实现。
第一步,条件判断
比较当前收盘价与四天前收盘价的大小关系,来决定表数字标记在K线上方还是下方。
第二步,累计天数
核心逻辑中的一个关键要求是:连续,所以在上一步我们做的标记实际上很有可能并不是最终的标记,因为可能它连续八天出现了收盘价大于四天前收盘价的情况,但偏偏第九天就没有满足,那么只能把八个连续的数字删除掉。
第三步,特殊情况
在历史行情中,如果没有连续出现九次就不会显示,但如果已经是最后一根K线,虽然不够九次,也应该显示。
第四步,标记数字
有了满足条件的序列,接下来就可以标记数字了。为了让可能存在反转的时间节点更直观,可以把高九结构显示在K线上方,同时把数字9设置成与其它数字不一样的颜色,对于低九结构也做同样的设置。
代码详解
理解了上面的逻辑,我们就可以结合平台提供的代码来看一下具体的实现。
第一步,条件判断
C1 := C < REF(C, 4);
通过 REF 函数直接实现两个收盘价的比较。
第二步,累计天数
NT0 := BARSLASTCOUNT(C1);
这里用到了一个特殊的行数:BARSLASTCOUNT,它实现的功能是计算连续满足条件的次数。
第三步,特殊情况
对于普通的情况,也就是在历史行情中,需要连续出现九次,因此也就要求上面的 NT0 等于 9,所以就有了这行代码。
TJ21 := NT0 = 9;
而对于最后一根K线的特殊情况,那就需要使用 ISLASTBAR 进行判断。
所以就有了下面的代码。
TJ23 := ISLASTBAR AND BETWEEN(NT0, 5, 8);
即要求是最后一根K线,同时条件成立的次数在5到8次之间。这里用到了 BETWEEN 函数,逻辑与SQL中是不一样的,这里是开区间。
第四步,标记数字
这里到了最困难的一步。因为做这样一个判断:是否连续出现了九次,或者在最后一根K线时连续出现了5到8次?如果是,则在前面对应的K线上标记数字。
没错,这里的难点在于:当某个K线满足条件时,则前面N个K线都满足。还好,在通达信中有专门的函数来支持这种特殊的处理。
所以再来看这行代码,是不是就很好理解了呢。
AY1 := (BACKSET(TJ21 > 0, 9) OR BACKSET(TJ23 > 0, NT0)) * NT0;
至于为什么还要再乘以 NT0,因为中间两个 BACKSET 只要有一个满足,前面的表达式的值就是 1,否则是 0,这样再和 NT0 相乘就得到了每个满足条件的K线上应该显示的数字。
有了具体要显示的数字,那么自然,直接调用 DRAWNUMBER 函数显示数值即可。当然,为了达到更醒目的效果,还要做变色处理,所以,对于小于九的数字,使用下面的代码进行显示。
DRAWNUMBER((AY1 > 0 AND AY1 < 9), L, AY1, 0, -15), COLORGREEN;
然后,对于数字 9,再换一个醒目的颜色进行显示。
DRAWNUMBER(NT0 = 9, L, 9, 0, -15), COLORFF00FF;
优化改进
对于这个指标,我们只需要多切换几个股票,就会发现明显的问题。在一段明显的上涨趋势中,高九之后可能会继续高九。同样,在一段明显的下降趋势中,低九之后还会低九。
因此,这个指标实际上只是说观察到了一种现象:连续出现了当日收盘价比四天前收盘价高/低的情况,至于说高/低九之后就会出现反转,那就属于无稽之谈了。
所以,必须结合其它指标进行验证这种背离的有效性,比如MACD。
还有就是,既然它观察的是一种现象,那为什么不一直显示到条件消失的时候呢?所以我们完全可以让它在大于9之后就开始变色,然后只要条件满足就一直显示。
$特斯拉(TSLA)$
$拼多多(PDD)$
那么如何才能实现上面的效果呢,下面我们就对平台自带的代码做一些改造。
自带的代码不知道是从哪儿抄来的,变量名起的并不规范,代码写的呢,也不规范。
首先,代码虽然是给机器用的,但也是给人看的,变量名要起的有意义,要有必要的缩进、空格。当然了,成心不想让别人看懂那自然另说。
其次,判断数值是否位于某个区间,要么就都用 BETWEEN ,要么就都自行判断,这有的地方自行判断,有的地方用 BETWEEN,实现上不统一。
最后,标记数字时,为了不遮挡影线,数字的显示位置应该都偏移相同的比例,这样才会有一个比较好的显示效果。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/14073.html