《从0到1学指标源码》已经发布了第6期了,也得到了许多股友们的支持和鼓励。其中,有位粉丝朋友留言,希望能写一个K线画线的公式,满足在主图中,kdj金叉时对应K线最低价画水平线,并且该水平线三天后不再主图中显示。首先,感谢这位粉丝朋友对我的信任和支持,本期文章,就以此展开讨论和解析。
在主图中,满足某条件时对应K线画水平线有以下几种方式:
一、满足某条件时对应K线画水平线不消失。
1、水平线一般都是向右延伸,那么,向右延伸是一直延伸不消失,还是当满足该条件、下一个条件信号发出时,画线重新开始且之前的水平线不消失,这两种形式哪种更合适呢?
2、在实战应用中,一般采取后者更为合适,因为前者水平线不消失的话,所有满足条件的水平线都会一直向右延伸,画面上就留下无数条水平线,不具有参考价值。所以,第一种画线方式我们就按照后者“当满足该条件、下一个条件信号发出时,画线重新开始且之前的水平线不消失”来定义公式。
3、这就需要运用以下几个函数:
(1)FILTER(X,N):过滤连续出现的信号,当X条件满足后,将其后N周期内的数据置为0(即,不显示),N为参数;例如:FILTER(CROSS(J,D),2)。
(2)SUMBARS(X,A):向前累加到指定值到现在的周期数。将X向前累加直到大于等于A,返回这个区间的周期数(即,连续出现);例如:SUMBARS(FILTER(CROSS(J,D),2),1)。
(3)STICKLINE(COND,PRICE1,PRICE2,WIDTH,EMPTY):绘制柱线,该使用方法在《从0到1学指标源码》之前文章中讲解过,这里不再重复。
(4)我们试着用这种方法实现粉丝朋友的画线要求:
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
KDJ金叉:=SUMBARS(FILTER(CROSS(J,D),3),1);
STICKLINE(KDJ金叉,REF(L,KDJ金叉-1),REF(L,KDJ金叉-1),5,0)COLOR0000FF;
图例1
图例2:第一种方式公式源码测试通过
二、满足某条件时对应K线画水平线,且原水平线消失,只保留最新满足条件的水平线。
1、正像粉丝朋友所描述,kdj金叉时对应K线最低价画水平线,并且该水平线三天后不再主图中显示,用函数语言描述的话,就是“求到最后K线的周期数”。
2、运用以下几个函数:
(1)CURRBARSCOUNT:求到最后K线的周期数,从最新一根K线倒数编号,从1开始计数。
例如,CURRBARSCOUNT<4,即从最新一根K线向前计数,小于4根,也就是取倒数3根K线。
(2)DRAWSL(COND,PRICE,SLOPE,LEN,DIRECT):绘制斜线,当COND条件满足时,在PRICE位置画斜线,SLOPE为斜率,LEN为长度,DIRECT为0向右延伸,1向左延伸,2双向延伸。
(3)我们就利用这两个函数来满足条件画线:
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
DRAWSL(CURRBARSCOUNT<5 AND FILTER(CROSS(J,D),3),L,0,100,0);
图例3
图例4:第二种方式公式源码测试通过
图例5
本期文章就写到这里,感兴趣的股友可以在软件上编辑公式源码,也能体验一下自己编程序的乐趣,也希望各位股友们继续支持我的文章,下期更精彩!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved