1使用技巧_【掘金使用技巧1】合成长周期k线的函数
用日线合成长周期k线
掘金API中的接口最长的周期是‘1d’的,如果想要合成频率为周、月甚至年的应该怎么办呢?为此,写了一个函数来实现日k线合成长周期k线,欢迎大家一起讨论,不足之处请多指教。
基本思路
用日线合成长周期的k线并不难,只需要确定好合成的周期以及需要的数据即可。
周期: 一般行情软件上提供年k、月k、周k,我也选择年、月、周再加一个季度频率。
数据: 开盘、收盘、最高、最低、成交额、成交量。
确定好周期和需要的数据以后,就可以开始写函数了。以周线为例,要想合成周线,主要有以下几步:
将日线按照日期以周为频率进行分组
计算开盘、收盘、最高、最低、成交额和成交量。
开盘 = 该周第一天的开盘价收盘 = 该周最后一天的收盘价最高 = 该周所有最高价的最大值最低 = 该周所有最低价的最小值成交额 = 该周全部成交额的总和成交量 = 该周全部成交量的总和
确定好基本思路,就可以开始编写函数了。
该函数共需要4个参数,分别为:股票代码、开始日期、结束日期、合成频率。
这里面有个需要注意的点:输入的开始时间不一定是合成周期的第一天。(比如合成周线,开始日期输入的是周三,如果直接按照周合成,那么第一个合成的周线就是残缺的,这就需要进行调整,把起始日期前推到该周期的第一天)
按时间分组用到pandas库里面的resample函数,该函数可以按照指定频率对数据进行分组计算,用法如下:
其中freq参数设置可参照下表:
函数代码
def compose_bar(symbol,start_time,end_time,frequency): '''symbol:标的,start_time:开始时间,end_time:结束时间,frequency:频率''' # 合成周线 if frequency == 'W': # 判断开始日期是否为周一(默认周一 = 0,周二 = 1,所以对得出的week进行调整,加一) start_time = datetime.datetime.strptime(start_time,'%Y-%m-%d') week_start = start_time.weekday() + 1 # 如果不是周一,则将开始时间调整到该周周一 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 # 测试一下weekly_k = compose_bar('SHSE.600519','2019-01-05','2020-01-26','W')monthly_k = compose_bar('SHSE.600519','2019-01-05','2020-01-30','M')quarterly_k = compose_bar('SHSE.600519','2019-01-05','2020-01-30','Q')yearly_k = compose_bar('SHSE.600519','2019-01-05','2020-01-30','A')
测试结果和新浪财经的数据相同,大功告成。
来源:掘金社区 作者:四两
声明:本公众号致力于量化投资相关的干货文章分享,仅供交流探讨,不构成任何投资建议!著作权归作者所有,若涉及侵犯您的权益,敬请原作者见谅,并后台留言联系小编进行协商或删除处理,谢谢。
END
点击“阅读原文”掘金量化实盘申请
1使用技巧_【掘金使用技巧1】合成长周期k线的函数相关推荐
- 绘制自己组合的k线图_短线投资者必备的四种双K线组合抄底技巧,次次选中黑马股,精准率超高...
(本文由公众号越声投研(yslcwh)整理,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负.) 股市里有一句话叫做:"新手死于追高,老手死于抄底",讲的是股市里大多数 ...
- 实用计算机操作方法,电脑操作教程_电脑常用小技巧_电脑操作技巧
快捷键是很多电脑高手操作电脑最常用到的,通常我们会发现,实际电脑操作中,很多麻烦的电脑操作,完全可以通过简简单单的组合快捷键轻松完成,相比一般操作方面,大大提升了工作效率.下面就让小编带你去看看初学者 ...
- web开发的一些工具技巧_有用的技巧可帮助您建立Web开发人员的良好习惯
web开发的一些工具技巧 by Antoine Lechenault 通过安托万·莱切诺特(Antoine Lechenault) 有用的技巧可帮助您建立Web开发人员的良好习惯 (Useful ti ...
- java编码技巧_编码小技巧 让java编程更便捷
经过一段时间的编码,程序员们或多或少会形成自己的编码习惯,好的习惯能帮助自己写出更好的代码,方便程序的维护.抱着侥幸心理,对"可能会出错"的代码没有做"防错性程序设计&q ...
- excel常用函数公式及技巧_能看懂、能学会的9个Excel函数公式实用技巧解读!
Excel中的函数公式非常的繁多,但在实际的工作中用到的也就那么几个,如果对这些常用的函数公式都不掌握,那就真的Out了! 一.日期转星期. 方法: 在目标单元格中输入公式:=TEXT(B3,&quo ...
- 笔记本触摸板失灵修复小技巧_生活小技巧,家庭便携电子秤修复教程,科技改变生活...
序言 随着电子数码普及,生活越来越方便,以前家庭称重都是用杆秤.现如今取而代之的是精确度更高.体积更小巧.使用更方便的电子称.本文就以家庭便携电子秤为例,分享故障修复教程,希望读者从中能学到生活维修小 ...
- 博客英语作文写作技巧_网络写作技巧
网络写作是一项技能,就像其他技能一样,只有通过实践才能完善. 我已经在此博客上写了两年了,在此之前为其他站点创建内容,我想我对此还可以,尽管总有方法可以改进! 在本文中,我将分享我多年来获得的一些智慧 ...
- 3使用技巧_办公小技巧:3+2 灵活使用WPS集成环境
文字.表格.幻灯片,日常办公任务基本离不开这三方面的软件.然而,效率时代又催生了新的要求和产品.现在,除了上述三方面的任务,我们经常要处理的还有思维导图和跨平台轻型多媒体演示等.那么,还需为此安装更多 ...
- 一分钟学会看k线图_教你一分钟怎样学会看k线图(纯干货)
K线图最早是日本德川幕府时代大阪的米商用来记录当时一天.一周或一月中米价涨跌行情的图示法,后被引入股市.K线图有直观.立体感强.携带信息量大的特点,蕴涵着丰富的东方哲学思想,能充分显示股价趋势的强弱. ...
最新文章
- Seaborn在图像内自定义图例(legend)位置实战
- mysql所有表查询
- 【转】NSDictionary以及NSMutableDictionary的用法
- eclipse上配置Maven
- 技术人凭什么那么骄傲?谢然:给自己开发工具
- python获取网页数据对电脑性能_【Python】网页数据爬取实战
- git 历史版本导出_Git基础知识(九)
- 程序员们怎么过端午?你属于哪一款?
- 【初体验】valgrind分析程序性能
- 可解释性系列论文:Mathematics of Deep Learning
- Kaseya 修复供应链勒索攻击事件中被利用的缺陷
- 动态载入.ascx用户控件
- NIO 网络编程之群聊系统
- Win10 触摸屏 快捷键操作
- 深度残差网络+自适应参数化ReLU激活函数:调参记录17
- 【渝粤题库】陕西师范大学165203 社会保险学 作业(专升本)
- python中iter是什么意思,python中iter的用途是什么?
- 彩色图像增强opencv
- 每日一技:给女友用代码做一个3D旋转相册,每天亿遍忘记初恋~
- 了解MVC模式与MVC框架
热门文章
- flutter英语怎么说_美国人天天说的英语:“你搞反了”英语怎么说?
- matlab程序约束条件,求Xij中i,j约束条件下的程序
- qthread run结束了算销毁吗_对 精致码农大佬 说的 Task.Run 会存在 内存泄漏 的思考...
- mysql修改字段结构_MySQL修改表结构及其添加删除修改字段功能
- c语言 汇编中断程序,ARM7 C语言嵌入汇编开关中断
- 基于JAVA+SpringMVC+Mybatis+MYSQL的保险销售管理系统
- 计算机应用技术的历史与现状,浅析计算机应用技术的现状及发展趋势
- AESRijndael加密
- 一路向左or一路向右
- 在UWP的XAML中使用原始类型