如何快速的将日K线数据转换为周K线及月K线数据

  • ​​导入数据​​
  • ​​计算周K线数据,求每周的开盘价、收盘价、最大值、最小值​​
  • ​​定义周期转换函数,方便求周K与月K等数据​​

在股票量化交易时,经常会使用到日K、周K及月K数据,那么我们如何利用日K的数据得到我们想要的周K及月K数据呢?

pandas中有一个专门处理周期的resample函数,可以很方便的对周期进行转换,下面以日K数据转化为周K及月K数据为例进行说明。

示例中使用的‘000001.XSHE.csv’文件,已上传至csdn资源中,可直接下载

导入数据

import pandas as pd
# 读取CSV文件
df = pd.read_csv('./000001.XSHE.csv')
# 显示前n行,默认是5
df.head()



date

open

close

high

low

volume

money

0

2015/1/5

9.98

10.00

10.17

9.74

458099037

4.565388e+09

1

2015/1/6

9.90

9.85

10.23

9.71

346952496

3.453446e+09

2

2015/1/7

9.72

9.67

9.88

9.55

272274401

2.634796e+09

3

2015/1/8

9.68

9.34

9.72

9.30

225445502

2.128003e+09

4

2015/1/9

9.30

9.42

9.91

9.19

401736419

3.835378e+09

# 将交易日期字符串变为日期类型
df['date'] = pd.to_datetime(df['date'])
# 将日期列设为索引
df.set_index('date', inplace = True)
df.head(10)



open

close

high

low

volume

money

date

2015-01-05

9.98

10.00

10.17

9.74

458099037

4.565388e+09

2015-01-06

9.90

9.85

10.23

9.71

346952496

3.453446e+09

2015-01-07

9.72

9.67

9.88

9.55

272274401

2.634796e+09

2015-01-08

9.68

9.34

9.72

9.30

225445502

2.128003e+09

2015-01-09

9.30

9.42

9.91

9.19

401736419

3.835378e+09

2015-01-12

9.29

9.22

9.40

9.05

248759608

2.293105e+09

2015-01-13

9.15

9.17

9.30

9.12

130822538

1.204987e+09

2015-01-14

9.23

9.25

9.49

9.18

202274250

1.889297e+09

2015-01-15

9.27

9.58

9.58

9.19

198933635

1.868796e+09

2015-01-16

9.62

9.60

9.75

9.48

249168874

2.403346e+09

计算周K线数据,求每周的开盘价、收盘价、最大值、最小值

# 定义一个空的df
week_df = pd.DataFrame()
# 求每周的开盘价
week_df['open'] = df['open'].resample('W').first()
# 求每周的收盘价
week_df['close'] = df['close'].resample('W').last()
# 求每周的最大值
week_df['high'] = df['high'].resample('W').max()
# 求每周的最小值
week_df['low'] = df['low'].resample('W').min()
week_df.head(10)



open

close

high

low

date

2015-01-11

9.98

9.42

10.23

9.19

2015-01-18

9.29

9.60

9.75

9.05

2015-01-25

8.75

8.99

9.14

8.47

2015-02-01

8.97

8.70

9.02

8.59

2015-02-08

8.49

8.44

9.01

8.37

2015-02-15

8.43

8.71

8.85

8.25

2015-02-22

8.71

8.74

8.81

8.57

2015-03-01

8.77

8.74

8.84

8.49

2015-03-08

8.76

8.39

8.80

8.30

2015-03-15

8.41

9.36

9.75

8.32

以上我们便通过股票的日K数据得到了周K数据。

定义周期转换函数,方便求周K与月K等数据

为了后续更方便的进行数据转换,我们可以直接封装一个函数,只需传输数据及想要转换的周期参数,即可得到相应周期的K线数据,函数定义如下:

def transfer_price_freq(data, time_freq):
"""
将数据转化为指定周期:开盘价(周期第一天)、收盘价(周期最后一天)、最高价(周期)、最低价(周期)
:param data:日数据,包含每天开盘价、收盘价、最高价、最低价
:param time_freq: 转换周期,周:‘W’,月:‘M’
:return:
"""
df_trans = pd.DataFrame()
df_trans['open'] = data['open'].resample(time_freq).first()
df_trans['close'] = data['close'].resample(time_freq).last()
df_trans['high'] = data['high'].resample(time_freq).max()
df_trans['low'] = data['low'].resample(time_freq).min()
return df_trans
# 我们传入df,及"M"参数即可得到月K数据
month_df = transfer_price_freq(df, 'M')
month_df.head()



open

close

high

low

date

2015-01-31

9.98

8.70

10.23

8.47

2015-02-28

8.49

8.74

9.01

8.25

2015-03-31

8.76

9.83

10.37

8.30

2015-04-30

9.88

12.62

13.23

9.71

2015-05-31

12.62

11.58

12.78

11.32

同理如果我们有每分钟的股票数据,我们也可以通过该函数得到5分钟K线、10分钟K线、30分钟K线等。