本节内容只着重讲解指标公式如何转化为编程语言的方式方法,对于各类指标的应用场景、交易原则不做过多解释说明。技术指标的实现其实就是将研究得出的数学公式转化为计算机语言的一个过程。
# MA均线指标
MA指标就是求连续若干天的收盘价的算术平均。天数是MA的参数。移动平均线利用统计学上的“移动平均”原理,将每天的市场价格进行移动平均计算,求出一个趋势值,用来作为价格走势的研判工具。一般均线指标统计按照5天、10天、20天、60天为计算间期,从而预测出短期、中期、长期趋势的变化。
算法
C 为收盘价,n 为移动平均周期数;
结合概述信息可知:MA技术指标一般由4根均线组合而成,因此通过PEL语言提供的MA函数即可直接实现均线指标。
//5日均线
MA1:MA(CLOSE,5);
//10日均线
MA2:MA(CLOSE,10);
//20日均线
MA3:MA(CLOSE,20);
//60日均线
MA4:MA(CLOSE,60);
2
3
4
5
6
7
8
通过上述代码,我们得知每条均线的含义:分别代表最近一周、半个月、一个月、三个月的平均价格,因此,我们可以根据自身需求,对价格、天数进行调整,让其更满足自身的分析需求。
例如:最近12日内的开盘均价线。
MA(OPEN,12);
# MACD异同移动均线指标
MACD异同移动平均线
是从双指数移动平均线发展而来的;它利用短期(一般选12日)指数平滑移动平均线与长期(一般选26日)指数平滑移动平均线之间的差离值
(DIFF)为依据,然后通过当日的差离值DIFF与DIFF的N日(一般选9日)移动平均的聚合与分离特征变化,对买进、卖出时机作出研判的技术指标。
算法
结合上述相关描述,MACD(12, 26, 9)指标的实现过程如下:
- DIFF = 短期、长期指数平滑移动平均线间的差
- DEA = DIFF线的9日指数平滑移动平均线
- MACD = 2*(DIFF-DEA)生成的彩色柱状线
注:将差值放大2倍更有利于柱状线的展示,对数据研判没有影响。
PEL已经提供指数平滑移动平均
函数,因此直接使用EMA
函数即可快速实现指标编写;
//短期、长期指数平滑移动平均线间的差
DIFF: EMA(CLOSE,12) - EMA(CLOSE,26);
//DIFF的9日指数平滑移动平均线
DEA: EMA(DIFF,9);
//使用COLORSTICK函数的作用是将指标线转换为柱状线显示。
MACD : 2*(DIFF-DEA),COLORSTICK;
2
3
4
5
6
7
8
知其所以然:EMA推导公式
x 为数据,n 为移动平均周期数;
为上一周期的EMA值;
因此,根据上述推导公式可知12日收盘价的指数移动平均值的算法结果:
EMA12=前一日EMA12×11/13+当日收盘价×2/13
闲谈一刻:MACD参数设置为什么默认12,26,9 ?
在坊间,大伙儿对“12”和“26”的来历说法都较为一致。相传,在Gerald发明MACD的上世纪70年代,漂亮国交易市场仍在“996”,采用的是单休制度,一周有6个交易日,于是“12”对应的是两周。每个月有4周,一周休息一天,那么30-4=26,“26”对应的是一个月。但是关于“9”的来历就众说纷纭了,目前主要有3种说法。
- 第一种说法,“9”纯粹是作者喜欢的观察周期,萝卜白菜,各有所爱。
- 第二种说法,那时候是一周交易6天,那“9”正好是一周半。
- 第三种说法,也是跟一周交易6天有关,“9”是每周交易日数目乘以概率密度系数后的结果。
其中1/sqrt(2π)是标准正态分布的概率密度函数的系数。
您在使用MACD对参数进行调整时,是如何确定第三个参数的?
# KDJ随机指标
KDJ随机指标,最早起源于期货市场,由乔治·莱恩(George Lane)首创。随机指标KDJ最早是以KD指标的形式出现,而KD指标是在威廉指标的基础上发展起来的。不过KD指标只判断股票的超买超卖的现象,在KDJ指标中则融合了移动平均线速度上的观念,形成比较准确的买卖信号依据。在实践中,K线与D线配合J线组成KDJ指标来使用。KDJ指标在设计过程中主要是研究最高价、最低价和收盘价之间的关系,同时也融合了动量观念、强弱指标和移动平均线的一些优点。因此,能够比较迅速、快捷、直观地研判行情,被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具。
算法
KDJ指标的算法实现过程如下:
- RSV = (收盘价-最近N日最低价)/(最近N日最高价-最近N日最低价)×100
- K = RSV的M1日移动平均
- D = K值的M2日移动平均
- J = 3K-2D
指标默认参数:N、M1、M2 天数,一般取9、3、3;
RSV : 未成熟随机值 (opens new window)
PEL已经提供移动平均
函数,因此直接使用SMA
函数即可快速实现指标编写;
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
2
3
4
知其所以然:SMA推导公式
x 为数据,n 为周期数,m 为权重,并且n>m,其中 代表上一周期SAM值;
根据上述推导公式,若x为RSV,n为3,权重为1时,将其代入计算可知:
表示上一周期的K值。
# 总结
通过实现上述3个常见的技术指标,相信大家对编写技术指标的过程已经有了一个初步的认识,技术指标的实现过程一般遵循以下步骤:
- 查阅技术指标的详尽算法。
- 查找PEL中可被直接使用的具体函数。
- 组装算法后,验证结果。
绝大部分技术指标、均可在软件模板、各大指标网站中直接找到。一般只需相关函数稍作修改即可在金字塔中正常运行。
# 拓展
- 请在MA均线指标的基础上,扩展实现均线多空头排列指标,并标注多空头排列区间。
分析
- 多头排列的形态是:5日均线>10日均线>20日均线>60日均线;
- 空头排列的形态是:5日均线<10日均线<20日均线<60日均线;
- 通过上述表达式可以,多个均线之间
并且
的关系,因此使用and关联。
因此在均线基础上,只要增加形态的条件判断即可。
ma5:ma(close,5);
ma10:ma(close,10);
ma20:ma(close,20);
ma60:ma(close,60);
//实现多空排列条件
多头排列:=MA5>MA10 AND MA10>MA20 and MA20>ma60;
空头排列:=MA5<MA10 AND MA10<MA20 and MA20<ma60;
//当多空排列成立时,在排列区间内绘制红绿阴影标记。
VERTLINE(多头排列=1,MA5,MA60,COLORRED);
VERTLINE(空头排列=1,MA5,MA60,COLORGREEN);
2
3
4
5
6
7
8
9
10
11
12
- 求MACD最近若干个红绿柱的面积。
分析
通过观察可知,当macd发生正负变换时,红绿柱也随之变化。因此只要知道红绿柱发生转化时到当前的k线位置,即可进行求和处理。 本示例中,我们重点学习sumbars函数的用法。该函数可以求得最近n次条件成立时距离当前的k线数量。
DIFF :EMA(CLOSE,12) - EMA(CLOSE,26);
DEA :EMA(DIFF,9);
MACD :2*(DIFF-DEA),COLORSTICK;
//最近一次macd上穿0轴时,距离当前的k线数量(1处)
n1:=sumbars(macd>0 and ref(macd<0,1),1);
//最近一次macd下穿0轴时,距离当前的k线数量(2处)
n2:=sumbars(macd<0 and ref(macd>0,1),1);
//计算最近一次macd上穿0轴以来的macd之和,并剔除此位置之后产生的绿柱数据。
上一个红柱面积:ref(sum(macd,n1),n2),LINETHICK0;
//计算最近一次macd下穿0轴以来的macd之和,并剔除此位置之后产生的红柱数据。
上一个绿柱面积:ref(sum(macd,n2),n1),LINETHICK0;
//倒数第二次macd上穿0轴时,距离当前的k线数量(3处)
n3:=sumbars(macd>0 and ref(macd<0,1),2);
//倒数第二次macd上穿0轴时,距离当前的k线数量(4处)
n4:=sumbars(macd<0 and ref(macd>0,1),2);
上上个红柱面积和:ref(sum(MACD,n1),n4),LINETHICK0;
上上个绿柱面积和:ref(sum(MACD,n2),n3),LINETHICK0;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24