Python量化交易实战之使用Resample函数转换“日K”数据
使用Resample函数转换时间序列
一、什么是resample函数?
它是Python数据分析库Pandas的方法函数。
它主要用于转换时间序列的频次。可以做一些统计汇总的工作。
什么叫转换时间序列的频次呢?
比如说股票的日k和周k,
假设我只能获取到股票日K的数据,比如说11月1号到11月5号,那怎么样将它转换为以周为单位的K线呢?
日期 | 周期 | 开盘价 | 收盘价 | 最高价 | 最低价 |
---|---|---|---|---|---|
11月1号 | 周一 | 1.11 | 1.11 | 1.11 | 1.12 |
11月2号 | 周二 | 1.12 | 1.12 | 1.11 | 1.12 |
11月3号 | 周三 | 1.13 | 1.13 | 1.11 | 1.12 |
11月4号 | 周四 | 1.15 | 1.14 | 1.11 | 1.12 |
11月5号 | 周五 | 1.14 | 1.15 | 1.11 | 1.12 |
首先我们要明确,周K的开盘、收盘、最高、最低是什么。每周的开盘价是当周第一天的开盘价,收盘价是当周最后一天的收盘价,它的最高价是这周最高的价格,最低价是本周所有最低价中最低的价格。所以你去看炒股平台,它的周k都是以周五的交易日为记录的时间点位置。开盘、收盘、最高、最低是按照我刚刚讲解的这个规则来计算的。至于月K、年K的选取规则也是一样的。月K的周期是一个月,年K的周期是一年。
这个计算准确性你也可以通过网上的数据进行验证。这个计算规则,包括开盘、收盘、最高、最低的计算,收拾resample函数可以做到的事情。此外Resample还有个功能,就是做统计汇总,比如说我想计算一支股票总的周成交量,就可以使用Resample.sum函数去把周一到周五的成交量加起来。
为了方便大家记忆 ,你也可以把resample理解为Excel表格中的透视表功能。你可以按照日期做各种筛选和汇总统计的。最重要的是他可以按照日期。
二、实战Resample函数
因为这2节课还是一些比较基础的部分,所以还没有做模块化的内容。
我们会在创建股票数据库的时候 来做真正的模块化的工作。到这里都是初级的脚本的形式。先提前说下。
1.日K 转换为 周K
1.1函数文档学习
谷歌搜索Pandas Resample
:第一个链接就是这个函数的官方文档
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.resample.html
这里有介绍:Resample是属于Pandas DataFrame下面的方法。这里有关于参数的解释。
这里我们只对2个常用参数讲解,一个是rule,另一个是closed。
- rule表示的是你放一个什么样的周期性指标在里面,用m代表Month,Y代表Year,w代表Week,
- closed代表你取哪一个分界线,举例来说,比如说我把日k转换为周k,到底我是取周一为分界线还是周五为分界线呢?这就是通过closed来确定的。
这里有它的例子:
>>>index = pd.date_range('1/1/2000', periods=9, freq='T')
>>>series = pd.Series(range(9), index=index)
>>>series
2000-01-01 00:00:00 0
2000-01-01 00:01:00 1
2000-01-01 00:02:00 2
2000-01-01 00:03:00 3
2000-01-01 00:04:00 4
2000-01-01 00:05:00 5
2000-01-01 00:06:00 6
2000-01-01 00:07:00 7
2000-01-01 00:08:00 8
Freq: T, dtype: int64
这里首先创建了一个时间序列的DataFrame
,就是这个series
变量。你可以理解为它是一个只有一个字段的表格样式。接着往下看:
>>>series.resample('3T').sum()
2000-01-01 00:00:00 3
2000-01-01 00:03:00 12
2000-01-01 00:06:00 21
Freq: 3T, dtype: int64
这里使用了Resample
方法,3T
就是3分钟,T
表示分钟。sum()
就是汇总,也就是针对这一列数据进行汇总。
也就是说,每3分钟统计依次。注意到,这个时间序列汇总的时间取的值是3分钟的第一分钟。如果我想取时间周期的最后一分钟,可以将label的值改为“right":
>>>series.resample('3T', label='right').sum()
2000-01-01 00:03:00 3
2000-01-01 00:06:00 12
2000-01-01 00:09:00 21
Freq: 3T, dtype: int64
1.2实战
获取日K真实的数据:
#获取日k
df = get_price("000001.XSHG", end_date='2021-05-30 14:00:00',count=20, frequency='1d', fields=['open','close','high','low','volume','money'])
print(df)
可以看到获取到了4月28号
到5月28号
的所有数据。为了更方便理解 我们再添加一列数据,就是当前日期是星期几
的列。
#获取日k
df = get_price("000001.XSHG", end_date='2021-05-30 14:00:00',count=20, frequency='1d', fields=['open','close','high','low','volume','money'])
df['weekday']=df.index.weekday
print(df)
这里0
代表周一,这里如何转换为按“周”统计呢
#获取周k
import pandas as pd
df_week = pd.DataFrame()
df_week = df['open'].resample('W').first()
print(df_week)
可以看到这里的2021-05-30
是一个礼拜的最后一天。它对应的开盘价确实是这个数字。说明我们计算的周K数据是正确的。
收盘价就是每周收盘价
最后一天的数据。
最高价就是每周收盘价
的最大值。
最低价就是每周收盘价
的最小值。
#获取周k
import pandas as pd
df_week = pd.DataFrame()
df_week['open'] = df['open'].resample('W').first()
df_week['close'] = df['close'].resample('W').last()
df_week['high'] = df['high'].resample('W').max()
df_week['low'] = df['low'].resample('W').min()
print(df_week)
对比数据,close是最后一天的收盘价的数据。high是当前周的每天的最高价的最高价。low是当前周的每天的最低价的最低价。
我们通过不到10行代码就能将日K
的数据转换为周K
的数据。
2.汇总统计功能(统计月成交量、成交额)
汇总成交量和成交额
我想要把volume
(成交量)和money
(成交额)转换为总成交量和总成交额
#获取周k
import pandas as pd
df_week = pd.DataFrame()
df_week['open'] = df['open'].resample('W').first()
df_week['close'] = df['close'].resample('W').last()
df_week['high'] = df['high'].resample('W').max()
df_week['low'] = df['low'].resample('W').min()
df_week['volume(sum)'] = df['volume'].resample('W').sum()
df_week['money(sum)'] = df['money'].resample('W').sum()
print(df_week)
3.日K 转换为 月K
假设我有一年的数据,如果想转换为月K应该怎么转?
只需要改2个地方:
- 添加
start_date
获取到一整年的数据 - 将
resample
的参数改为M即可,M代表Month
#获取日k
df = get_price("000001.XSHG", end_date='2021-05-30 14:00:00', start_date='2020-05-30', frequency='1d', fields=['open','close','high','low','volume','money'])
df['weekday']=df.index.weekday
print(df)
#获取周k
import pandas as pd
df_week = pd.DataFrame()
df_week['open'] = df['open'].resample('M').first()
df_week['close'] = df['close'].resample('M').last()
df_week['high'] = df['high'].resample('M').max()
df_week['low'] = df['low'].resample('M').min()
print(df_week)
(资源库 www.zyku.net)
原文链接:https://blog.csdn.net/biggbang/article/details/117433870
栏 目:Python教程
下一篇:matplotlib共享坐标轴的实现(X或Y坐标轴)
本文标题:Python量化交易实战之使用Resample函数转换“日K”数据
本文地址:https://www.zyku.net/python/9636.html
您可能感兴趣的文章
- 12-07苹果13关闭微信视频磨皮方法汇总
- 11-18钉钉怎么转让日程
- 01-12随身网吧-随身网吧应用软件功能介绍
- 01-11明月书虫-明月书虫应用软件功能介绍
- 06-23PHP常用集成运行环境套件整理与介绍
- 07-07crontab定时执行表达式写法与crontab
- 01-08真我gt2pro启用应用分身教程分享
- 04-05一加9pro屏幕刷新率更改方法
- 09-19知到开启护眼功能教程介绍
- 02-20notepad2和notepad++区别是什么?哪个好
- 02-10Pandas加速代码之避免使用for循环
- 01-21OPPO手机游戏空间怎么找
- 07-15帝国CMS的栏目绑定域名步骤
- 01-18拍客宝-拍客宝应用软件功能介绍
- 12-25加查壁纸club-加查壁纸club应用软件功
- 01-25使用python向MongoDB插入时间字段的操
- 01-19twitch手机客户端-twitch手机客户端应
- 02-22DedeCMS会员中心不能删除好友的解决方
- 09-12苹果手机怎么取消腾讯自动扣费
- 07-29jquery v1.6.4
最近更新
阅读排行
猜你喜欢
- 11-29小米11pro怎么开启拦截骚扰电话
- 12-26如何修改MYSQL默认用户名ROOT
- 01-11宽带测速助手-宽带测速助手应用软件功
- 12-30练氪-练氪应用软件功能介绍
- 11-04小米空气净化器如何连接无线网
- 01-12青年相机-青年相机应用软件功能介绍
- 01-16犀咚-犀咚应用软件功能介绍
- 07-18真我gtneo2打开5G网络操作方法
- 03-22oppoa93微信铃声设置教程
- 09-13applewatch睡眠质量检测方法介绍