【掘金量化使用技巧】用日线合成长周期k线

掘金API中的接口最长的周期是‘1d’的,因此周线/月线/年线等数据需要自己进行合成。

基本思路

用日线合成长周期的k线只需要确定好合成的周期以及需要的数据即可。
周期: 一般行情软件上提供年k、月k、周k,我也选择年、月、周再加一个季度频率。
数据: 开盘、收盘、最高、最低、成交额、成交量。
确定好周期和需要的数据以后,就可以开始写函数了。以周线为例,要想合成周线,主要有以下几步:
(1)将日线按照日期以周为频率进行分组
(2)计算开盘、收盘、最高、最低、成交额和成交量。

标的公式
开盘价该周第一天的开盘价
收盘价该周最后一天的收盘价
最高价该周所有最高价的最大值
最低价该周所有最低价的最小值
成交额该周全部成交额的总和
成交量该周全部成交量的总和

确定好基本思路,就可以开始编写函数了。

该函数共需要4个参数,分别为:股票代码、开始日期、结束日期、合成频率。这里面有个需要注意的点:输入的开始时间不一定是合成周期的第一天。(比如合成周线,开始日期输入的是周三,如果直接按照周合成,那么第一个合成的周线就是残缺的,这就需要进行调整,把起始日期前推到该周期的第一天)
按时间分组用到pandas库里面的resample函数,该函数可以按照指定频率对数据进行分组计算,用法如下:

DataFrame. resample(rule, how=None, axis=0, fill_method=None,closed=None,label=None,convention='start, kind=None, loffset=None, limit=None, base=0)

其中freq参数设置可参照下表:
图片
其中我们还使用timedelta对象,可以计算未来和过去的时间。

datetime.timedelta函数用法

最终函数如下:

# coding=utf-8
from __future__ import print_function, absolute_import, unicode_literals
from gm.api import *
import datetime
import pandas as pd
def compose_bar(symbol,start_time,end_time,frequency):'''symbol:标的,start_time:开始时间,end_time:结束时间,frequency:频率'''# 合成周线if frequency == 'W':# 判断开始日期是否为周一start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d')week_start = start_time.weekday() + 1#默认周一 = 0,周二 = 1,所以对得出的week进行调整,加一,使得周一等于1,便于后面正确的print日期# 如果不是周一,则将开始时间调整到该周周一if week_start != 1:print('输入的开始日期为周{},调整到该周周一'.format(week_start))start_time = start_time - datetime.timedelta(days = week_start - 1)# 合成月线if frequency == 'M':# 判断开始日期是否为月初day_start_1th = int(start_time[8:10])# 如果不是1号,则转为当月1号if day_start_1th != 1 :start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d')start_time = start_time - datetime.timedelta(days = day_start_1th - 1)print('开始日期为该月{}号,调整到当月1号',format(day_start_1th))# 合成季线if frequency == 'Q':# 直接开始日期设置为季度初month = int(start_time[5:7])   # 看开始时间月份year = int(start_time[0:4])     # 看开始时间年份if month in range(1,3):start_time = datetime.date(year,1,1)if month in range(4,6):start_time = datetime.date(year,4,1)if month in range(7,9):start_time = datetime.date(year,7,1)if month in range(10,12):start_time = datetime.date(year,9,1)# 合成年线if frequency == 'A':# 将开始时间调整为年初year_start = int(start_time[0:4])  # 看开始时间年份start_time = datetime.date(year_start,1,1)# 订阅历史数据(注意要复权到当前日期才能和东方财富的数据对得上)data = history(symbol = symbol,frequency = '1d',start_time = start_time,end_time = end_time,fields = 'eob,open,close,high,low,amount,volume',df = True,skip_suspended = True,fill_missing = None, adjust=ADJUST_PREV,adjust_end_time = datetime.datetime.today())# 修改日期格式并变成索引data.eob = data.eob.apply(lambda x :datetime.datetime.strptime(str(x).split(' ')[0],'%Y-%m-%d'))data.set_index(data['eob'],inplace = True)data.drop(columns = ['eob'],inplace = True)data_index = data.resample(frequency,label = 'right').last().index# 结果返回成dataframe格式data_k = pd.DataFrame({'open':data.resample(frequency,label = 'right').first()['open'],'close': data.resample(frequency,label = 'right').last()['close'],'high': data.resample(frequency,label = 'right').max()['high'],'low': data.resample(frequency,label = 'right').min()['low'],'amount': data.resample(frequency,label = 'right').sum()['amount'],'volume': data.resample(frequency,label = 'right').sum()['volume'],'frequency':frequency})data_k.set_index(data_index,inplace = True)# 如果某周放假没有数据,则删除data_k.dropna(inplace = True)return data_k"""
参考history_n()函数建立一个周/月/季度/年 K线的数据获取函数
"""
def history_n_compose(symbol, count, end_time, frequency="W", fields = 'open,close,high,low,amount,volume', fill_missing="last", adjust=ADJUST_PREV, df=True):end_time = datetime.datetime.strptime(end_time, '%Y-%m-%d')end_time = end_time.strftime('%Y-%m-%d')coef = 1 #比例系数if frequency == "W":coef = 5if frequency == "M":coef = 23if frequency == "Q":coef = 90if frequency == "A":coef = 365start_time = get_previous_n_trading_dates(exchange='SHSE', date=end_time, n=count*coef)[0]data = compose_bar(symbol, start_time, end_time, frequency)fields = str(fields).split(',')data = data[fields] # 新建一个dataframe表格用于存储需要用到的数据return data# 测试一下
set_token("自己的token码")
data = history_n_compose('SHSE.510290',100,end_time='2024-09-20',frequency="M")
print(data)
# weekly_k = compose_bar('SHSE.510290','2023-03-05','2024-09-20','W')
# print(weekly_k)
# monthly_k = compose_bar('SHSE.510290','2023-03-05','2024-09-20','M')
# print(monthly_k)
# quarterly_k = compose_bar('SHSE.510290','2023-03-05','2024-09-20','Q')
# print(quarterly_k)
# yearly_k = compose_bar('SHSE.510290','2023-03-05','2024-09-20','A')
# print(yearly_k)

运行结果如下:
在这里插入图片描述
与东方财富给出的周线数据一致。

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

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

相关文章

Linux:终端(terminal)与终端管理器(agetty)

终端的设备文件 打开/dev目录可以发现其中有许多字符设备文件,例如对于我的RedHat操作系统,拥有tty0到tty59,它们是操作系统提供的终端设备。对于tty1-tty12使用ctrlaltF*可以进行快捷切换,下面的命令可以进行通用切换。 sudo ch…

GPU加速时代:如何用CuPy让你的Python代码飞起来?

你是不是也有这样的感受:明明写的Python代码很简洁,用NumPy处理数据也很方便,可是一跑起来就慢得像乌龟?尤其是当你面对庞大的数据集时,光是等结果出来,就已经耗掉大半天了。其实,我以前也是这么干的,直到我发现了CuPy,一个能让NumPy飞速跑起来的GPU加速神器。 你…

10. 排序

一、排序的概念及引用 1. 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录…

基于SpringBoot的医院管理系统【附源码】

基于SpringBoot的医院管理系统(源码L文说明文档) 目录 4 系统设计 4.1 系统概述 4系统概要设计 4.1概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 医生模块的实现 5.1.…

Mybatis 返回 Map 对象

一、场景介绍 假设有如下一张学生表: CREATE TABLE student (id int NOT NULL AUTO_INCREMENT COMMENT 主键,name varchar(100) NOT NULL COMMENT 姓名,gender varchar(10) NOT NULL COMMENT 性别,grade int NOT NULL COMMENT 年级,PRIMARY KEY (id) ) ENGINEInnoD…

【RocketMQ】一、基本概念

文章目录 1、举例2、MQ异步通信3、背景4、Rocket MQ 角色概述4.1 主题4.2 队列4.3 消息4.4 生产者4.5 消费者分组4.6 消费者4.7 订阅关系 5、消息传输模型5.1 点对点模型5.2 发布订阅模型 1、举例 以坐火车类比MQ: 安检大厅就像是一个系统的门面,接受来…

整合多方大佬博客以及视频 一文读懂 servlet

参考文章以及视频 文章: 都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet_servlet用得多吗-CSDN博客 【计算机网络】HTTP 协议详解_3.简述浏览器请求一个网址的过程中用到的网络协议,以及协议的用途(写关键点即可)-CSDN博客 【…

大数据可视化-三元图

三元图是一种用于表示三种变量之间关系的可视化工具,常用于化学、材料科学和地质学等领域。它的特点是将三个变量的比例关系在一个等边三角形中展示,使得每个点的位置代表三个变量的相对比例。 1. 结构 三个角分别表示三个变量的最大值(通常…

TikTok流量不佳:是网络环境选择不当还是其他原因?

TikTok,作为全球短视频社交平台的佼佼者,每天都有海量的内容被上传和分享。然而,很多用户和内容创作者发现,他们的TikTok视频流量并不理想。这引发了一个问题:TikTok流量不佳,是因为网络环境选择不当&#…

Lumos学习王佩丰Excel第十五讲:条件格式与公式

一、使用简单的条件格式 1、为特定范围的数值标记特殊颜色 条件格式-需选择设定范围(大于/小于/介于/......): 数值会动态根据条件判断更新颜色: 模糊匹配+条件格式:选择包含部分文本的特殊值 2、查找重复…

【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍收藏💗支持一下哦 【BurpSuite】Cross-site scripting (XSS 学徒部分:1-9) 实验一 Lab: Reflected XSS into HTML context with nothing…

国自然基金项目撰写技巧、技术路线与ChatGPT融合应用

随着社会经济发展和科技进步,基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题,具备突破性的科学思路和方法。因此,基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合,形成多学科交叉…

一款批量下载 B 站动态页图片的脚本

在逛 B 站的时候,总能看到不少 UP 会发很多图片,此时一个一个保存非常麻烦,而且文件名都是随机的字符串,还得手工重命名。 为此,特地搜索了下有没相关的浏览器插件或油猴脚本,还真给我找到一个。 脚本地址…

图解 TCP 四次挥手|深度解析|为什么是四次|为什么要等2MSL

写在前面 今天我们来图解一下TCP的四次挥手、深度解析为什么是四次? 上一片文章我们已经介绍了TCP的三次握手 解析四次挥手 数据传输完毕之后,通信的双方都可释放连接。现在客户端A和服务端B都处于ESTABLISHED状态。 第一次挥手 客户端A的应用进…

计算机网络-小型综合网络的搭建涉及到无线路由交换安全

目录 1 拓扑架构 2 做项目的思路 3 做配置 3.1先做核心交换 3.2 防火墙的配置 4 ac 和ap 的配置 4.1 ac上配置安全的东西 5.1 测试​编辑 1 拓扑架构 要求看上面的图 2 做项目的思路 这张网很明显是一个小综合,设计到我们的无线交换,路由…

MISC - 第二天(wireshark,base64解密图片,zip文件伪加密,LSB二进制最低位,ARCHPR工具)

前言 各位师傅大家好,我是qmx_07,今天给大家讲解杂项 乌镇峰会种图 使用了stegsolve工具,查看更多信息 发现flag信息 更改为html后缀flag{97314e7864a8f62627b26f3f998c37f1} wireshark 看题目是 分析pacp数据包,通过网站登录…

HarmonyOS应用开发(组件库)--组件模块化开发、工具包、设计模式(持续更新)

致力于,UI开发拿来即用,提高开发效率 正则表达式...手机号校验...邮箱校验 文件判断文件是否存在 网络下载下载图片从沙箱中图片转为Base64格式从资源文件中读取图片转Base64 组件输入框...矩形输入框...输入框堆叠效果(用于登录使用&#xf…

基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于ECC簇内分组密钥管理算法的无线传感器网络matlab性能仿真,对比网络通信开销,存活节点数量,网络能耗以及数据通信量四个指标…

C语言的文件函数

此篇文章主要对C语言中的" 文件读写函数 "进行详细的刨析~通过此篇文章能够了解并学习到:" 字符读写函数 "," 文本行读写函数 "," 格式化读写函数 "," 二进制读写函数 "&#…

深度学习与应用:人体关键点检测

实验二 深度学习与应用:人体关键点检测 1、 实验目的 了解人体关键点检测基础流程熟悉YOLOV7-pose模型结构掌握 YOLOv7-pose 模型的训练、Fine-tuning 以及推理的能力掌握YOLOV7-pose模型对实际问题的应用能力,了解如何在特定的场景和任务中应用该模型…