这一篇我来讲一下通达信公式的句式。文中我也会频繁的回顾第一个公式“多头吞噬”,以其做一个例子(有可能是反面例子),同时也会用到KD指标这个公式。所以,如果第一次看我的这个系列文章,可以先看一下《通达信公式(概论):第一个公式》,同时了解一下KD指标。
前一篇说到句式是通达信公式的骨架,通达信公式有它固定的表达方式,比如我们的语言中有陈述句、疑问句、感叹句等等。而电脑不会有带感情的感叹句,也不会有模棱两可的疑问句,只有陈述句。你要问现在不是有AI吗,说句话就可以选股了?朋友,通达信只是一个炒股软件,公式只是一个配套工具,AI、人工智能这些就不要想啦。外面呢,同花顺的i问股在这方面做的还可以,不过离智能还有一定的距离,只是减少了部分写代码的过程,而且不一定能满足大家的投资策略。我实践总结下来,通达信公式的句式主要分为以下三种:赋值语句、输出语句、条件语句。赋值语句是为了产生中间变量而存在,比如我们有个策略要用到收盘价除以开盘价(不是涨幅,涨幅是收盘价除以前一日收盘价),通达信没有直接结果,但可以用通达信公式系统基础函数O和C,进行计算得出。虽然计算出一个数据,但这个数据若没有输出(形成技术指标)或者应用在条件(条件选股、五彩K线、专家系统)中是没有意义的。输出语句则在技术指标公式中应用较广,输出一个数据,比如近10个交易日收盘价的平均值,输出到K线图上就是我们看到的10日均线。条件语句则在技术指标公式,条件选股公式、专家系统公式、五彩K线公式中均有应用,是句法中的核心。所以条件选股语句是本篇的重头戏,也是学好通达信公式必须能灵活应用的内容。赋值语句,顾名思义就是自己定义一个变量,并给这个变量赋予一个数值。大家可能会有疑问,就是通达信公式调用的数据既然已经是通达信公式的默认函数了,为什么还需要这个赋值语句呢?上面简单说了一个案例,就是收盘价除以开盘价,大家想一想,有没有点眼熟。不错,我们在第一个公式:多头吞噬中用过,主要是给K线实体长度进行量化,用这个值减去1,再取绝对值,就可以得出这根K线的相对长度是几个点,比如大于5%我们就把他称做大阳线、大阴线,1%以下,就是小阳线、小阴线。但是我们注意,这个指标是K线策略才会重点关注的指标,如果你用KD指标而不怎么看K线,那么大概率不会用到这个数据。换句话说,不同的策略可能会用到很多定制化的数据,如果针对每个策略的数据都做到函数中,通达信只能说:虽然通达信做不到,但实际上这也没必要,比如上面的那个阳线长度就可以用通达信的基础函数(C和O)加工而成,对吧。因此,我们想要通达信公式系统为我所用,极大可能需要通过基础数据加工属于自己的数据。接下来我们来用KD指标的公式讲解一下赋值语句。下图是通达信中内置的KD指标函数,在公式管理器——技术指标中可以找他:
双击KD公式后就进入公式编辑器,看到KD指标的公式如下:
KD指标公式的第一句就是典型的赋值语句,我们可以看到赋值语句的标准格式是:“:=”前面是我们自定义的变量名,随便取,但为便于使用,最好选取变量中文名称的缩写,比如K线长度,我们可以取名KXCD,而KD指标是国外传来的,所以RSV用的是英文单词Raw Stochastic Value(未成熟随机值)的首字母,后面的公式语句中就可以直接调用,比如K值就用到了RSV这个变量。“:=”后面就是这个变量的计算公式,计算完成后将数值赋予变量名,这就是赋值公式的由来。RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;RSV赋值:(收盘价-N日内最低价的最低值)/(N日内最高价的最高值-N日内最低价的最低值)*100接下来用人话翻译一下:由于N值一般用的是9,我就按9来翻译:未成熟随机值就是当前周期收盘价在9天内最高点和最低点的相对位置。因为K值,D值是对RSV均值平滑处理,所以KD指标的超买超卖精髓,实际上就是近期股价在9日中最高价和最低价之间的位置,离最低价近一点,就处于超卖状态,而离最高价近一点就处于超买状态。再说简单点,KD指标就是跌多了就看多,涨多了就看空。曾经多么神奇的KD指标,我们一拆开来,其实也没什么神秘的对不对,竟然这么简单。所以说,学好公式,能够破除很多神奇公式的迷信,让我们能够把握指标的本质,而不是被胡里花哨的包装所迷惑。(很多所谓量化投资策略,说开来也很简单,但是用Python语言这么一写,加点什么神经网络,机器学习的概念,看似高大上,实际可能追溯到根本就是涨多了卖,跌多了买而已)。看到这里,你可能会有点纳闷:不对啊,按照你的格式,你的这个多头吞噬公式里面哪里有赋值语句啊。我上面说了,赋值语句实际上是一个中间语句,一个公式中可以没有赋值语句,比如在KD指标中,我们可以完全不用RSV这个中间变量,直接这么写,效果也是一样的。这么说吧,我刚开始学公式的时候,虽然我经常用到一些加工后的数据,但却没有使用赋值语句,就像之前多头吞噬的公式,一股脑写在一句公式当中。看这个多头吞噬公式,虽然我写了三行,但实际上他是一个句子,只有一个分号。这一句话用三个AND连接了起来。REF(C,1)<REF(O,1) AND REF(O,1)/REF(C,1)>1.005 AND C>O AND C>REF(O,1) AND O<REF(C,1) AND C/O>1.01;这样写公式的结果就是,造成单句语句特别长,长的句子会有一个问题,就是万一里面出错了,通达信只提示这一句有问题,然后我就找啊找,找了半天,发现少了个括号!别笑,当你用带参数的函数比较多的时候,三四个括号叠加在一起时很常见,到时候数括号数的眼花,早期我就深受其害,更何况很多公式远比这个复杂。所以,我们把K线实体长度写成一个变量试试:K线长度KXCD:=ABS(1-C/O)(1减去收盘价和开盘价的比值再取绝对值)。在这个公式中,虽然篇幅似乎还多了,但是如果提示第二句有错误,我们就没必要再去看这个实体长度的描述有没有问题。而且有了这个实体长度的变量公式,以后只要我们还用到实体长度这个变量直接调用就可以了。看到这儿,有没有朋友看出我们修改后的多头吞噬还有一点小问题呢?对了,就是每句最后不要忘了分号,KXCD赋值之后,没有点分号。这下我们就真正完成了,如果你自己编写的公式句子比较多,特别是很多中间变量要写成赋值语句,那一定记住,不要忘了每句后面的分号。(1)赋值语句是中间语句,一个公式中可以视其复杂程度,不用赋值语句。同时一句赋值语句,也无法是一个独立的公式,也就是说,只有赋值语句的公式是没有意义的;(2)当我们主要使用一类指标时,比如K线,则有必要对一些本策略体系常用的中间变量(比如K线实体长度)用赋值语言进行标准化,方便后面我们其他的公式使用;(3)使用赋值语句能够有效地降低单句语句的复杂程度,降低我们检查bug的难度。宽客吧为专注交易型指数基金(ETF)研究,重点围绕ETF产品,打造ETF一、二级市场资讯及投研平台,持续为投资者提供ETF及时资讯及投资策略,帮助大家在ETF投资过程中梳理科学投资理念,建立和完善投资策略,降低投研成本。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。