Python量化交易实战之使用Resample函数转换“日K”数据

作者:《虚幻私塾》 时间:2023-07-30 07:31:11 

使用Resample函数转换时间序列

 一、什么是resample函数?

它是Python数据分析库Pandas的方法函数。

它主要用于转换时间序列的频次。可以做一些统计汇总的工作。

什么叫转换时间序列的频次呢?

比如说股票的日k和周k,

假设我只能获取到股票日K的数据,比如说11月1号到11月5号,那怎么样将它转换为以周为单位的K线呢?


日期周期开盘价收盘价最高价最低价
11月1号周一1.111.111.111.12
11月2号周二1.121.121.111.12
11月3号周三1.131.131.111.12
11月4号周四1.151.141.111.12
11月5号周五1.141.151.111.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

Python量化交易实战之使用Resample函数转换“日K”数据

这里有介绍: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)

Python量化交易实战之使用Resample函数转换“日K”数据

可以看到获取到了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)

Python量化交易实战之使用Resample函数转换“日K”数据

这里0代表周一,这里如何转换为按“”统计呢


#获取周k
import pandas as pd
df_week = pd.DataFrame()
df_week = df['open'].resample('W').first()
print(df_week)

Python量化交易实战之使用Resample函数转换“日K”数据

可以看到这里的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)

Python量化交易实战之使用Resample函数转换“日K”数据

对比数据,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)

来源:https://blog.csdn.net/biggbang/article/details/117433870

标签:Python,Resample,数据转换,日K
0
投稿

猜你喜欢

  • 深入了解Vue3中props的原理与使用

    2024-05-09 15:09:17
  • [MySQL binlog]mysql如何彻底解析Mixed日志格式的binlog

    2024-01-16 23:34:05
  • SQL 多条件查询几种实现方法详细介绍

    2024-01-16 23:12:31
  • JS二维数组的定义说明

    2023-08-23 15:09:45
  • 用python对oracle进行简单性能测试

    2021-07-08 16:51:59
  • Javascript学习第一季 一

    2008-06-24 17:51:00
  • Mysql数据库命令大全

    2024-01-26 09:09:39
  • pyqt5打包成exe可执行文件的方法

    2022-02-09 11:25:57
  • php数组索引与键值操作技巧实例分析

    2023-07-01 21:39:10
  • Python reversed函数及使用方法解析

    2023-01-24 16:10:53
  • 利用Pytorch实现简单的线性回归算法

    2022-09-08 00:00:09
  • Python中多个数组行合并及列合并的方法总结

    2021-10-08 11:00:23
  • 以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法

    2022-02-15 19:11:48
  • sql2005 数据同步方法

    2024-01-15 03:28:54
  • 不要放弃使用CSS中的新技术

    2009-05-15 12:49:00
  • HTML与CSS在Flash中的应用

    2008-01-23 19:13:00
  • SQL Server数据库涉及到的数据仓库概念

    2009-01-15 12:58:00
  • python删除csv文件的行列

    2021-04-10 20:41:08
  • 详解JS中的compose函数和pipe函数用法

    2024-04-18 10:59:25
  • python使用pandas抽样训练数据中某个类别实例

    2021-03-02 02:56:14
  • asp之家 网络编程 m.aspxhome.com