希望之星、黄昏之星、三只乌鸦……怎么用 DolphinDB 快速计算 K 线?

news2024/11/26 0:28:11

K 线技术分析是股票投资中很常用的一种分析方法,主要通过历史价格图表中的数据来预测未来市场趋势。一根 K 线包括四个价格:开盘价、收盘价、最高价和最低价,通常简称为 OHLC。K 线按照周期一般可以分为日、周、月、年,以及五分钟、30分钟等类型。

本文将介绍如何分别基于历史数据和实时流数据来高效计算 K 线。完整的教程和脚本已发布在官方知乎,可点击查看:使用 DolphinDB 计算K线 - 知乎 (zhihu.com)

用历史数据计算 K 线

在用全量历史数据批量计算 K 线时,通常会需要考虑以下几种场景:

  • 指定窗口起始时间

  • 重叠窗口

  • 使用交易量划分窗口

  • 极大数据量的高效读写

下面给大家逐一展示一下如何用 DolphinDB 轻松实现这几类 K 线计算。

不指定 K 线窗口的起始时刻

bar 函数:bar(X,Y) 返回 X 减去 X 除以 Y 的余数 (X-mod(X,Y)),一般用于将数据分组。

计算5分钟 K 线只需2行代码:

barMinutes = 5OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, date, bar(time, barMinutes*60*1000) as barStart

指定 K 线窗口的起始时刻

dailyAlignedBar 函数:可处理每日多个交易时段,亦可处理隔夜时段。

中国股票市场每日有两个交易时段,上午时段为9:30至11:30,下午时段为13:00至15:00。计算7分钟 K 线只需3行代码:

barMinutes = 7
sessionsStart=09:30:00.000 13:00:00.000
OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, dailyAlignedBar(timestamp, sessionsStart, barMinutes*60*1000) as barStart

某些期货每日有多个交易时段,且包括隔夜时段。假设第一个交易时段为上午8:45到下午13:45,另一个时段为隔夜时段,从下午15:00到第二天上午05:00,以此为例计算7分钟 K 线:

barMinutes = 7
sessionsStart = [daySession[0], nightSession[0]]
OHLC = select first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume from trade group by symbol, dailyAlignedBar(timestamp, sessionsStart, barMinutes*60*1000) as barStart

重叠 K 线窗口

wj 函数:对左表中的每一行,在右表中截取一段窗口,进行计算。

每日两个交易时段,每5分钟计算30分钟K线。

首先生成窗口,并且使用 cj 函数来生成股票和交易窗口的组合。

barWindows = table(symbols as symbol).cj(table((09:30:00.000 + 0..23 * 300000).join(13:00:00.000 + 0..23 * 300000) as time))

然后使用 wj 函数计算重叠窗口的K线数据:

OHLC = wj(barWindows, trade, 0:(30*60*1000),     <[first(price) as open, max(price) as high, min(price) as low, last(price) as close, sum(volume) as volume]>, `symbol`time)

使用交易量划分K线窗口

上面的例子我们均使用时间作为划分 K 线窗口的维度。在实践中,也可以使用其他变量,譬如用累计的交易量作为划分 K 线窗口的依据。以下代码展示了交易量每增加一百万就计算一次 K 线的代码。

n = 1000000
sampleDate = 2019.11.07
symbols = `600519`000001`600000`601766
trade = table(take(sampleDate, n) as date, 
	(09:30:00.000 + rand(7200000, n/2)).sort!() join (13:00:00.000 + rand(7200000, n/2)).sort!() as time, 
	rand(symbols, n) as symbol, 
	100+cumsum(rand(0.02, n)-0.01) as price, 
	rand(1000, n) as volume)
	
volThreshold = 1000000
t = select first(time) as barStart, first(price) as open, max(price) as high, min(price) as low, last(price) as close, last(cumvol) as cumvol 
from (select symbol, time, price, cumsum(volume) as cumvol from trade context by symbol)
group by symbol, bar(cumvol, volThreshold) as volBar

这里采用了嵌套查询的方法。子查询为每个股票累计的交易量 cumvol,然后在主查询中根据累计的交易量用 bar 函数生成窗口。

使用MapReduce函数加速

若需从数据库中提取较大量级的历史数据,计算 K 线,然后存入数据库,可使用 DolphinDB 内置的 Map-Reduce 函数 mr 进行数据的并行读取与计算。这种方法可以显著提高速度。

实时 K 线计算

实际上,我们看盘的时候,股票的蜡烛图是随时间不断更新变化的。这种动态实时更新的 K 线要怎么算呢?

DolphinDB 提供了强大的流计算引擎,可以通过如下图所示的流程实现实时 K 线计算:

实时数据供应商一般会提供基于Python、Java或其他常用语言的 API 的数据订阅服务。

我们提供的方案中,使用 Python 来模拟接收市场数据,通过 DolphinDB Python API 写入流数据表中。DolphinDB 的流数据时序聚合引擎可按照指定的频率与移动窗口实时计算K线。

完整的教程中,使用的模拟实时数据源包含以下4列(附带一行样本数据):

SymbolDatetimePriceVolume
0000012018.09.03T09:30:0610.134500

实时计算 K 线包含以下三个步骤:

  1. 使用 Python 接收实时数据,并写入 DolphinDB 流数据表

  2. 使用移动窗口实时计算指标

  3. 在 Python/Grafana 中实时展示 K 线数据

完整的脚本可点击查看:使用 DolphinDB 计算K线 - 知乎 (zhihu.com)

当然,K 线分析法只是股票交易技术分析中的一种。有效市场假说对股票技术分析的有效性一直存在一定争议,当下的普遍观点是,股票市场的价格基本上是不可预测的,技术分析得出的结果也不够稳健。那为什么我们还要做技术分析呢?

技术分析看似只是针对量价关系、市场波动这些现象的分析,从而再寻找或预测下一个类似的现象;但真正的核心,是要能通过现象认知到更深处的市场机理,分析资金意图——所谓透过现象看本质。

更多技术问题,欢迎添加小助手(dolphindb1)进入交流群,让我们的思想激情碰撞吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627640.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium自动化落地实践

01、自动化测试流程图 02、主要过程描述 1、自动化测试的切入点 开展自动化测试的时间点很关键&#xff0c;需要在系统已经过多版本的系统测试&#xff0c;达到稳定之后。 2、可行性分析 在进行项目自动化测试之前&#xff0c;第一步就是要确认其可行性&#xff0c;是否可以…

为何唐宋诗词鼎盛,而到了明清变成了小说

我国是一个历史悠久的国家&#xff0c;在漫长的历史长河中&#xff0c;随着朝代的更替&#xff0c;很多事也发生了有趣的变化。 例如唐宋时期盛行的是诗词&#xff0c;而到了明清时代&#xff0c;小说又开始盛行了起来&#xff0c;那么造成这种文风改变的原因是什么呢&#xf…

2023安博会进行时!英码科技1个重磅+4大看点隆重亮相

2023年6月7日&#xff0c;第十六届&#xff08;2023&#xff09;中国国际社会公共安全产品博览会&#xff08;以下简称&#xff1a;安博会&#xff09;在北京首钢会展中心盛大开幕&#xff01;本届安博会以“自主创新数智融合”为主题&#xff0c;共设置了7大主题展馆&#xff…

linux开发:Linux下查看端口占用

前段时间有学生问到&#xff0c;怎么查看已经被占用的端口&#xff1f;下面我就统一给大家解释一下。 提到端口&#xff0c;那首先来回顾端口定义&#xff0c;为了区分一台主机接收到的数据包应该转交给哪个任务来进行处理&#xff0c;使用端口号来区别&#xff1b;我们知道TCP…

【活动预告】ACDU 中国行 · 深圳站精彩抢先看

近期活动 在当今数字化时代&#xff0c;数据库是各行各业中最核心的信息管理系统之一。 随着技术的飞速发展&#xff0c;数据库领域也不断涌现出新的前沿技术和创新应用。 数据库运维和开发人员需要紧跟前沿技术&#xff0c;才能保持竞争力&#xff0c;并实现更高效、更智…

Java-API简析_java.lang.Float类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131129886 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

JMeter测试笔记(五):JDBC请求

引言&#xff1a; 进行性能测试时&#xff0c;我们有时需要模拟数据库的访问和操作&#xff0c;而JMeter中的JDBC请求可以帮助我们实现这个目的。 在本文中&#xff0c;我们将深入了解JDBC请求的使用方式&#xff0c;并学习如何正确配置它们来模拟对数据库的访问和操作。 如…

Excel函数VLOOKUP常用方法

一、基础用法 1、精确匹配 公式&#xff1a;VLOOKUP(待匹配值&#xff0c;查找范围&#xff0c;范围列数&#xff0c;查找方式) 定义好要输出表的表头和第一列&#xff0c;第一列即为要查找和匹配的父内容&#xff0c;在第二列输入公式&#xff0c;被查找表中一定也要将待查…

【大数据学习番外篇之爬虫2】爬虫入门简单例子

目录 1. 图片爬取 2. 破解百度翻译 3. 豆瓣电影爬取 4. 肯德基餐厅位置爬取 1. 图片爬取 通过以下代码我们可以看到图片已经爬取进入虚拟机里面。 # -*- coding: utf-8 -*- import re import requests from urllib import error from bs4 import BeautifulSoup import os…

Fmoc固相肽:116783-35-8,Fmoc-Thr(Ac3GalNAcα)-OH,进行总结说明

试剂基团反应特点&#xff08;Reagent group reaction characteristics&#xff09;&#xff1a; Fmoc-Thr(Ac3GalNAcα)-OH&#xff0c;该构建块中的O-糖苷键和O-乙酰基保护对哌啶和TFA[1]都是稳定的&#xff0c;使其与Fmoc固相肽合成中的标准方案完全兼容。乙酰基保护基的去除…

了解set

了解set 1. set的介绍2. set的使用1. Member functions2.set的迭代器3. set的容量4.set修改操作4.1 insert4.2 erase、swap和clear4.3 emplace 5. observers(了解)6.Operations(了解) 3.set有关的题目 1. set的介绍 C中的set是一种关联式容器&#xff0c;它能够存储同一数据类型…

Airtest自动化测试工具实战演练

一开始知道Airtest大概是在年初的时候&#xff0c;当时&#xff0c;看了一下官方的文档&#xff0c;大概是类似Sikuli的一个工具&#xff0c;主要用来做游戏自动化的&#xff0c;通过截图的方式用来解决游戏自动化测试的难题。最近&#xff0c;移动端测试的同事尝试用它的poco库…

融合空间与视觉,揭示信息之美——GIS与可视化的奇妙结合

近年来&#xff0c;随着信息技术的快速发展&#xff0c;地理信息系统&#xff08;GIS&#xff09;和可视化技术在各行各业中的应用越来越广泛。作为一种集成空间数据管理、分析和可视化展示的强大工具&#xff0c;GIS为我们带来了全新的视角和洞察力&#xff0c;它以其直观、生…

学习笔记:吴恩达ChatGPT提示工程

以下为个人笔记&#xff0c;原课程网址Short Courses | Learn Generative AI from DeepLearning.AI 01 Introduction 1.1 基础LLM 输入 从前有一只独角兽&#xff0c;输出 它和其他独角兽朋友一起住在森林里输入 法国的首都在哪&#xff1f;输出 法国的首都在哪&#xf…

arm32位应用兼容arm64位记录

目录 背景 兼容64位步骤 1.配置ndk支持arm64 2.进行build构建 3.构建完之后&#xff0c;进行apk包的分析 4.比较lib/armeabi-v7a和lib/arm64-v8a两个文件夹下的so库文件 5.确定缺少的so库文件属于哪些三方依赖 6.确定完所属依赖后&#xff0c;要么升级依赖、要么直接引入…

普通Java工程师如何成长为一名优秀的架构师?

导言 什么是架构师&#xff1f;对于程序员来说&#xff0c;聊架构是一个永不过时的话题。实际上&#xff0c;每一家公司都有自己对架构师不同的定位&#xff0c;因为不同的公司&#xff0c;所处的阶段、业务模式以及应用场景都不一样&#xff0c;因此对架构师的要求不一样&…

R -- loess函数

文章目录 brief:Example代码实例用在时序数据上 brief: 通常我们使用最小二乘回归&#xff08;OLS&#xff09;去找到一条直线来最佳地拟合数据点&#xff0c;就像下面那样。 但是我们会遇到下面这种数据分布,我们应该怎样处理呢&#xff1f;广义线性回归 或者 Loess回归进行…

图论 (Java) 从入门到入土 /第一部分 图的基础-图的表示/

零.前言 图&#xff0c;是一种比较复杂的数据结构。和树的一个节点只和上层一个节点相连不同&#xff0c;在图中&#xff0c;任意两个节点都可能相连&#xff0c;且可能具有方向性&#xff0c;并且节点的边具有权重&#xff0c;因此&#xff0c;图被用于描述各种复杂的数据对象…

深入理解Qt定时器:QTimer的魅力与挑战

深入理解Qt定时器&#xff1a;QTimer的魅力与挑战 1. 引言&#xff08;Introduction&#xff09; QTimer的基本概念&#xff08;Basic Concepts of QTimer&#xff09; 2. QTimer的基本使用&#xff08;Basic Usage of QTimer&#xff09;2.1 创建和启动QTimer&#xff08;Crea…

【软件测试】日志第五天

系软件开发日志 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;软件测试 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系软件开发日志前言web自动化…