本文主要是介绍使用 Elasticsearch 构建布林带趋势指标,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如果您阅读我之前所写的“使用 Elasticsearch 计算布林带宽度”一文,可能还想使用 Elasticsearch来构建布林带趋势指标 (BBTrend)。 BBTrend 是 John Bollinger开发的一个相对较新的指标。 这指标既能反映标的股票的走势,又能体现强度和方向两个方面,为交易者提供了有价值的参考。 当 BBTrend 读数高于零时,它可以表示市场看涨,反之亦然。其值高于或低于零的程度决定了趋势背后的强度或动量。 BBTrend 涉及两个布林带,短周期和长周期。 一般来说短周期为 20,而长周期为50。
要了解如何使用Elasticsearch计算布林带(BB),可以参考前文。BBTrend 的计算公式如下:
在公式中:
p: 价格
SMA : 使用简单模型的移动平均值
short : 短周期滑动窗口
long : 长周期滑动窗口
abs : 绝对值函数
BBUshort : 短周期布林带上轨道线
BBLshort : 短周期布林带下轨道线
BBUlong : 长周期布林带上轨道线
BBLlong : 长周期布林带下轨道线
在本文中,我们将使用股票型公募基金作为样本,并专注于Elasticsearch作为分析的计算工具。 以下示例随机选用工银前沿医疗股票C基金,其代码为010685.OF。 数据选自Tushare大数据开放社区,时间范围为2020 年 12 月 01 日至 2021 年 4 月 30 日之间。 假设有一个填充了数据的 Elasticsearch 索引,其使用的数据映射与上一篇论文相同(使用Elasticsearch计算布林带宽度指标)。以下步骤说明操作流程,同时演示REST API请求主体的代码:
- 通过搜索操作收集所有相关文档:
使用带有必要条件(must)子句的布林查询(bool query)来收集基金代码为010685.OF,和公告截止日期从2021年02月01日到2021年04月30日的文档。 由于需要计算50天的移动平均值,此多增加了约两个月的数据(从2020年12月01日到2020年1月31日)。
{"query": {"bool": {"must": [{"range": {"end_date": {"gte": "20201201", "lte": "20210430"}}},{"term": {"ts_code": "010685.OF"}}]}},
- 提取每日的复权单位净值:
使用名为BBI的日期直方图(date_histogram)存储桶聚合,并配合参数field(字段)为end_date和interval(间隔)为 1d(1天),提取每日的复权单位净值(adj_nav)。由于子聚合使用管道(pipeline)聚合而无法直接采用文档字段,所以额外使用平均值(avg)聚合获取每日的复权单位净值,聚合名称为Daily。(若当天基金没有公布的值,其值的计算方法是从其前后公布的值推算而来。)
"aggs": {"BBI": {"date_histogram": {&
这篇关于使用 Elasticsearch 构建布林带趋势指标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!