用日线合成长周期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线的函数相关推荐

  1. 绘制自己组合的k线图_短线投资者必备的四种双K线组合抄底技巧,次次选中黑马股,精准率超高...

    (本文由公众号越声投研(yslcwh)整理,仅供参考,不构成操作建议.如自行操作,注意仓位控制和风险自负.) 股市里有一句话叫做:"新手死于追高,老手死于抄底",讲的是股市里大多数 ...

  2. 实用计算机操作方法,电脑操作教程_电脑常用小技巧_电脑操作技巧

    快捷键是很多电脑高手操作电脑最常用到的,通常我们会发现,实际电脑操作中,很多麻烦的电脑操作,完全可以通过简简单单的组合快捷键轻松完成,相比一般操作方面,大大提升了工作效率.下面就让小编带你去看看初学者 ...

  3. web开发的一些工具技巧_有用的技巧可帮助您建立Web开发人员的良好习惯

    web开发的一些工具技巧 by Antoine Lechenault 通过安托万·莱切诺特(Antoine Lechenault) 有用的技巧可帮助您建立Web开发人员的良好习惯 (Useful ti ...

  4. java编码技巧_编码小技巧 让java编程更便捷

    经过一段时间的编码,程序员们或多或少会形成自己的编码习惯,好的习惯能帮助自己写出更好的代码,方便程序的维护.抱着侥幸心理,对"可能会出错"的代码没有做"防错性程序设计&q ...

  5. excel常用函数公式及技巧_能看懂、能学会的9个Excel函数公式实用技巧解读!

    Excel中的函数公式非常的繁多,但在实际的工作中用到的也就那么几个,如果对这些常用的函数公式都不掌握,那就真的Out了! 一.日期转星期. 方法: 在目标单元格中输入公式:=TEXT(B3,&quo ...

  6. 笔记本触摸板失灵修复小技巧_生活小技巧,家庭便携电子秤修复教程,科技改变生活...

    序言 随着电子数码普及,生活越来越方便,以前家庭称重都是用杆秤.现如今取而代之的是精确度更高.体积更小巧.使用更方便的电子称.本文就以家庭便携电子秤为例,分享故障修复教程,希望读者从中能学到生活维修小 ...

  7. 博客英语作文写作技巧_网络写作技巧

    网络写作是一项技能,就像其他技能一样,只有通过实践才能完善. 我已经在此博客上写了两年了,在此之前为其他站点创建内容,我想我对此还可以,尽管总有方法可以改进! 在本文中,我将分享我多年来获得的一些智慧 ...

  8. 3使用技巧_办公小技巧:3+2 灵活使用WPS集成环境

    文字.表格.幻灯片,日常办公任务基本离不开这三方面的软件.然而,效率时代又催生了新的要求和产品.现在,除了上述三方面的任务,我们经常要处理的还有思维导图和跨平台轻型多媒体演示等.那么,还需为此安装更多 ...

  9. 一分钟学会看k线图_教你一分钟怎样学会看k线图(纯干货)

    K线图最早是日本德川幕府时代大阪的米商用来记录当时一天.一周或一月中米价涨跌行情的图示法,后被引入股市.K线图有直观.立体感强.携带信息量大的特点,蕴涵着丰富的东方哲学思想,能充分显示股价趋势的强弱. ...

最新文章

  1. Seaborn在图像内自定义图例(legend)位置实战
  2. mysql所有表查询
  3. 【转】NSDictionary以及NSMutableDictionary的用法
  4. eclipse上配置Maven
  5. 技术人凭什么那么骄傲?谢然:给自己开发工具
  6. python获取网页数据对电脑性能_【Python】网页数据爬取实战
  7. git 历史版本导出_Git基础知识(九)
  8. 程序员们怎么过端午?你属于哪一款?
  9. 【初体验】valgrind分析程序性能
  10. 可解释性系列论文:Mathematics of Deep Learning
  11. Kaseya 修复供应链勒索攻击事件中被利用的缺陷
  12. 动态载入.ascx用户控件
  13. NIO 网络编程之群聊系统
  14. Win10 触摸屏 快捷键操作
  15. 深度残差网络+自适应参数化ReLU激活函数:调参记录17
  16. 【渝粤题库】陕西师范大学165203 社会保险学 作业(专升本)
  17. python中iter是什么意思,python中iter的用途是什么?
  18. 彩色图像增强opencv
  19. 每日一技:给女友用代码做一个3D旋转相册,每天亿遍忘记初恋~
  20. 了解MVC模式与MVC框架

热门文章

  1. flutter英语怎么说_美国人天天说的英语:“你搞反了”英语怎么说?
  2. matlab程序约束条件,求Xij中i,j约束条件下的程序
  3. qthread run结束了算销毁吗_对 精致码农大佬 说的 Task.Run 会存在 内存泄漏 的思考...
  4. mysql修改字段结构_MySQL修改表结构及其添加删除修改字段功能
  5. c语言 汇编中断程序,ARM7 C语言嵌入汇编开关中断
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的保险销售管理系统
  7. 计算机应用技术的历史与现状,浅析计算机应用技术的现状及发展趋势
  8. AESRijndael加密
  9. 一路向左or一路向右
  10. 在UWP的XAML中使用原始类型