赞
踩
移动平均收敛发散 (MACD) 是基于趋势和动量的指标,而布林带 (BB) 是基于波动率的指标。 当MACD与BB结合时,一些专业人士称其为MACD BB,另一些专业人士称其为BB MACD,本文使用名称 MACD BB。 两个技术分析指标的组合继承了原本的两个能力,提供对市场趋势的洞察力。 从密集的网络搜索来看,没有一处记载说是谁发明了这个指标。 如果有读者知道,请分享来源。然而,许多交易平台和论坛都提供此指标并且视为高级功能。 建议读者阅读我之前发表的两篇文章,可以快速对这两个指标以及使用 Elasticsearch 的实现有一个基本的了解。根据使用Elasticsearch构建MACD直方图文中描述的方程, MACD 涉及每日价格(Daily)的短期和长期指数加权移动平均线 (EWMA)。 这两个周期的常见用法是 12 和 26。
在使用Elasticsearch计算布林带宽度指标一文中, BB根据每日价格的简单移动平均线(SMA)和标准差(SD)来构建上轨道线(BBU)和下轨道线(BBL),而中线是SMA。 从 MACD BB 的术语直观可知,它使用 MACD 而不是每日价格。 BBL 和 BBU 的计算方法如下,其中window为滑动窗口 ,n为 标准差。
基本上,将MACD、BBU 和 BBL一起绘制在图表上,用户可以容易观察到 MACD 和两个轨道线的交叉点。 当MACD上升越过BBU时,意味着强劲的上升趋势信号。 同样,当MACD下降越过BBL时,意味着强烈的下行信号。 若使用图形来描述含义要容易得多。 本文尝试将 MACD BB 应用Tushare大数据开放社区提供的股票型公募基金,并专注于将 Elasticsearch 作为分析工具。 下面的例子随机选择了"工银前沿医疗股票C基金" (代码为010685.OF)。 数据选自提供的 2021年01月01日到2021年04月30日之间的时间范围。根据很多网上文章的实现方法,在计算BB时,MACD选用的SMA周期是10,而标准差是1。
下图绘制了 MACD 及其 BBL、BBU 和 SMA。 如果 MACD 值高于 BBU 并且与前一个时间戳中的MACD值相比是一个增量,使用水蓝色点。 如果 MACD 值高于 BBU 且为减量,则为蓝色点。 如果 MACD 值低于 BBL 且为减量,则为红色点。 如果 MACD 值低于 BBL 并且是一个增量,则为橙色点。 对于其他情况,则为灰色点。 读者可以很容易地观察到红色/橙色线低于 BBL,蓝色/水蓝色线高于 BBU。 此外,当 MACD 值从零以下上升并越过零时,(产生看涨信号),在大多数情况下紧随其后会出现相应的水蓝色点。 同理,当 MACD 值从零上方跌破零时(产生看跌信号),相应的红色点将随之而来。 线的斜率表示趋势的动量。
然而,当尝试结合每日价格来解释MACD值从BBU或BBL越过零点时,它与价格的上升或下降趋势不一定匹配,如下图所示。因此,波动性增加的潜在迹象促进未来可能的交易机会并不容易捕捉到,有候时判断方向会与结果完全不同。大多数股票交易学习和实践平台都提供MACD BB指标,并给出相同的评价“这个指标不适合新手”。
本文所使用的 Elasticsearch 实例显示无缝整合且易于理解。假设已经有一个存在数据的 Elasticsearch 索引,使用的数据映射与之前发表的文章(使用Elasticsearch计算布林带宽度指标)相同。 以下步骤演示了 REST API 请求正文。
{
"query": {
"bool": {
"must": [
{"range": {"end_date": {"gte": "20201201", "lte": "20210430"}}},
{"term": {"ts_code": "010685.OF"}}
]
}
},
"aggs": {
"MACD_Histogram": {
"date_histogram": {
"field": "end_date",
"interval": "1d",
"format": "yyyyMMdd"
},
"aggs": {
"Daily": {
"avg": {"field": "adj_nav"}
},
"DateStr": {
"min": {"field": "date"}
},
"EWMA12": {
"moving_fn": {"script": "MovingFunctions.ewma(values, 2/(12+1))", "window": 12, "buckets_path": "TP.value"}
},
"EWMA26": {
"moving_fn" : {"script": "MovingFunctions.ewma(values, 2/(26+1))", "window": 26, "buckets_path": "TP.value"}
},
"MACD": {
"bucket_script": {
"buckets_path": {
"EWMA12": "EWMA12",
"EWMA26": "EWMA26"
},
"script": "params.EWMA12 - params.EWMA26"
}
},
"SMA10": {
"moving_fn" : {"script":"MovingFunctions.unweightedAvg(values)", "window":10, "buckets_path":"MACD"}
},
"SD10": {
"moving_fn": {"script":"MovingFunctions.stdDev(values, MovingFunctions.unweightedAvg(values))", "window":10, "buckets_path":"MACD"}
},
"BBU10": { "bucket_script": { "buckets_path": { "SMA": "SMA10", "SD": "SD10" }, "script": "params.SMA + params.SD" } }, "BBL10": { "bucket_script": { "buckets_path": { "SMA": "SMA10", "SD": "SD10" }, "script": "params.SMA - params.SD" } },
"MACD_Diff": {
"derivative": {
"buckets_path": "MACD"
}
},
b) 使用名为MACDType的存储桶脚本(bucket_script)聚合,并配合参数buckets_path指定使用BBL10、 BBU10、 MACD和MACD_Diff聚合的值,对 MACD 值的类型进行分类。
♦ 如果MACD < BBL并且MACD_Diff是减量,则为类型1
♦ 如果MACD < BBL并且MACD_Diff是增量,则为类型 2
♦ 如果MACD > BBU并且MACD_Diff是增量,则为类型 3
♦ 如果MACD > BBU并且MACD_Diff是减量,则为类型 4
♦ 其他情况为类型 0
"MACDType": {
"bucket_script": {
"buckets_path": {
"BBL": "BBL10",
"BBU": "BBU10",
"MACD": "MACD",
"MACD_Diff": "MACD_Diff"
},
"script": "(params.MACD > params.BBU) ? (params.MACD_Diff > 0 ? 3:4) : (params.MACD < params.BBL) ? (params.MACD_Diff > 0 ? 2:1):0"
}
},
"MACD_BB": {
"bucket_selector": {
"buckets_path": {"DateStr":"DateStr"},
"script": "params.DateStr >= 1609459200000L"
}
}
}
}
},
"size": 0
}
读者可以进一步参考Gitee上的开源项目(当 MACD 与布林带在 Elasticsearch中结合时) 。
备注:
I. 感谢Tushare大数据开放社区提供相关数据及Gitee开源社区提供存储开源项目。
II. 本文基于公开发布技术和研究观点,并不构成任何投资建议,读者在使用时须自行承担责任。
III. 文中可能还存在疏漏和错误之处,恳请广大读者批评和指正。
IV. 作者的中文著作Elasticsearch 数据分析与实战应用(ISBN 978-7-113-27886-1号)将于2021 年 7 月出版。
V. 作者的英文著作Advanced Elasticsearch 7.0(ISBN 978-1-789-95775-4号)被bookauthority评为 2021 年最值得阅读的 4 本 Elasticsearch 新书之一。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。