量化:常见策略指标合集

2017-02-28 11:23:50 +08:00
 raquant

1 、 MACD 指标

MACD 称为指数平滑移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线( EMA12 )减去慢的指数移动平均线( EMA26 )得到快线 DIF ,再用 2×(快线 DIF-DIF 的 9 日加权移动均线 DEA )得到 MACD 柱。 MACD 的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。当 MACD 从负数转向正数,是买的信号。当 MACD 从正数转向负数,是卖的信号。当 MACD 以大角度变化,表示快的移动平均线和慢的移动平均线的差距非常迅速的拉开,代表了一个市场大趋势的转变。

公式:

12 日 EMA 的计算:

EMA ( 12 ) = 前一日 EMA ( 12 ) X 11/13 + 今日收盘价 X 2/13

26 日 EMA 的计算:

EMA ( 26 ) = 前一日 EMA ( 26 ) X 25/27 + 今日收盘价 X 2/27

差离值( DIF )的计算:

DIF = EMA ( 12 ) - EMA ( 26 ) 。

根据差离值计算其 9 日的 EMA ,即离差平均值,是所求的 DEA 值。为了不与指标原名相混淆,此值又名 DEA 或 DEM 。   今日 DEA = (前一日 DEA X 8/10 + 今日 DIF X 2/10 )

用( DIF-DEA )*2 即为 MACD 柱状图。

简易实现代码: class Myclass extends BackTestTradingStrategy{ String stock = "sha-601318"; MACDFactor macdFactor = new MACDFactor(); void init(BackTestContext context){
universe.add(stock); }//end of init

void handleData(BackTestContext context,BarData data){ double macd = macdFactor.getPriorValue(stock); record("macd",macd); }//end of handle_bar }

2.RSI 指标(Relative Strength Index)

RSI 的原理简单来说是以数字计算的方法求出买卖双方的力量对比,譬如有 100 个人面对一件商品,如果 50 个人以上要买,竞相抬价,商品价格必涨。相反,如果 50 个人以上争着卖出,价格自然下跌。

强弱指标理论认为,任何市价的大涨或大跌,均在 0-100 之间变动,根据常态分配,认为 RSI 值多在 30-70 之间变动,通常 80 甚至 90 时被认为市场已到达超买状态,至此市场价格自然会回落调整。当价格低跌至 30 以下即被认为是超卖状态,市价将出现反弹回升。

公式:

LC := REF(CLOSE,1);

RSI1:SMA(MAX(CLOSE-LC,0),N1,1)/SMA(ABS(CLOSE-LC),N1,1)*100;

RSI2:SMA(MAX(CLOSE-LC,0),N2,1)/SMA(ABS(CLOSE-LC),N2,1)*100;

RSI3:SMA(MAX(CLOSE-LC,0),N3,1)/SMA(ABS(CLOSE-LC),N3,1)*100;

这里还有一种算法:

RS:= SMA(MAX(CLOSE-LC,0),N,1)/SMA(ABS(CLOSE-LC),N,1)

RSI:= 100*RS/(1+RS)

简易实现代码:(前一个是 Java ,这一个是 Python) def init(context): context.s="sha-601318" universe.extend(context.s) f1=RSIFactor(14,'close') reg_factor("rsi",f1) def every_day(context,data): alldata=factor_output("rsi","sha-601318") record("RSI",alldata["rsi"])

3.顺势指标( CCI )

CCI 指标是美国股市技术分析 家唐纳德·蓝伯特(Donald Lambert)于 20 世纪 80 年代提出的,专门测量股价、外汇或者贵金属交易是否已超出常态分布范围。属于超买超卖类指标中较特殊的一种。波动于正无穷大和负无穷大之间。但是,又不需要以 0 为中轴线,这一点也和波动于正无穷大和负无穷大的指标不同。

用法:

1.当 CCI 指标曲线在+100 线~-100 线的常态区间里运行时,CCI 指标参考意义不大,可以用 KDJ 等其它技术指标进行研判。

2.当 CCI 指标曲线从上向下突破+100 线而重新进入常态区间时,表明市场价格的上涨阶段可能结束,将进入一个比较长时间的震荡整理阶段,应及时平多做空。

3.当 CCI 指标曲线从上向下突破-100 线而进入另一个非常态区间(超卖区)时,表明市场价格的弱势状态已经形成,将进入一个比较长的寻底过程,可以持有空单等待更高利润。如果 CCI 指标曲线在超卖区运行了相当长的一段时间后开始掉头向上,表明价格的短期底部初步探明,可以少量建仓。 CCI 指标曲线在超卖区运行的时间越长,确认短期的底部的准确度越高。

4.CCI 指标曲线从下向上突破-100 线而重新进入常态区间时,表明市场价格的探底阶段可能结束,有可能进入一个盘整阶段,可以逢低少量做多。

5.CCI 指标曲线从下向上突破+100 线而进入非常态区间(超买区)时,表明市场价格已经脱离常态而进入强势状态,如果伴随较大的市场交投,应及时介入成功率将很大。

6.CCI 指标曲线从下向上突破+100 线而进入非常态区间(超买区)后,只要 CCI 指标曲线一直朝上运行,表明价格依然保持强势可以继续持有待涨。但是,如果在远离+100 线的地方开始掉头向下时,则表明市场价格的强势状态将可能难以维持,涨势可能转弱,应考虑卖出。如果前期的短期涨幅过高同时价格回落时交投活跃,则应该果断逢高卖出或做空。

公式:

第一种计算过程如下:

CCI ( N 日)=( TP - MA )÷MD÷0.015

其中, TP=(最高价+最低价+收盘价)÷3

MA=近 N 日收盘价的累计之和÷N

MD=近 N 日( MA -收盘价)的累计之和÷N

0.015 为计算系数, N 为计算周期

简易实现代码: class Myclass extends BackTestTradingStrategy{ String stock = "sha-601318"; CCIFactor cciFactor = new CCIFactor(); void init(BackTestContext context){
universe.add(stock); }//end of init

void handleData(BackTestContext context,BarData data){ double cci = cciFactor.getPriorValue(stock); record("cci",cci); }//end of handle_bar }

4.KDJ 指标

KDJ 指标又叫随机指标,是一种相当新颖、实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具。

随机指标 KDJ 一般是用于股票分析的统计体系,根据统计学原理,通过一个特定的周期(常为 9 日、 9 周等)内出现过的最高价、最低价及最后一个计算周期的收盘价及这三者之间的比例关系,来计算最后一个计算周期的未成熟随机值 RSV ,然后根据平滑移动平均线的方法来计算 K 值、 D 值与 J 值,并绘成曲线图来研判股票走势。

*这个忒随机,如果封装成 Factor 有的用户认为不靠谱,所以 KDJ 指标就由大家自己用 Random 类来实现啦

1602 次点击
所在节点    Python
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX